\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
/******************************************************************************/
/* */
-/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2005 Broadcom */
+/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2006 Broadcom */
/* Corporation. */
/* All rights reserved. */
/* */
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"
/* 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)
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)
{
{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,}
#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;
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 ");
#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);
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);
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)) {
#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
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);
}
#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;
/******************************************************************************/
/* */
-/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2005 Broadcom */
+/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2006 Broadcom */
/* Corporation. */
/* All rights reserved. */
/* */
{
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;
}
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);
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 */
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;