Changeset 2965


Ignore:
Timestamp:
2006-01-14T02:10:24+01:00 (12 years ago)
Author:
nbd
Message:

fix first transmit timeout bug on b44 and really fix #205 :)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/whiterussian/openwrt/target/linux/linux-2.4/patches/brcm/007-b44_bcm47xx_support.patch

    r2949 r2965  
    11diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c 
    22--- linux.old/drivers/net/b44.c 2006-01-12 17:27:45.920623500 +0100 
    3 +++ linux.dev/drivers/net/b44.c 2006-01-13 13:29:18.782391750 +0100 
     3+++ linux.dev/drivers/net/b44.c 2006-01-14 02:03:19.413197250 +0100 
    44@@ -1,7 +1,9 @@ 
    55 /* b44.c: Broadcom 4400 device driver. 
     
    183183        if (err) 
    184184                return err; 
    185 @@ -405,6 +490,18 @@ 
    186  { 
     185@@ -406,6 +491,23 @@ 
    187186        u32 val; 
    188187        int err; 
    189 +       char *s; 
    190 + 
    191 +       if ((s = nvram_get("boardnum")) && (s != NULL) && \ 
    192 +                       !strncmp(s, "2", 1) && \ 
    193 +                       (__b44_readphy(bp, 0, MII_BMCR, &val) != 0) && \ 
     188  
     189+ 
     190+       /* 
     191+        * workaround for bad hardware design in Linksys WAP54G v1.0 
     192+        * see https://dev.openwrt.org/ticket/146 
     193+        * check and reset bit "isolate" 
     194+        */ 
     195+       if ((bp->pdev->device == PCI_DEVICE_ID_BCM4713) && \ 
     196+                       (atoi(nvram_get("boardnum")) == 2) && \ 
     197+                       (__b44_readphy(bp, 0, MII_BMCR, &val) == 0) && \ 
    194198+                       (val & BMCR_ISOLATE) && \ 
    195199+                       (__b44_writephy(bp, 0, MII_BMCR, val & ~BMCR_ISOLATE) != 0)) { 
     
    199203+       if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) 
    200204+               return 0; 
    201   
     205+ 
    202206        if ((err = b44_readphy(bp, B44_MII_ALEDCTRL, &val)) != 0) 
    203207                goto out; 
    204 @@ -498,6 +595,19 @@ 
     208        if ((err = b44_writephy(bp, B44_MII_ALEDCTRL, 
     209@@ -498,6 +600,19 @@ 
    205210 { 
    206211        u32 bmsr, aux; 
     
    222227            !b44_readphy(bp, B44_MII_AUXCTRL, &aux) && 
    223228            (bmsr != 0xffff)) { 
    224 @@ -1092,6 +1202,8 @@ 
     229@@ -1092,6 +1207,8 @@ 
    225230 /* bp->lock is held. */ 
    226231 static void b44_chip_reset(struct b44 *bp) 
     
    231236                bw32(B44_RCV_LAZY, 0); 
    232237                bw32(B44_ENET_CTRL, ENET_CTRL_DISABLE); 
    233 @@ -1105,9 +1217,10 @@ 
     238@@ -1105,9 +1222,10 @@ 
    234239                bw32(B44_DMARX_CTRL, 0); 
    235240                bp->rx_prod = bp->rx_cons = 0; 
     
    245250  
    246251        ssb_core_reset(bp); 
    247 @@ -1115,6 +1228,11 @@ 
     252@@ -1115,6 +1233,11 @@ 
    248253        b44_clear_stats(bp); 
    249254  
     
    257262                             (0x0d & MDIO_CTRL_MAXF_MASK))); 
    258263        br32(B44_MDIO_CTRL); 
    259 @@ -1628,7 +1746,7 @@ 
     264@@ -1215,6 +1338,8 @@ 
     265        struct b44 *bp = dev->priv; 
     266        int err; 
     267  
     268+       netif_carrier_off(dev); 
     269+ 
     270        err = b44_alloc_consistent(bp); 
     271        if (err) 
     272                return err; 
     273@@ -1235,9 +1360,10 @@ 
     274        bp->timer.expires = jiffies + HZ; 
     275        bp->timer.data = (unsigned long) bp; 
     276        bp->timer.function = b44_timer; 
     277-       add_timer(&bp->timer); 
     278+       b44_timer((unsigned long) bp); 
     279  
     280        b44_enable_ints(bp); 
     281+       netif_start_queue(dev); 
     282  
     283        return 0; 
     284  
     285@@ -1628,7 +1754,7 @@ 
    260286                u32 mii_regval; 
    261287  
     
    266292  
    267293                data->val_out = mii_regval; 
    268 @@ -1641,7 +1759,7 @@ 
     294@@ -1641,7 +1767,7 @@ 
    269295                        return -EPERM; 
    270296  
     
    275301  
    276302                return err; 
    277 @@ -1668,21 +1786,52 @@ 
     303@@ -1668,21 +1794,52 @@ 
    278304 static int __devinit b44_get_invariants(struct b44 *bp) 
    279305 { 
     
    341367        /* With this, plus the rx_header prepended to the data by the 
    342368         * hardware, we'll land the ethernet header on a 2-byte boundary. 
    343 @@ -1692,13 +1841,12 @@ 
     369@@ -1692,13 +1849,12 @@ 
    344370        bp->imask = IMASK_DEF; 
    345371  
     
    357383  
    358384 static int __devinit b44_init_one(struct pci_dev *pdev, 
    359 @@ -1710,6 +1858,10 @@ 
     385@@ -1710,6 +1866,10 @@ 
    360386        struct b44 *bp; 
    361387        int err, i; 
     
    368394                printk(KERN_INFO "%s", version); 
    369395  
    370 @@ -1819,11 +1971,17 @@ 
     396@@ -1819,11 +1979,17 @@ 
    371397  
    372398        pci_save_state(bp->pdev, bp->pci_cfg_state); 
Note: See TracChangeset for help on using the changeset viewer.