Changeset 2953


Ignore:
Timestamp:
2006-01-13T17:36:33+01:00 (12 years ago)
Author:
nbd
Message:

add modified b44 fixes based on #205 to brcm-2.6

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/openwrt/target/linux/brcm-2.6/patches/004-b44_bcm47xx_support.patch

    r2932 r2953  
    1 diff -urN orig/linux-2.6.15/drivers/net/b44.c linux-2.6.15/drivers/net/b44.c 
    2 --- orig/linux-2.6.15/drivers/net/b44.c 2006-01-03 04:21:10.000000000 +0100 
    3 +++ linux-2.6.15/drivers/net/b44.c      2006-01-12 12:22:58.760883688 +0100 
     1diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c 
     2--- linux.old/drivers/net/b44.c 2006-01-12 01:44:42.548326000 +0100 
     3+++ linux.dev/drivers/net/b44.c 2006-01-13 17:30:08.283122500 +0100 
    44@@ -1,7 +1,9 @@ 
    55-/* b44.c: Broadcom 4400 device driver. 
     
    157157        if (err) 
    158158                return err; 
    159 @@ -439,6 +478,30 @@ 
     159@@ -439,6 +478,18 @@ 
    160160        u32 val; 
    161161        int err; 
    162162  
    163163+#ifdef CONFIG_BCM947XX 
    164 +       if (bp->pdev->device == PCI_DEVICE_ID_BCM4713) { 
    165 +               /* 
    166 +                * workaround for bad hardware design in Linksys WAP54G v1.0 
    167 +                * see https://dev.openwrt.org/ticket/146 
    168 +                * check and reset bit "isolate" 
    169 +                */ 
    170 +               if (!strcmp(nvram_get("boardnum"), "2\r")) { 
    171 +                       u32 val; 
    172 +                       if (__b44_readphy(bp, 0, MII_BMCR, &val) != 0) { 
    173 +                               printk(KERN_WARNING PFX "%s: PHY WAP54G: cannot access PHY.\n",  
    174 +                                       bp->dev->name); 
    175 +                       } else if (val & BMCR_ISOLATE) { 
    176 +                               printk(KERN_INFO PFX "%s: PHY WAP54G: resetting isolate bit.\n", 
    177 +                                       bp->dev->name); 
    178 +                               if (__b44_writephy(bp, 0, MII_BMCR, val & ~BMCR_ISOLATE) != 0) 
    179 +                                       printk(KERN_WARNING PFX "PHY WAP54G: cannot reset isolate bit.\n"); 
    180 +                       } 
    181 +               } 
     164+       char *s; 
     165+       if ((s = nvram_get("boardnum")) && (s != NULL) && \ 
     166+                       !strncmp(s, "2", 1) && \ 
     167+                       (__b44_readphy(bp, 0, MII_BMCR, &val) != 0) && \ 
     168+                       (val & BMCR_ISOLATE) && \ 
     169+                       (__b44_writephy(bp, 0, MII_BMCR, val & ~BMCR_ISOLATE) != 0)) { 
     170+               printk(KERN_WARNING PFX "PHY: cannot reset MII transceiver isolate bit.\n"); 
    182171+       } 
    183172+#endif 
    184 + 
    185173+       if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) 
    186174+               return 0; 
     
    188176                goto out; 
    189177        if ((err = b44_writephy(bp, B44_MII_ALEDCTRL, 
    190 @@ -534,6 +597,19 @@ 
     178@@ -534,6 +585,19 @@ 
    191179 { 
    192180        u32 bmsr, aux; 
     
    208196            !b44_readphy(bp, B44_MII_AUXCTRL, &aux) && 
    209197            (bmsr != 0xffff)) { 
    210 @@ -1281,9 +1357,10 @@ 
     198@@ -1281,9 +1345,10 @@ 
    211199                bw32(bp, B44_DMARX_CTRL, 0); 
    212200                bp->rx_prod = bp->rx_cons = 0; 
     
    222210  
    223211        ssb_core_reset(bp); 
    224 @@ -1291,8 +1368,14 @@ 
     212@@ -1291,8 +1356,14 @@ 
    225213        b44_clear_stats(bp); 
    226214  
     
    238226  
    239227        if (!(br32(bp, B44_DEVCTRL) & DEVCTRL_IPP)) { 
    240 @@ -1834,18 +1917,297 @@ 
     228@@ -1834,18 +1905,297 @@ 
    241229        .get_perm_addr          = ethtool_op_get_perm_addr, 
    242230 }; 
     
    540528        return err; 
    541529 } 
    542 @@ -1865,22 +2227,43 @@ 
     530@@ -1865,22 +2215,43 @@ 
    543531 static int __devinit b44_get_invariants(struct b44 *bp) 
    544532 { 
     
    598586         * hardware, we'll land the ethernet header on a 2-byte boundary. 
    599587         */ 
    600 @@ -1889,11 +2272,7 @@ 
     588@@ -1889,11 +2260,7 @@ 
    601589        bp->imask = IMASK_DEF; 
    602590  
     
    610598        return err; 
    611599 } 
    612 @@ -2032,11 +2411,17 @@ 
     600@@ -2032,11 +2399,17 @@ 
    613601  
    614602        pci_save_state(bp->pdev); 
     
    629617  
    630618 err_out_iounmap: 
    631 diff -urN orig/linux-2.6.15/drivers/net/b44.h linux-2.6.15/drivers/net/b44.h 
    632 --- orig/linux-2.6.15/drivers/net/b44.h 2006-01-03 04:21:10.000000000 +0100 
    633 +++ linux-2.6.15/drivers/net/b44.h      2006-01-12 12:16:02.403179680 +0100 
     619diff -urN linux.old/drivers/net/b44.h linux.dev/drivers/net/b44.h 
     620--- linux.old/drivers/net/b44.h 2006-01-12 01:44:42.548326000 +0100 
     621+++ linux.dev/drivers/net/b44.h 2006-01-12 02:55:06.290783500 +0100 
    634622@@ -292,6 +292,10 @@ 
    635623 #define SSB_PCI_MASK1          0xfc000000 
Note: See TracChangeset for help on using the changeset viewer.