b43: Fix for broken transmission
PATCH 1/1 b43: Fix for broken transmission
This patch fixes the transmission problems introduced by commit f04b3787bbce4567e28069a9ec97dcd804626ac7
It depends on
[PATCH] b43: Fix ofdmtab write regression
I'm not sure if the dummy read is really required.
The old code does it. I think it can't hurt and can possibly fix some write posting problems (hardware bugs or whatever. Who knows).
Please test this.
drivers/net/wireless/b43/wa.c +13 -6
@@ -123,10 +123,16 @@ static void b43_wa_rssi_lt(struct b43_wl {int i; +#if 0 for (i =0 ; i <8 ; i++)b43_ofdmtab_write16 (dev,B43_OFDMTAB_RSSI , i, i +8 );for (i =8 ; i <16 ; i++)b43_ofdmtab_write16 (dev,B43_OFDMTAB_RSSI , i, i -8 ); +#endif +/* FIXME: Current specs are wrong. The following loop matches the +* old specs, which works great on my device. --mb */ +for (i =0 ; i <64 ; i++) +b43_ofdmtab_write16 (dev,B43_OFDMTAB_RSSI , i, i); }static void b43_wa_analog (struct b43_wldev *dev)
@@ -306,16 +312,16 @@ static void b43_wa_crs_ed(struct b43_wldstruct b43_phy *phy = &dev->phy;if (phy->rev ==1 ) { -b43_phy_write (dev,B43_PHY_CRSTHRES1 ,0x4F19 ); +b43_phy_write (dev,B43_PHY_CRSTHRES1_R1 ,0x4F19 ); }else if (phy->rev ==2 ) { -b43_phy_write (dev,B43_PHY_CRSTHRES1_R1 ,0x1861 ); -b43_phy_write (dev,B43_PHY_CRSTHRES2_R1 ,0x1861 ); +b43_phy_write (dev,B43_PHY_CRSTHRES1 ,0x1861 ); +b43_phy_write (dev,B43_PHY_CRSTHRES2 ,0x0271 );b43_phy_write (dev,B43_PHY_ANTDWELL ,b43_phy_read (dev,B43_PHY_ANTDWELL ) |0x0800 ); }else { -b43_phy_write (dev,B43_PHY_CRSTHRES1_R1 ,0x0098 ); -b43_phy_write (dev,B43_PHY_CRSTHRES2_R1 ,0x0070 ); +b43_phy_write (dev,B43_PHY_CRSTHRES1 ,0x0098 ); +b43_phy_write (dev,B43_PHY_CRSTHRES2 ,0x0070 );b43_phy_write (dev,B43_PHY_OFDM (0xC9 ),0x0080 );b43_phy_write (dev,B43_PHY_ANTDWELL , b43_phy_read(dev, B43_PHY_ANTDWELL)
@@ -441,7 +447,7 @@ static void b43_wa_altagc(struct b43_wld } }b43_phy_write (dev,B43_PHY_DIVSRCHIDX , - (b43_phy_read (dev,B43_PHY_DIVSRCHIDX ) &0x7F7F ) |0x7874 ); + (b43_phy_read (dev,B43_PHY_DIVSRCHIDX ) &0x8080 ) |0x7874 );b43_phy_write (dev,B43_PHY_OFDM (0x8E ),0x1C00 );if (phy->rev ==1 ) { b43_phy_write(dev, B43_PHY_DIVP1P2GAIN,
@@ -466,6 +472,7 @@ static void b43_wa_altagc(struct b43_wldb43_phy_write (dev,B43_PHY_OFDM (0x26 ),b43_phy_read (dev,B43_PHY_OFDM (0x26 )) & ~0x1000 ); } +b43_phy_read (dev,B43_PHY_VERSION_OFDM );/* Dummy read */ }static void b43_wa_tr_ltov (struct b43_wldev *dev)/* TR Lookup Table Original Values */
drivers/net/wireless/b43/phy.h +3 -3
@@ -25,7 +25,7 @@ struct b43_phy;#define B43_PHY_BBANDCFG_RXANT 0x180/* RX Antenna selection */ #define B43_PHY_BBANDCFG_RXANT_SHIFT 7#define B43_PHY_PWRDOWN B43_PHY_OFDM(0x03)/* Powerdown */ -#define B43_PHY_CRSTHRES1 B43_PHY_OFDM(0x06)/* CRS Threshold 1 */ +#define B43_PHY_CRSTHRES1_R1 B43_PHY_OFDM(0x06)/* CRS Threshold 1 (phy.rev 1 only) */ #define B43_PHY_LNAHPFCTL B43_PHY_OFDM(0x1C)/* LNA/HPF control */ #define B43_PHY_LPFGAINCTL B43_PHY_OFDM(0x20)/* LPF Gain control */ #define B43_PHY_ADIVRELATED B43_PHY_OFDM(0x27)/* FIXME rename */
@@ -69,8 +69,8 @@ struct b43_phy;#define B43_PHY_DIVP1P2GAIN B43_PHY_OFDM(0xAB)#define B43_PHY_DIVSRCHGAINBACK B43_PHY_OFDM(0xAD)/* Divider search gain back */ #define B43_PHY_DIVSRCHGAINCHNG B43_PHY_OFDM(0xAE)/* Divider search gain change */ -#define B43_PHY_CRSTHRES1_R1 B43_PHY_OFDM(0xC0)/* CRS Threshold 1 (rev 1 only) */ -#define B43_PHY_CRSTHRES2_R1 B43_PHY_OFDM(0xC1)/* CRS Threshold 2 (rev 1 only) */ +#define B43_PHY_CRSTHRES1 B43_PHY_OFDM(0xC0)/* CRS Threshold 1 (phy.rev >= 2 only) */ +#define B43_PHY_CRSTHRES2 B43_PHY_OFDM(0xC1)/* CRS Threshold 2 (phy.rev >= 2 only) */ #define B43_PHY_TSSIP_LTBASE B43_PHY_OFDM(0x380)/* TSSI power lookup table base */ #define B43_PHY_DC_LTBASE B43_PHY_OFDM(0x3A0)/* DC lookup table base */ #define B43_PHY_GAIN_LTBASE B43_PHY_OFDM(0x3C0)/* Gain lookup table base */
drivers/net/wireless/b43/tables.c +1 -1
@@ -403,7 +403,7 @@ void b43_ofdmtab_write16(struct b43_wlde addr = table + offset;if ((phy->ofdmtab_addr_direction !=B43_OFDMTAB_DIRECTION_WRITE ) || - (addr -1 != phy->ofdmtab_addr)) { + (addr -1 != phy->ofdmtab_addr)) {/* The hardware has a different address in memory. Update it. */ b43_phy_write (dev,B43_PHY_OTABLECTL , addr); phy->ofdmtab_addr_direction =B43_OFDMTAB_DIRECTION_WRITE ;
Signature · 1 line
Greetings Michael.
Quoted 6 lines · On Tuesday 11 December 2007 13:43:50 Michael Buesch wrote:
This patch fixes the transmission problems introduced by commit
f04b3787bbce4567e28069a9ec97dcd804626ac7It depends on
[PATCH] b43: Fix ofdmtab write regression
Quoted 7 lines
I'm not sure if the dummy read is really required.
The old code does it. I think it can't hurt and can possibly fix some write posting problems (hardware bugs or whatever. Who knows).Please test this.
NOT-signed-off-by Michael Buesch <[email protected]>
Here's an updated version that should fix even more bugs:
http://bu3sch.de/patches/wireless-2.6/20071211-1622/patches/005-b43-fix-init-rewrite-breakage.patch
Signature · 1 line
Greetings Michael.
Quoted 11 lines · Michael Buesch
Quoted 10 lines · On Tuesday 11 December 2007 13:43:50 Michael Buesch wrote:
This patch fixes the transmission problems introduced by commit
f04b3787bbce4567e28069a9ec97dcd804626ac7It depends on
[PATCH] b43: Fix ofdmtab write regressionI'm not sure if the dummy read is really required.
The old code does it. I think it can't hurt and can possibly fix some write posting problems (hardware bugs or whatever. Who knows).
Quoted 6 lines
Quoted 3 lines
Please test this.
NOT-signed-off-by Michael Buesch <[email protected]>Here's an updated version that should fix even more bugs:
http://bu3sch.de/patches/wireless-2.6/20071211-1622/patches/005-b43-fix-init-rewrite-breakage.patch
This patch (and its predecessor) seem to make transmission at the OFDM rates a bit more reliable on my BCM4311/2 card.
Larry
Quoting Larry Finger <[email protected]>:
Quoted 3 lines
Quoted 2 lines · Michael Buesch
Here's an updated version that should fix even more bugs:
http://bu3sch.de/patches/wireless-2.6/20071211-1622/patches/005-b43-fix-init-rewrite-breakage.patch
I had to omit the last part (for tables.c) - it's unrelated, cosmetic and doesn't apply to wireless-2.6/everything.
Quoted 2 lines
This patch (and its predecessor) seem to make transmission at the OFDM rates a bit more reliable on my BCM4311/2 card.
It's working fine on BCM4318 on PowerPC. I haven't done any specific comparisons, but it used to disconnect a lot (at least one an hour) with a small antenna, so I installed a bigger antenna, but then gave up and switched to using another wireless device (rtl8185).
Right now, it's been working for over 2 hours with a small antenna (although it's a different antenna borrowed from rtl8185) and no disconnects. Scanning finds 5 APs, which is the most I have seen here.
Signature · 2 lines
Regards, Pavel Roskin
Quoted 8 lines · On Wednesday 12 December 2007 09:21:26 Pavel Roskin wrote:
Quoting Larry Finger <[email protected]>:
Quoted 3 lines
Quoted 2 lines · Michael Buesch
Here's an updated version that should fix even more bugs:
http://bu3sch.de/patches/wireless-2.6/20071211-1622/patches/005-b43-fix-init-rewrite-breakage.patchI had to omit the last part (for
tables.c) - it's unrelated, cosmetic and doesn't apply to wireless-2.6/everything.
This patch depends on
[PATCH] b43: Fix ofdmtab write regression
And that is not just cosmetic.
Quoted 4 lines
Quoted 3 lines
This patch (and its predecessor) seem to make transmission at the OFDM rates a bit more reliable on
my BCM4311/2 card.
Quoted 8 lines
It's working fine on BCM4318 on PowerPC. I haven't done any specific comparisons, but it used to disconnect a lot (at least one an hour) with a small antenna, so I installed a bigger antenna, but then gave up and switched to using another wireless device (rtl8185).
Right now, it's been working for over 2 hours with a small antenna (although it's a different antenna borrowed from rtl8185) and no disconnects. Scanning finds 5 APs, which is the most I have seen here.
Cool, thanks.
Signature · 1 line
Greetings Michael.
Citando Michael Buesch <[email protected]>:
Quoted 11 lines · On Tuesday 11 December 2007 13:43:50 Michael Buesch wrote:
Quoted 10 lines
This patch fixes the transmission problems introduced by commit
f04b3787bbce4567e28069a9ec97dcd804626ac7It depends on
[PATCH] b43: Fix ofdmtab write regressionI'm not sure if the dummy read is really required.
The old code does it. I think it can't hurt and can possibly fix some write posting problems (hardware bugs or whatever. Who knows).
Quoted 6 lines
Quoted 3 lines
Please test this.
NOT-signed-off-by Michael Buesch <[email protected]>Here's an updated version that should fix even more bugs:
http://bu3sch.de/patches/wireless-2.6/20071211-1622/patches/005-b43-fix-init-rewrite-breakage.patch
It completely fixes my 4309. Thank you for fixing my obnoxious regression. John, I think that this should go into the tree as soon as possible (well, as soon as Michael sign it off).
--
Ciao
Stefano