Updated to bcm5700 version 8.3.17b release of driver.
authorMarc Fiuczynski <mef@cs.princeton.edu>
Tue, 18 Apr 2006 14:30:19 +0000 (14:30 +0000)
committerMarc Fiuczynski <mef@cs.princeton.edu>
Tue, 18 Apr 2006 14:30:19 +0000 (14:30 +0000)
drivers/net/bcm5700/DISTRIB.TXT
drivers/net/bcm5700/README.TXT
drivers/net/bcm5700/RELEASE.TXT
drivers/net/bcm5700/b57um.c
drivers/net/bcm5700/bcm5700.4
drivers/net/bcm5700/tigon3.c

index 2c4ba7d..22891d3 100755 (executable)
@@ -1,14 +1,14 @@
 \r
            Additional Installation Notes for Various Linux Distributions\r
                        Broadcom BCM5700 Linux Driver\r
-                              Version 8.3.14\r
-                                11/02/2005\r
+                              Version 8.3.17b\r
+                                02/21/2006\r
 \r
                           Broadcom Corporation\r
                           16215 Alton Parkway,\r
                           Irvine, CA 92619-7013\r
 \r
-                Copyright (c) 2000-2005 Broadcom Corporation\r
+                Copyright (c) 2000-2006 Broadcom Corporation\r
                            All rights reserved\r
 \r
 \r
index 3555ef5..05d713d 100644 (file)
@@ -1,14 +1,14 @@
 
                            Installation Notes
                        Broadcom BCM5700 Linux Driver
-                              Version 8.3.14
-                                11/02/2005
+                              Version 8.3.17b
+                                02/21/2006
 
                           Broadcom Corporation
                           16215 Alton Parkway,
                           Irvine, CA 92619-7013
 
-                Copyright (c) 2000-2005 Broadcom Corporation
+                Copyright (c) 2000-2006 Broadcom Corporation
                            All rights reserved
 
 
@@ -529,7 +529,7 @@ The following are the most common sample messages that may be logged in the file
 will appear on the console. Most systems are set to level 6 by default.
 
 Broadcom Gigabit Ethernet Driver bcm5700 with Broadcom NIC Extension (NICE)
-ver. 8.3.14 (11/02/05)
+ver. 8.3.17b (02/21/06)
 
     Driver signon
 
index abfc21c..10ca5a0 100755 (executable)
@@ -1,17 +1,56 @@
 \r
                               Release Notes\r
                        Broadcom BCM5700 Linux Driver\r
-                              Version 8.3.14\r
-                                11/02/2005\r
+                              Version 8.3.17b\r
+                                02/21/2006\r
 \r
                           Broadcom Corporation\r
                           16215 Alton Parkway,\r
                           Irvine, CA 92619-7013\r
 \r
-                Copyright (c) 2000-2005 Broadcom Corporation\r
+                Copyright (c) 2000-2006 Broadcom Corporation\r
                            All rights reserved\r
 \r
 \r
+v8.3.17b (February 21 2006)\r
+=========================\r
+    Fixes:\r
+    ------\r
+    1. Problem : (ISSUE289636) 5715 ports hang under linux with 6 or more\r
+                ports are active in the RFC2544 test.\r
+       Cause   : While running RFC2544 test with 6 or more ports active\r
+                the linux error message "NETDEV_WATCHDOG transmitt timed out"\r
+                gets displayed multiple times. After multiple errors 5715\r
+                ports stop working.\r
+       Change  : Updated trans_start with jiffies before calling\r
+                netif_stop_queue to prevent false NETDEV WATCHDOG\r
+       Impact  : 5715.\r
+\r
+v8.3.17 (January 18 2006)\r
+=========================\r
+The patch file in the bcm_sup-8.3.16 tar file will not compile\r
+in 2.6.14 kernels. This release version is using a patch\r
+file for 2.6.13 kernels.\r
+\r
+v8.3.16 (January 10 2006)\r
+=========================\r
+    Enhancement:\r
+    ------------\r
+       ECD13216 complete workaround for 5714/5715 fiber:\r
+       During chip init set: \r
+       0x5b0[10]=1\r
+       0x6808[5:4]=01\r
+       To check link status read:\r
+       0x460 bit 3 is set when link is established.    \r
+\r
+\r
+v8.3.15 (December 16, 2005)\r
+===========================\r
+    Enhancement:\r
+    ------------\r
+       Added support for 5714S and 5715S.\r
\r
+\r
 v8.3.14 (November 02, 2005)\r
 ===========================\r
     Fixes:\r
