From 7f26be02e1ba4899276bd7a93eb5a3a7b42cde9d Mon Sep 17 00:00:00 2001 From: Marc Fiuczynski Date: Tue, 18 Apr 2006 14:30:19 +0000 Subject: [PATCH] Updated to bcm5700 version 8.3.17b release of driver. --- drivers/net/bcm5700/DISTRIB.TXT | 6 ++-- drivers/net/bcm5700/README.TXT | 8 +++--- drivers/net/bcm5700/RELEASE.TXT | 45 ++++++++++++++++++++++++++++-- drivers/net/bcm5700/b57um.c | 49 +++++++++++++++++++++++++++------ drivers/net/bcm5700/bcm5700.4 | 4 +-- drivers/net/bcm5700/tigon3.c | 21 ++++++++------ 6 files changed, 103 insertions(+), 30 deletions(-) diff --git a/drivers/net/bcm5700/DISTRIB.TXT b/drivers/net/bcm5700/DISTRIB.TXT index 2c4ba7d28..22891d3f2 100755 --- a/drivers/net/bcm5700/DISTRIB.TXT +++ b/drivers/net/bcm5700/DISTRIB.TXT @@ -1,14 +1,14 @@ Additional Installation Notes for Various Linux Distributions 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 diff --git a/drivers/net/bcm5700/README.TXT b/drivers/net/bcm5700/README.TXT index 3555ef5d1..05d713d6a 100644 --- a/drivers/net/bcm5700/README.TXT +++ b/drivers/net/bcm5700/README.TXT @@ -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 diff --git a/drivers/net/bcm5700/RELEASE.TXT b/drivers/net/bcm5700/RELEASE.TXT index abfc21c00..10ca5a076 100755 --- a/drivers/net/bcm5700/RELEASE.TXT +++ b/drivers/net/bcm5700/RELEASE.TXT @@ -1,17 +1,56 @@ Release 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 +v8.3.17b (February 21 2006) +========================= + Fixes: + ------ + 1. Problem : (ISSUE289636) 5715 ports hang under linux with 6 or more + ports are active in the RFC2544 test. + Cause : While running RFC2544 test with 6 or more ports active + the linux error message "NETDEV_WATCHDOG transmitt timed out" + gets displayed multiple times. After multiple errors 5715 + ports stop working. + Change : Updated trans_start with jiffies before calling + netif_stop_queue to prevent false NETDEV WATCHDOG + Impact : 5715. + +v8.3.17 (January 18 2006) +========================= +The patch file in the bcm_sup-8.3.16 tar file will not compile +in 2.6.14 kernels. This release version is using a patch +file for 2.6.13 kernels. + +v8.3.16 (January 10 2006) +========================= + Enhancement: + ------------ + ECD13216 complete workaround for 5714/5715 fiber: + During chip init set: + 0x5b0[10]=1 + 0x6808[5:4]=01 + To check link status read: + 0x460 bit 3 is set when link is established. + + +v8.3.15 (December 16, 2005) +=========================== + Enhancement: + ------------ + Added support for 5714S and 5715S. + + v8.3.14 (November 02, 2005) =========================== Fixes: diff --git a/drivers/net/bcm5700/b57um.c b/drivers/net/bcm5700/b57um.c index 10374e644..d3f76adac 100644 --- a/drivers/net/bcm5700/b57um.c +++ b/drivers/net/bcm5700/b57um.c @@ -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; diff --git a/drivers/net/bcm5700/bcm5700.4 b/drivers/net/bcm5700/bcm5700.4 index 154900022..240d40a94 100644 --- a/drivers/net/bcm5700/bcm5700.4 +++ b/drivers/net/bcm5700/bcm5700.4 @@ -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 .\" diff --git a/drivers/net/bcm5700/tigon3.c b/drivers/net/bcm5700/tigon3.c index 6e0f3ce76..6ae0fcb99 100644 --- a/drivers/net/bcm5700/tigon3.c +++ b/drivers/net/bcm5700/tigon3.c @@ -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; -- 2.43.0