Search Linux Wireless

Re: Speed enhancement for BCM4306/2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Larry Finger wrote:
gavron@xxxxxxxxxxx wrote:


Larry Finger wrote:
gavron@xxxxxxxxxxx wrote:
I haven't tried a build yet, but please let me know if I'm on the right track.

E
# diff -uN /tmp/phy.c drivers/net/wireless/b43legacy/phy.c
--- /tmp/phy.c    2008-09-06 15:13:33.000000000 -0700
+++ drivers/net/wireless/b43legacy/phy.c 2008-09-06 15:54:03.000000000 -0700
@@ -1010,7 +1010,7 @@
        b43legacy_phy_initb5(dev);
    else
        b43legacy_phy_initb6(dev);
-    if (phy->rev >= 2 || phy->gmode)
+    if (phy->rev >= 2 && phy->gmode)
        b43legacy_phy_inita(dev);

    if (phy->rev >= 2) {
@@ -1021,21 +1021,26 @@
        b43legacy_phy_write(dev, 0x0811, 0x0000);
        b43legacy_phy_write(dev, 0x0015, 0x00C0);
    }
-    if (phy->rev > 5) {
+    if (phy->rev >= 3) {

AFAIK, this change is an error in the specs. I have since changed it. Sorry I didn't catch it earlier.

Otherwise, this patch seems to be correct. All you need now are the fixes for b43legacy_phy_initb5() and b43legacy_phy_initb6().

Larry

Ok, I've re-looked at the specs and made the appropriate corrections. I've also gone through all of the PHY specs and found one other correction. It's enclosed below for review.

Where do I go to find the stuff for ...initb5() and ...initb6()?

That one was also an error in the specs - fixed now.

On the V3 specifications site, click on the RecentChanges button and select B5PHY and B6PHY to get the specs for the other routines. I rechecked the specs, and all agree with my current (revised) routines.


Larry

Try #5:
# diff -uN /tmp/phy.c drivers/net/wireless/b43legacy/phy.c
--- /tmp/phy.c    2008-09-06 15:13:33.000000000 -0700
+++ drivers/net/wireless/b43legacy/phy.c 2008-09-06 17:24:29.000000000 -0700
@@ -595,12 +595,14 @@
                    0x0035) & 0xFFC0) | 0x0064);
        b43legacy_phy_write(dev, 0x005D, (b43legacy_phy_read(dev,
                    0x005D) & 0xFF80) | 0x000A);
+        b43legacy_phy_write(dev, 0x5B, 0x0000);
+        b43legacy_phy_write(dev, 0x5C, 0x0000);
    }

    if (dev->bad_frames_preempt)
        b43legacy_phy_write(dev, B43legacy_PHY_RADIO_BITFIELD,
                    b43legacy_phy_read(dev,
-                    B43legacy_PHY_RADIO_BITFIELD) | (1 << 11));
+                    B43legacy_PHY_RADIO_BITFIELD) | (1 << 12));

    if (phy->analog == 1) {
        b43legacy_phy_write(dev, 0x0026, 0xCE00);
@@ -771,7 +773,7 @@
        b43legacy_phy_write(dev, 0x002A, 0x8AC0);
    b43legacy_phy_write(dev, 0x0038, 0x0668);
    b43legacy_radio_set_txpower_bg(dev, 0xFFFF, 0xFFFF, 0xFFFF);
-    if (phy->radio_rev <= 5)
+    if (phy->radio_rev == 4 || phy->radio_rev == 5)
        b43legacy_phy_write(dev, 0x005D, (b43legacy_phy_read(dev,
                    0x005D) & 0xFF80) | 0x0003);
    if (phy->radio_rev <= 2)
@@ -1010,7 +1012,7 @@
        b43legacy_phy_initb5(dev);
    else
        b43legacy_phy_initb6(dev);
-    if (phy->rev >= 2 || phy->gmode)
+    if (phy->rev >= 2 && phy->gmode)
        b43legacy_phy_inita(dev);

    if (phy->rev >= 2) {
@@ -1025,17 +1027,22 @@
        b43legacy_phy_write(dev, 0x0811, 0x0400);
        b43legacy_phy_write(dev, 0x0015, 0x00C0);
    }
-    if (phy->rev >= 2 || phy->gmode) {
+    if (phy->gmode) {
        tmp = b43legacy_phy_read(dev, 0x0400) & 0xFF;
-        if (tmp == 3 || tmp == 5) {
+        if (tmp == 3) {
+            b43legacy_phy_write(dev, 0x04C2, 0x1816);
+            b43legacy_phy_write(dev, 0x04C3, 0x8606);
+        }
+        if (tmp == 4 || tmp == 5) {
            b43legacy_phy_write(dev, 0x04C2, 0x1816);
            b43legacy_phy_write(dev, 0x04C3, 0x8006);
-            if (tmp == 5)
-                b43legacy_phy_write(dev, 0x04CC,
-                            (b43legacy_phy_read(dev,
-                             0x04CC) & 0x00FF) |
-                             0x1F00);
+            b43legacy_phy_write(dev, 0x04CC,
+                        (b43legacy_phy_read(dev,
+                        0x04CC) & 0x00FF) |
+                        0x1F00);
        }
+    }
+    if (phy->rev >= 2)
        b43legacy_phy_write(dev, 0x047E, 0x0078);
    }
    if (phy->radio_rev == 8) {
@@ -1078,7 +1085,7 @@
        else
            b43legacy_phy_write(dev, 0x002F, 0x0202);
    }
-    if (phy->gmode || phy->rev >= 2) {
+    if (phy->gmode) {
        b43legacy_phy_lo_adjust(dev, 0);
        b43legacy_phy_write(dev, 0x080F, 0x8078);
    }

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux