lkml.org 
[lkml]   [2006]   [Sep]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] fix idiocy in asd_init_lseq_mdp()
> Several of us have reported a degenerate mode, that
> I term as "tmf timeout", in which a aic94xx based card
> becomes inoperable. Alas, the same hardware running another
> OS does not exhibit that problem (or at least not as much).

> > asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq),
> > - (u16) LmM0INTEN_MASK & 0xFFFF0000 >> 16);
> > + (u16) ((LmM0INTEN_MASK & 0xFFFF0000) >> 16));
> > asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq) + 2,
> > (u16) LmM0INTEN_MASK & 0xFFFF);
> > asd_write_reg_byte(asd_ha, LmSEQ_LINK_RST_FRM_LEN(lseq), 0);

> BTW Luben was pointing out that the call you patched
> and the following call can be combined into a less
> trouble prone asd_write_reg_dword() call.

In that case there's another bug - we should write upper 16 bits to
addr + 2, not the lower ones.

IOW, the old code was
broken attempt to write upper 16 bits to addr (ends up writing _lower_
16 bits)
writing lower 16 bits to addr + 2

With this patch we get the first call do what it clearly intended to do
(unless it's a deliberate obfuscation from hell). _IF_ we really want
to write the damn thing little-endian, the order should be reverted on
top of that. I.e.
asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq),
(u16) LmM0INTEN_MASK & 0xFFFF);
asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq) + 2,
(u16) ((LmM0INTEN_MASK & 0xFFFF0000) >> 16));
or, indeed, asd_write_reg_dword().
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-09-25 17:03    [W:0.053 / U:0.420 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site