Bisection complete!
After testing numerous settings for BoardFlags, I found that the only ones
to have a benefical effect on the card is 0x4049/0x4249 and 0x0048/0x0248,
which differs from the original 0x0049 only in the BFL_BTCMOD bit, which is
0 by default, but 1 in this configuration. Not only that, setting BoardFlags
to 0x4049 and leaving everything else as is in the original Asus SPROM fixes
BOTH the "No TX" and the "ping time cycle" bugs! Even
monitoring/packetspamming while operating works perfectly. The setting
0x4249 produces the same (perfectly-working) result, only with Afterburner
marked as supported. (Not sure if it actually gets enabled, though.) Setting
BFL_FEM to 1 (0x4849 or 0x4A49) introduces the "ping cycle" bug, most likely
because the card doesn't actually support the Front-End Module. BFL_HGPA=1
(0x6049/0x6249) causes ping packet loss /duplicate count to increase
somewhat, likely because the card doesn't have a high-gain PA. 0x0048 and
0x0248 also work fine, although this setting disables Bluetooth coexistence
(BFL_BTCOEXIST). So, it looks like BoardFlags was intended to be 0x4249, but
Asus incorrectly sets it to 0x0049, which completely breaks transmission in
b43.

For reference, here is BFL_BTCMOD's description from bcm-specs:
"0x4000: BFL_BTCMOD: BFL_BTCOEXIST is given in alternate GPIOs".
BFL_BTCOEXIST is defined as:
"0x0001: BFL_BTCOEXIST: Board implements Bluetooth coexistance[sic]". I
don't know if "coexistance" is a misspelling or if it's the correct spelling
in British, but if it's unintended, then it should be fixed. (Just
nit-picking, sorry.)

>From this, the problem appears to be a Bluetooth coexistence bug. We can
work around it by setting an exception for subsys venID:0x100F and subsys
prodID:0x1043 to always treat BFL_BTCMOD as 1 if BFL_BTCOEXIST is set to 1.
(Possibly this is acceptable for all subsys IDs, not just the Asus-specific
one I wrote here, as I have yet to see a non-Asus BCM43xx that has
BFL_BTCOEXIST set, but not BFL_BTCMOD.) However, if it's a bug in our
Bluetooth coexistence code, then we shouldn't just apply the workaround, but
find and fix the actual bug that causes the bug if the workaround isn't
applied.

-- 
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
_______________________________________________
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to