index 10374e6..d3f76ad 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************/
 /*                                                                            */
-/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2005 Broadcom  */
+/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2006 Broadcom  */
 /* Corporation.                                                               */
 /* All rights reserved.                                                       */
 /*                                                                            */
@@ -12,8 +12,8 @@
 
 
 char bcm5700_driver[] = "bcm5700";
-char bcm5700_version[] = "8.3.14a";
-char bcm5700_date[] = "(11/2/05)";
+char bcm5700_version[] = "8.3.17b";
+char bcm5700_date[] = "(02/21/06)";
 
 #define B57UM
 #include "mm.h"
@@ -128,6 +128,8 @@ static int bcm_msi_chipset_bug = 0;
 /* Operational parameters that usually are not changed. */
 /* Time in jiffies before concluding the transmitter is hung. */
 #define TX_TIMEOUT  (2*HZ)
+/* RQM 289636: */
+#define BCM_TX_TIMEOUT  (5*HZ)
 
 #if (LINUX_VERSION_CODE < 0x02030d)
 #define pci_resource_start(dev, bar)   (dev->base_address[bar] & PCI_BASE_ADDRESS_MEM_MASK)
@@ -289,6 +291,14 @@ pci_set_dma_mask(struct pci_dev *dev, dma_addr_t mask)
                spin_unlock_irqrestore(&(pUmDevice)->global_lock, flags);\
        }
 
+/* Fix for RQM 289636 */
+static inline void
+bcm5700_netif_stop_queue(struct net_device *dev)
+{
+       dev->trans_start = jiffies; /* prevent tx timeout */
+       netif_stop_queue(dev);
+}
+
 inline void
 bcm5700_intr_lock(PUM_DEVICE_BLOCK pUmDevice)
 {
@@ -883,9 +893,11 @@ static struct pci_device_id bcm5700_pci_tbl[] __devinitdata = {
        {0x14e4, 0x1600, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5752 },
        {0x14e4, 0x1601, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5752M },
        {0x14e4, 0x1668, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5714 },
+       {0x14e4, 0x1669, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5714S },
        {0x14e4, 0x166a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5780 },
        {0x14e4, 0x166b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5780S },
        {0x14e4, 0x1678, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5715 },
+       {0x14e4, 0x1679, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5715S },
        {0x14e4, 0x16ff, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5903M },
 #endif
        {0,}
@@ -1211,7 +1223,9 @@ bcm5700_init_one(struct pci_dev *pdev,
 #endif
 #if (LINUX_VERSION_CODE >= 0x20400)
        dev->tx_timeout = bcm5700_reset;
-       dev->watchdog_timeo = TX_TIMEOUT;
+       /* Fix for RQM 289636 */
+       /* dev->watchdog_timeo = TX_TIMEOUT; */
+       dev->watchdog_timeo = BCM_TX_TIMEOUT;
 #endif
 #ifdef BCM_VLAN
        dev->vlan_rx_register = &bcm5700_vlan_rx_register;
@@ -1287,6 +1301,8 @@ bcm5700_init_one(struct pci_dev *pdev,
             if(( pDevice->PhyId & PHY_ID_MASK ) == PHY_BCM5780_PHY_ID)
                 printk("Broadcom BCM5780S Integrated Serdes ");
 
+            if(( pDevice->PhyId & PHY_ID_MASK ) == PHY_BCM5714_PHY_ID)
+                printk("Broadcom BCM5714S Integrated Serdes ");
         }        
        else if ((pDevice->PhyId & PHY_ID_MASK) == PHY_BCM5705_PHY_ID)
                printk("Broadcom BCM5705 Integrated Copper ");
@@ -2075,7 +2091,9 @@ bcm5700_start_xmit(struct sk_buff *skb, struct net_device *dev)
 #endif
 
        if (pUmDevice->do_global_lock && pUmDevice->interrupt) {
-               netif_stop_queue(dev);
+               /* Fix for RQM 289636 */
+               /* netif_stop_queue(dev); */
+               bcm5700_netif_stop_queue(dev);
                pUmDevice->tx_queued = 1;
                if (!pUmDevice->interrupt) {
                        netif_wake_queue(dev);
@@ -2087,7 +2105,9 @@ bcm5700_start_xmit(struct sk_buff *skb, struct net_device *dev)
        pPacket = (PLM_PACKET)
                QQ_PopHead(&pDevice->TxPacketFreeQ.Container);
        if (pPacket == 0) {
-               netif_stop_queue(dev);
+               /* Fix for RQM 289636 */
+               /* netif_stop_queue(dev); */
+               bcm5700_netif_stop_queue(dev);
                pUmDevice->tx_full = 1;
                if (QQ_GetEntryCnt(&pDevice->TxPacketFreeQ.Container)) {
                        netif_wake_queue(dev);
@@ -2113,7 +2133,9 @@ bcm5700_start_xmit(struct sk_buff *skb, struct net_device *dev)
        frag_no = 0;
 #endif
        if (atomic_read(&pDevice->SendBdLeft) < (frag_no + 1)) {
-               netif_stop_queue(dev);
+               /* Fix for RQM 289636 */
+               /* netif_stop_queue(dev); */
+               bcm5700_netif_stop_queue(dev);
                pUmDevice->tx_full = 1;
                QQ_PushHead(&pDevice->TxPacketFreeQ.Container, pPacket);
                if (atomic_read(&pDevice->SendBdLeft) >= (frag_no + 1)) {
@@ -2472,7 +2494,9 @@ bcm5700_close(struct net_device *dev)
 #if (LINUX_VERSION_CODE < 0x02032b)
        dev->start = 0;
 #endif
-       netif_stop_queue(dev);
+       /* Fix for RQM 289636 */
+       /* netif_stop_queue(dev); */
+       bcm5700_netif_stop_queue(dev);
        pUmDevice->opened = 0;
 
 #ifdef BCM_ASF
@@ -4379,7 +4403,9 @@ STATIC int bcm5700_change_mtu(struct net_device *dev, int new_mtu)
 
        BCM5700_PHY_LOCK(pUmDevice, flags);
        if (reinit) {
-               netif_stop_queue(dev);
+               /* Fix for RQM 289636 */
+               /* netif_stop_queue(dev); */
+               bcm5700_netif_stop_queue(dev);
                bcm5700_shutdown(pUmDevice);
                bcm5700_freemem(dev);
        }
@@ -4516,11 +4542,16 @@ void cleanup_module(void)
 #endif  /* MODULE */
 #else  /* LINUX_VERSION_CODE < 0x020300 */
 
+
+#if (LINUX_VERSION_CODE >= 0x2060b)
+static int bcm5700_suspend(struct pci_dev *pdev, pm_message_t state)
+#else
 #if (LINUX_VERSION_CODE >= 0x020406)
 static int bcm5700_suspend (struct pci_dev *pdev, u32 state)
 #else
 static void bcm5700_suspend (struct pci_dev *pdev)
 #endif
+#endif
 {
        struct net_device *dev = (struct net_device *) pci_get_drvdata(pdev);
        PUM_DEVICE_BLOCK pUmDevice = (PUM_DEVICE_BLOCK) dev->priv;
index 1549000..240d40a 100644 (file)
@@ -1,11 +1,11 @@
-.\" Copyright (c) 2000-2005 Broadcom Corporation
+.\" Copyright (c) 2000-2006 Broadcom Corporation
 .\" This is free documentation; you can redistribute it and/or
 .\" modify it under the terms of the GNU General Public License as
 .\" published by the Free Software Foundation.
 .\"
 .\" bcm5700.4,v 5.9 
 .\"
-.TH BCM5700 4 "10/28/05" "Broadcom Corporation"
+.TH BCM5700 4 "01/10/06" "Broadcom Corporation"
 .\"
 .\" NAME part
 .\"
index 6e0f3ce..6ae0fcb 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************/
 /*                                                                            */
-/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2005 Broadcom  */
+/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2006 Broadcom  */
 /* Corporation.                                                               */
 /* All rights reserved.                                                       */
 /*                                                                            */
@@ -3011,7 +3011,7 @@ PLM_DEVICE_BLOCK pDevice)
             {
                 pDevice->PhyId = EePhyId;
                 
-                if (EePhyTypeSerdes && ((pDevice->PhyId == PHY_BCM5780_PHY_ID)) )
+                if (EePhyTypeSerdes && ((pDevice->PhyId == PHY_BCM5714_PHY_ID) || (pDevice->PhyId == PHY_BCM5780_PHY_ID)) )
                 {
                     pDevice->PhyFlags |= PHY_IS_FIBER;
                 }
@@ -4866,12 +4866,13 @@ restart_reset:
     REG_WR(pDevice, MacCtrl.LowWaterMarkMaxRxFrame, 2);
 
     /* ecd 13216 workaround for serdes */
-    if(pDevice->PhyFlags & PHY_IS_FIBER)
+    if ((pDevice->PhyFlags & PHY_IS_FIBER) && 
+        (T3_ASIC_REV(pDevice->ChipRevId) != T3_ASIC_REV_5780))
     {
         Value32 = REG_RD_OFFSET(pDevice, 0x5b0);
         REG_WR_OFFSET(pDevice, 0x5b0, Value32 | BIT_10 );
-      
-        pDevice->GrcLocalCtrl |= BIT_4 ; 
+
+        pDevice->GrcLocalCtrl |= BIT_4 ; 
         pDevice->GrcLocalCtrl &= ~BIT_5 ; 
 
         REG_WR(pDevice, Grc.LocalCtrl, pDevice->GrcLocalCtrl);
@@ -4886,7 +4887,7 @@ restart_reset:
 
     if (!(pDevice->TbiFlags & ENABLE_TBI_FLAG) &&
         ( ((pDevice->PhyId & PHY_ID_MASK) != PHY_BCM5401_PHY_ID)&&
-        ((pDevice->PhyId & PHY_ID_MASK) != PHY_BCM5411_PHY_ID) ))
+          ((pDevice->PhyId & PHY_ID_MASK) != PHY_BCM5411_PHY_ID) ))
     {
         /* 5401/5411 PHY needs a delay of about 1 second after PHY reset */
         /* Without the delay, it has problem linking at forced 10 half */
@@ -7782,10 +7783,12 @@ LM_SetupNewFiberPhy(
 
         LM_5714_FamForceFiber(pDevice);
     }
-    LM_ReadPhy(pDevice, PHY_STATUS_REG, &Sreg);
-    LM_ReadPhy(pDevice, PHY_STATUS_REG, &Sreg);
 
-    if(Sreg & PHY_STATUS_LINK_PASS){
+    /* 5714/15 Serdes link status is valid only in reg 0x460 */        
+    /* ecd 13216 workaround for serdes */
+    Sreg = REG_RD(pDevice, MacCtrl.TxStatus);
+
+    if(Sreg & TX_STATUS_LINK_UP){
 
         pDevice->LinkStatus = LM_STATUS_LINK_ACTIVE;
         pDevice->LineSpeed = LM_LINE_SPEED_1000MBPS;