Release Notes Broadcom bnx2 Linux Driver Version 1.6.7b 10/16/2007 Broadcom Corporation 5300 California Avenue, Irvine, CA 92617 Copyright (c) 2004, 2005, 2006, 2007 Broadcom Corporation All rights reserved v1.6.7b (October 16, 2007) ============================ Fixes ----- 1. Problem: (CQ31861) Remote copper PHY does not link up if WoL is enabled. Cause: bnx2_set_power_state() assumes that only copper devices support WoL and proceeds to configure the copper PHY to 10/100 Mbps. This assumption is no longer valid after Serdes WoL support was added in 1.6.3c. Change: Fixed the code to take check for Serdes and copper when setting up the PHY for WoL. Impact: WoL. v1.6.6b (October 10, 2007) ============================ 1. Change: Update 5708 firmware to 3.7.19. v1.6.5k (October 10, 2007) ============================ 1. Problem: Will not compile on 2.6.23 kernel. Cause: get_perm_addr no longer defined in struct ethtool_ops Change: Adjusted kernel compatibility #ifdef. Impact: None. v1.6.5j (October 10, 2007) ============================ No change to bnx2. Updated cnic driver to 1.1.24. v1.6.5i (October 8, 2007) ============================ Enhancements ------------ 1. Change: Update 5708 firmware to 3.7.18. v1.6.5h (October 4, 2007) ============================ Enhancements ------------ 1. Change: Update 5708 firmware to 3.7.17. v1.6.5g (October 1, 2007) ============================ Enhancements ------------ 1. Change: Update 5708 firmware to 3.7.16. v1.6.5f (September 30, 2007) ============================ Enhancements ------------ 1. Change: Update 5708 firmware to newer 3.7.15. v1.6.5e (September 29, 2007) ============================ Enhancements ------------ 1. Change: Update 5708 firmware to 3.7.15. v1.6.5d (September 28, 2007) ============================ Enhancements ------------ 1. Change: Combined RPM package and tar file with CNIC driver. v1.6.5c (September 26, 2007) ============================ Enhancements ------------ 1. Change: Update 5708 firmware to 3.7.14. v1.6.5b (September 25, 2007) ============================ Fixes ----- 1. Problem: (CQ30086) 5709 A1 does not link up when connected to some Broadcom devices. Cause: Early DAC wakeup workaround needed for 5709 A1. Change: Added workaround. Impact: None. Enhancements ------------ 1. Change: Added CNIC support for iSCSI. Impact: Only enabled on 2.6.16 and newer kernels. v1.6.3c (July 23, 2007) ======================= Fixes ----- 1. Problem: (CQ30591) ethtool -t fails on remote PHY systems. Cause: Link test and loopback test were not modified to support remote PHY. Change: Added remote PHY support to link test and changed the code to skip PHY loopback on remote PHY since it's not supported. Impact: None. 2. Problem: (CQ30625) ethtool speed settings are lost after ifdown. Cause: The remote PHY settings stored in firmware is not the same as the driver's last setting. Change: Modified the code to keep the driver's setting unless there's is change in the remote PHY media. Impact: ethtool -s on remote PHY systems. Enhancements ------------ 1. Change: Change ethtool's wol setting to NVRAM's default and add support for Serdes WoL if NVRAM supports it. Impact: ethtool wol's default setting. v1.6.3b (July 13, 2007) ======================= 1. Problem: Problems reading and writing flash on 5709. Cause: Hardware changes in 5709. Change: Rearranged current flash code to properly support 5709. Impact: Changes will impact flash operations on 5706/5708/5709 devices. 2. Problem: (CQ30516) Management firmware version string disappears on 2nd modprobe of the driver. Cause: The 2nd modprobe will program the device back to D0 from D3hot. This causes a reset and it will take some time before the management firmware information will be available. Change: Added a proper wait loop to wait for the firmware information to be deposited in shared memory. Impact: None. v1.6.2f (July 3, 2007) ======================= 1. Problem: The fix for CQ29488 in the previous version is problematic and needs to be reverted. Cause: Adding the netif_carrier_off() call before register_netdev() in bnx2_init_one() can cause problems if register_netdev() fails. netif_carrier_off() can queue a link watch event that can run later. If register_netdev() fails, the netdev structure will be freed and the link watch event may panic when it is scheduled to run. Change: Moving the netif_carrier_off() to after register_netdev() also will not work as it can cause race conditions with the interrupt handler. So the best thing to do is to revert the earlier fix and not address the CQ29488 issue. Impact: CQ29488 is not fixed. v1.6.2e (July 3, 2007) ======================= Fixes: ------ 1. Problem: (CQ29528) Link does not come up using remote PHY (continued). Cause: ifup script may be using mii-tool to obtain link status, and interfering with remote PHY firmware. Change: Block mii-tool ioctl access when remote PHY firmware is present. Impact: None. 2. Problem: (CQ29488) Driver reports link up in ethtool before the interface is brought up. Cause: The netdevice structure's initial link setting is up and that gets reported directly by ethtool. Change: Added netif_carrier_off() call in bnx2_init_one(). Impact: None. v1.6.2d (June 22, 2007) ======================= Fixes: ------ 1. Problem: (CQ29528) Link does not come up using remote PHY. Cause: The fix in 1.6.2b still has a problem. The copper or Serdes default link setting does not follow the correct port when the port is changed during chip reset. Change: Fix the code to always refresh the port and link setting during chip reset. Impact: None. 2. Problem: (CQ30181) Cannot compile on 2.4 kernels. Cause: USEC_TO_SEC constant is not defined on older kernels. Change: Added conditional #define for this constant on older kernels. Impact: None. Enhancements: ------------- 1. Change: Update 5709 firmware to 3.7.1. Impact: 5709 devices. v1.6.2b (June 21, 2007) ======================= Enhancements: ------------- 1. Change: Added management firmware version to ethtool -i. Impact: None. Fixes: ------ 1. Problem: (CQ29528) Link does not come up using remote PHY. Cause: The driver is using the wrong port when setting up the remote PHY link. Change: Fixed bug to always use the correct requested port or default port when setting remote PHY link. Impact: None. 2. Problem: (CQ30028) Advertised Autoneg not set in ethtool. Cause: Remote PHY code is not setting the flag which is for information only. Change: Added code the set the flag for consistency. Impact: None. v1.6.1c (May 22, 2007) ===================== Enhancements: ------------- 1. Change: (CQ28907) Added support for setting copper and fibre speeds. Impact: Only available on Remote PHY systems. v1.6.1b (May 7, 2007) ===================== Fixes: ------ 1. Problem: (CQ29301) Setting invalid speed setting causes driver to crash. Cause: Lock taken without unlock when exiting iwith error the procedure to set speed. Change: Fixed the code with proper unlock. Impact: None. v1.6.0b (April 30, 2007) ======================== Enhancements: ------------- 1. Change: Improved handshake with remote PHY firmware. Impact: None. v1.5.10c (May 4 , 2007) ======================= Fixes: ------ 1. Problem: Extremely low TSO performance when destination has a smaller MSS than the source. Cause: Packets smaller than MTU are not processed as TSO packets. Change: Removed the SKB length check when doing TSO. Impact: None. v1.5.10b (May 1, 2007) ========================= Enhancements: ------------- 1. Change: Removed Remote PHY until next release. Impact: No Remote PHY support. 2. Change: Added check for 2.5G capability before enabling 2.5G on 5709S. Impact: None. Fixes: ------ 1. Problem: (CQ28438) NETDEV WATCHDOG after OS boot. Cause: The mailbox queue is halted after the OS reads config. register 0x94. Change: Set MQ_CONFIG_HALT_DIS in register MQ_CONFIG on 5709 A0 and A1. Impact: None. v1.5.9b (April 20, 2007) ======================= Enhancements: ------------- 1. Change: Enhanced remote PHY support for 5708S. Impact: None. Fixes: ------ 1. Problem: (CQ29056) Driver does not compile on SLES 10 SP1 kernel. Cause: Backported netif_tx_lock() causes compatibility problem. Change: Adjuested compatibility #ifdef. Impact: None. 2. Problem: (CQ28880) Driver fails register test after running traffic. Cause: A reserved register 0x500c was mistakenly included in the test. Change: Removed this register from the test. Impact: None. v1.5.8b (March 13, 2007) ======================= Enhancements: ------------- 1. Change: Added remote PHY support for 5708S. Impact: None. v1.5.7b (March 2, 2007) ======================= Enhancements: ------------- 1. Change: Added IPV6 TSO for 5709. Impact: None. 2. Change: Added 2.5G parallel detection for 5709s. Impact: None. v1.5.6b (February 28, 2007) =========================== Enhancements: ------------- 1. Change: Added Serdes support for 5709. Impact: None. Fixes: ------ 1. Problem: (CQ28433) Driver does not compile on some early 2.6 and 2.4 kernels. Cause: Kernel compatibility issue. Change: Added some missing #ifdef CONFIG_PCI_MSI. Impact: None. 2. Problem: (CQ28527) System hangs when running bonding scripts on 5709. Cause: Bonding driver reads MDIO registers after the device is in D3hot state. Change: Added check to disallow MDIO access after the device is down. Impact: None. v1.5.5b (January 31, 2007) =========================== Fixes: ------ 1. Problem: (CQ28252) Driver reports the same MAC address for both ports of 5709. Cause: The driver was obtaining the MAC address from the same shared memory area for both ports. Change: Updated driver to read from the deicated shared memory area for each port. Impact: None. 2. Problem: (CQ28226) 5709C does not link up when connected to Dell 5324 and some other switches. Cause: PHY's Early DAC Wakeup Enable bit's strapped value is set. Change: Disable Early DAC Wakeup enable on 5709 A0 after PHY reset. Impact: None. v1.5.4b (January 8, 2006) =========================== Fixes: ------ 1. Problem: 5709 copper device detected as serdes. Cause: Media detection code not complete. Change: Added complete media detection code. Impact: None. Enhancement: ------------ 1. Change: Add IPv6 checksum support. Impact: None. v1.5.2b (December 22, 2006) =========================== Merged in all latest changes. v1.5.1c (November 30, 2006) =========================== Enhancement: ------------ 1. Change: Remove 5709 FPGA code. Impact: None. v1.5.1b (November 15, 2006) =========================== Enhancement: ------------ 1. Change: Added support for 5709. Impact: None. v1.4.52c (March 07, 2007) ========================= Enhancement: ------------ 1. Change: Increase maximum receive ring size to 4080. The default is kept the same at 255. Impact: None. v1.4.51b (December 21, 2006) ============================ Fixes: ------ 1. Problem: (CQ27802) Cannot enable flow control in some cases. Cause: In some cases when flow control is forced to on, the driver detects no changes in advertisement, and as a result, will not re-autoneg. Without the link change, flow control settings will not change. Change: Added some code to setup flow control when no other PHY settings are made. This will ensure that flow control changes will take effect immediately. Impact: None. v1.4.50b (December 15, 2006) ============================ Fixes: ------ 1. Problem: (CQ27424) Panic when writing to nvram. Cause: Bug in driver when an alignment buffer is used Change: Fixed the bug so that the alignment buffer is freed with the correct pointer. Impact: None. v1.4.49b (December 13, 2006) ============================ Fixes: ------ 1. Problem: (CQ27459) Driver reports link down when link is up. Cause: Hotplug scripts can cause bnx2_open() to be called immediately after bnx2_init_one() calls register_netdev(). The initial link state set after register_netdev() may overwrite the actual link state set by the link handler on SMP systems. Change: Move all initial state setup code to before calling register_netdev(). Impact : None. v1.4.48b (December 08, 2006) ============================ Fixes: ------ 1. Problem: (RHBZ 212055) Panic in bnx2_poll(). Cause: Bug in determining tx ring space when the tx ring is completely full. Change: Fixed the flawed logic in bnx2_tx_avail(). Impact: None. 2. Problem: (CQ27424) Buffer overflow when writing to nvram. Cause: Bug in driver when the beginning NVRAM offset is not 4-byte aligned. Change: Fixed the bug to allocate enough buffer space. Impact: None. 3. Problem: (CQ27543) Loopback failed if MAC address is changed. Cause: Driver uses permanent MAC address for loopback which may be different from a locally administered address. Change: Fixed by alwaysing using the current MAC address in the netdevice structure. Impact: None. v1.4.47b (November 02, 2006) =========================== Fixes: ------ 1. Problem: (CQ25922) 5708S does not pass PHY loopback test on some blade servers. Cause: It takes longer (about 100msec) to link up in some backplane environments when the Serdes is set to PHY loopback mode. Change: Increase delay loop to up to 1 sec when waiting for link up after PHY loopback. Previous wait time was 100usec. Impact: None. v1.4.46b (October 30, 2006) =========================== Fixes: ------ 1. Problem: (CQ25916) Device does not receive packets when configured by the Xen bridge script and when IPMI is enabled. Cause: Firmware does not forward packets to the host when the device is in promiscuous mode in some cases. Change: Firmware change and driver change to enable the BNX2_RPM_SORT_USER0_PROM_VLAN bit when going into promiscuous mode. Impact: None. v1.4.45b (October 19, 2006) =========================== Enhancement: ------------ 1. Change: Added software parallel detection on 5708S to link at 1000Mbps or 2500Mbps automatically if the link partner is forced at 2500Mbps. Impact: None. 2. Change: Added 2500Mbps forced speed setting. Setting it requires a future version of ethtool or custom apps. Impact: None. 3. Change: Port driver to compile on 2.6.19 kernel. Impact: None. Fixes: ------ 1. Problem: Driver does not complile on 2.4 kernels. Cause: TSO symbols not defined in 2.4 kernels. Change: Added #ifdef for compatibility. Impact: None. 2. Problem: MSI doesn't work on 5706 when the host bridge is AMD8132. Cause: Compatibility issue. Change: Added code to disable MSI when 5706 is on a systems with AMD8132. Impact: 5706 cannot use MSI on such systems. v1.4.44b (August 10, 2006) ========================== Fixes: ------ 1. Problem: A rare tx race window exists in the tx path. Cause: CPU re-ordering can cause the tx queue to be stopped forever when the tx ring is full in a very rare condition. See ChangeLog for more details. Change: Fixed the race condition with memory barriers. See ChangeLog for more details. Impact: None. Enhancement: ------------ 1. Change: Increase default rx ring size to 255 to prevent packet drops under heavy load. Impact: Higher memory usage. 2. Change: Port driver to run on 2.6.18 kernel. Impact: None. v1.4.43b (June 26, 2006) ======================= Enhancement: ------------ 1. Change: (CQ25508) Use DRV_MSG_CODE_UNLOAD_LNK_DN message on 5708 B1 and older chips so that the link will turn off after ifdown. Impact: None. v1.4.42b (June 2, 2006) ======================= Fixes: ------ 1. Problem: (CQ22585) WoL cannot be enabled on 5708 B2. Cause: Hardware limitation in previous 5708 versions required driver to always disable driver WoL on 5708. Change: With the issue fixed in B2, the driver was changed to allow 5708 B2 and above to support driver WoL. Impact: None. 2. Problem: (CQ21779) Driver does not report dropped receive packets. Cause: Packets dropped by firmware are reported in a scratch pad location in memory separate from other counters. Change: Added code to report this firmware counter. Impact: None. Enhancements: ------------- 1. Change: (CQ24690) Allow driver to be compiled for non-running kernels. Impact: None. v1.4.41b (May 17, 2006) ======================= Fixes: ------ 1. Problem: Driver writes wrong data to non-buffered flash. Cause: Bug in driver causing the unchanged portion of the page to be corrupted. Change: Fixed bug. Impact: None. v1.4.40b (April 17, 2006) ========================= Enhancements: ------------- 1. Change: Combine 2 small memory allocations into 1. Impact: None. 2. Change: Separate tx consumer and producer entries into separate cache lines for better performance. Impact: None. 3. Change: Compress firmware data to reduce driver size. Impact: Driver now requires zib_inflate library which should be available on most vendor kernels. v1.4.39b (Mar. 10, 2006) ======================= Fixes: ------ 1. Problem: (CQ23181) Driver loses track of link changes in some cases. Cause: In some cases, the status block gets a link change indication that contradicts with the MII link status. This is due to transient link signals during link changes. Change: Add coalesce_now at the end of link change interrupt to flush out the transient behavior. Impact: None. 2. Problem: 5708 only supports 40-bit DMA addresses. Cause: Limitation of the built-in PCIE-to-PCIX bridge. Change: Add workaround code to make sure all DMA addresses are less than 40 bits. Impact: Some minor impact on performance on some 64-bits systems. There should be practically no performance impact on i386 and x86_64 systems. 3. Problem: "Copyright" deprecated in RPM spec file. Change: Changed to "License". Impact: Should be none on the distributions that we support. v1.4.38b (Feb. 10, 2006) ======================= Fixes: ------ 1. Problem: Setting rx ring size to 255 causes memory allocation errors. Cause: Multiple bugs that do not handle the full ring properly. Change: Fixed all bugs related to full ring handling and changed maximum ring size from 4080 to 1020 after discussion with Dave Miller. Impact: Maximum rx ring size is now smaller. 2. Problem: Compile warnings and panic on IA64. Cause: not included. Change: Added include . Impact: None. v1.4.36b (Jan. 19, 2006) ======================= Version number update. v1.3.36 (Jan. 17, 2006) ======================= Fixes: ------ 1. Problem: (CQ22827) bnx2 does not compile on 2.6.6 and earlier kernels. Cause: Introduced bug while fixing CQ22666. Change: Fix compatibility code. Impact: None. 2. Problem: (CQ22823) bnx2 reports extra .5 at the end of firmware version string. Change: Skip the last digit in the firmware version string. Impact: None. 3. Problem: (CQ22585) WoL still does not work on 5708. Cause: New WoL mechanism introduced in 1.3.34 has a flaw. Change: Removed the workaround code and disabled WoL support on 5708. During shutdown and suspend, the driver will shutdown the device and WoL will be setup by the bootcode according to the nvram's out-of-box WoL setting. Impact: 5708 will not support driver-initiated (ethtool-intiated) WoL. v1.3.35 (Jan. 17, 2006) ======================= Fixes: ------ 1. Problem: (CQ22666) bnx2 driver does not compile on RHEL3 U7. Cause: if_mii() back-ported to RHEL3 U7. Change: Adjusted the compatibility code. Impact: None. 2. Problem: (CQ22718) UMP connection is lost after enabling WoL. Cause: FORCE LINK was mistakenly set during WoL setup. Change: Do not set FORCE LINK. Impact: None. v1.3.34 (Jan. 13, 2006) ======================= Fixes: ------ 1. Problem: (CQ22585) WoL does not work on 5708. Cause: Internal bridge not in proper PME state. Change: Added new firmware message to allow bootcode to help set up WoL. Impact: None. Enhancements: ------------- 1. Change: Added compile option to include crc32 function for RH2.4 boot kernels. Impact: None. 2. Change: Updated TSO firmware to handle ECN. Impact: None. v1.3.33 (Dec. 12, 2005) ======================= Enhancements: ------------- 1. Change: Increased firmware hand-shake timeout from 50 msec to 100 msec. Also changed the delay from busy-wait udelay to non-busy-wait msleep. Impact: None. 2. Change: Added code to read nvram size from shared memory if available. Otherwise, the size will come from the flash table which only gives the smallest size for that type of flash. Impact: None. 3. Change: Added workaround to issue 2 separate IOs for interrupt acknowledgement. The workaround is only used for INTA (non-MSI) interrupts. Impact: Slightly higher overhead for INTA interrupts. v1.3.32 (Dec. 01, 2005) ======================= Enhancements: ------------- 1. Change: Added PHY loopback to the loopback selftest. Impact: None. 2. Change: (CQ21810) Added ethtool -d register dump. Impact: None. 3. Change: Reduce the number of registers tested in selftest to make the driver smaller. Impact: None. 4. Change: Increased maximum rx ring size to 4080. Impact: None. 5. Change: Changed rx checksum logic for better reliability. Impact: None. 6. Change: Added 5708 B1 workarounds. Impact: None. v1.3.31 (Nov. 18, 2005) ======================= Fixes: ------ 1. Problem: (CQTO2080) Cannot pass traffic during 2nd ifup if IPMI is enabled. Cause: A flaw in driver/firmware handshake. Change: Changed driver/firmware handshake by doing WAIT0 first before writing the first signature. Impact: None. 2. Problem: (CQTO2056) VLAN-tagged IPMI traffic fails after driver is loaded. Cause: Driver configures the NIC to keep the VLAN tag by default, causing VLAN-tagged IPMI traffic to fail. Change: Changed driver to always strip VLAN tags if IPMI is enabled. Impact: VLAN will always be stripped when IPMI is enabled. This may affect some applications that rely on raw VLAN packets. Enhancements: ------------- 1. Change: Sync'ed up with latest upstream bnx2. v1.3.29 (Oct. 6, 2005) ======================= Fixes: ------ 1. Problem: (CQTO1929) Traffic stops when MTU is greater than 1500 with TSO enabled. Cause: TSO firmware bug. Change: Updated to latest firmware. Impact: None. v1.3.28 (Sep. 29, 2005) ======================= Fixes: ------ 1. Problem: (CQTO1875) Traffic stops when running Nettack with TSO turned on. Cause: TSO firmware bug. Change: Updated to latest firmware. Impact: None. 2. Problem: (CQTO1575) ethtool -S shows non-zero rx_error_bytes. Cause: Hardware errata. Change: Ignore this counter and always report zero. Impact: None. v1.3.27 (Sep. 21, 2005) ======================= Enhancements: ------------- 1. Change: Enabled ethernet@wirespeed on copper devices. Impact: None. 2. Change: Enabled customized pre-emphasis and other serdes control settings on 5708S backplane devices. A special PHY register will be programmed according to the NVRAM value. Impact: None. 3. Change: Modified Makefile to check for the source symbolic link in the kbuild environment. Impact: None. 4. Change: Improved NAPI poll processing so that all events will be processed before interrupts are re-enabled. This will reduce the number of unnecessary interrupts. Impact: None. 5. Change: Add support for ETHTOOL_GPERMADDR (from John Linville) Impact: None. Fixes: ------ 1. Problem: Bug in irq handler causing extra register read. Cause: Bug in bnx2_interrupt() reading BNX2_PCICFG_MISC_STATUS register when it is not necessary. Change: Fixed the logic bug and added prefetch of status block in msi handler. Impact: None. v1.3.25 (Aug. 22, 2005) ======================= Fixes: ------ 1. Problem: Ethtool register and memory tests fail on 5708. Cause: Some code was not merged properly many versions ago. Change: Merged in properly code. Impact: None. Enhancements: ------------- 1. Change: Slow down flash clock speeds Impact: None. 2. Change: Code re-sync'ed with upstream driver. Impact: None. v1.3.24 (Aug. 16, 2005) ======================= Enhancements: ------------- 1. Change: Changed all spin_lock_irqsave locks to spin_lock_bh for better overall system performance. All code requiring spin_lock runs in BH or user context. Impact: None. 2. Change: Removed atomic operations in the transmit fast path. Code should run a bit faster as atomic operations can be quite slow. Impact: None. v1.3.23 (Aug. 10, 2005) ======================= Enhancements: ------------- 1. Change: Added reporting of link speed to firmware. Impact: None. 2. Change: Added shared memory base look-up. Impact: None. 3. Change: Possible sparse fixes (from Peter Hagervall) - use C99 struct initializers - make a few arrays and structs static - remove a few uses of literal 0 as NULL pointer - use convenience function instead of cast+dereference in bnx2_ioctl() - remove superfluous casts to u8 * in calls to readl/writel Impact: None. 4. Change: Updated documentation with the crc32 library requirement and other minor updates. Impact: None. v1.3.22 (July 25, 2005) ======================= Enhancements: ------------- 1. Change: Added check for default link speed setting in shared memory. This allows some blade servers that don't support autoneg to default to forced speed to speed up link-up time. Impact: None. 2. Change: Changed timer code to speed up the timer after serdes autoneg. This speeds up the time for parallel detection when the link partner does not autoneg. After autoneg or parallel detction completes, timer goes back to normal 1 HZ interval. With the new scheme, link should be detected up using parallel detection in less than 0.7 seconds. Autoneg normally completes in 120 msec exchanging base pages and 3 next pages. Impact: None. v1.3.21 (July 21, 2005) ======================= Enhancements: ------------- 1. Change: Updated firmware to properly handle TSO packets with ECN bits set. Impact: None. 2. Change: Updated to latest rxp firmware. Impact: None. 3. Change: Added check for the 2.5G capability in shared memory. Impact: None. 4. Change: Expanded nvram support for 5708. Impact: None. Fixes: ------ 1. Problem: (CQTO1511) Downing a team of bnx2 adapters causes hang. Cause: Deadlock when the second adapter's close routine calls flush_scheduled_work() because the linkwatch_event is scheduled on the work queue when the first adapter is closed. The linkwatch_event will try to get the rtnl_lock which is already held by the bnx2_close routine. Change: Fixed by not calling flush_scheduled_work(). Instead, use a flag to indicate work is pending and wait until the flag is cleared. Impact: None. 2. Problem: (CQTO1439) ethtool -S on 5708 causes oops. Cause: A pointer is not initialized if the device is 5708. Change: Added proper initialization. Impact: None. 3. Problem: Some error counters are mis-reporting. Cause: The workaround for the hw errata is not applied properly on the chips with the errata. Change: Added proper checks for the workaround. Impact: None. 4. Problem: High BER on 5708 SerDes. Cause: hardware errata. Change: Added workaround for 5708 A0 and B0. Impact: None. v1.3.19 (May 27, 2005) ======================= Enhancements: ------------- 1. Change: Merged 5708 code with the latest 1.1.19. Impact: None. Fixes: ------ 1. Problem: (CQTO1260) 5708S does not link at 1000Mbps when forced. It links at 2500Mbps when connected back-to-back with another 5708S. Cause: 2.5G bit is still turned on. Change: Fixed by turning off 2.5G when the speed is forced. Impact: None. v1.1.19 (May 26, 2005) ======================= Enhancements: ------------- 1. Change: Made significant changes to merge into the kernel. Among them, consolidate all source files into bnx2.[ch] and bnx2_fw.h, change structure style register definitions to offset based. Impact: None. Fixes: ------ 1. Problem: Excessive stack usage. Cause: Use of local variable array. Change: Fix excessive stack usage in bnx2_alloc_bad_rbuf() by replacing local variable array with kmalloc array. Also changed function to return error code, and changed some of the callers to check for the return code. Impact: None. 2. Problem: Bug in receive checksum. Cause: Software bug. Change: Fix bug in rx checksum by indicating CHECKSUM_UNNECESSARY only when the hw calculated checksum is 0xffff. Impact: None. 3. Problem: Excessive busy loop. Cause: Software bug. Change: Replaced one excessive udelay of 15msec with msleep since the calling context is always process. Impact: None. 4. Problem: Need to call flush_scheduled_work() and bnx2_netif_stop(). Cause: Bug in bnx2_close(). Change: Fix bug in bnx2_close() by calling flush_scheduled_work() since we are using a work queue in netdev watchdog. Also added bnx2_netif_stop() call in bnx2_close(). Impact: None. 5. Problem: Some symbols do not have bnx2 prefix and are not static. Change: Add bnx2_ prefix to some remaining names and mark some remaining names static. Impact: None. v1.1.17 (Apr. 7, 2005) ======================= Fixes: ------ 1. Problem: Driver does not compile on 2.6.12 kernel. Cause: pci_dev->slot_name has been deprecated. Change: replaced with pci_name. Impact: None. All kernels supported by bnx2 including 2.4.21-*EL have pci_name defined. v1.1.16 (Mar. 16, 2005) ======================= Fixes: ------ 1. Problem: (CQTO936 & 1004) Tx carrier and rx_byte_errors reported during normal operations. Cause: 5706 hardware errata on these 2 statistics counters. Change: Modified driver to skip these 2 counters. Impact: These 2 counters will always report 0 and not the true statistics. v1.3.15 (Mar. 11, 2005) ====================== Enhancements: ------------- 1. Change: Added SGMII 10/100/1000 Mbps and fiber mode 1000/2500 Mbps support. Impact: None. v1.1.15 (Mar. 09, 2005) ======================= Enhancements: ------------- 1. Change: Added code to program proper phy settings for jumbo frames on copper and serdes devices. Impact: None. 2. Change: Changed INTx ISR to handle a valid case where INTx arrives before status block update. Impact: None. 3. Change: Added a separate ISR for MSI to handle subtle differences between INTx and MSI. Impact: None. v1.1.14 (Mar. 03, 2005) ====================== Fixes: ------ 1. Problem: netdump does not work on latest RH3EL errata kernel. Cause: #define RED_HAT_LINUX_KERNEL removed from kernel include files, causing netdump poll function to be compiled wrong for RH kernels. Change: Changed Makefile to workaround the problem. Impact: None. v1.1.12 (Feb. 25, 2005) ====================== Fixes: ------ 1. Problem: (CQTO1062) Driver allows ethtool to set illegal speed/duplex on fiber cards. Cause: Missing checks for the case where autoneg is off. Change: Added proper checks. Impact: No. v1.1.11 (Feb. 18, 2005) ====================== Enhancements: ------------- 1. Change: (CQTO901) Added bnx2(4) man page. Impact: None. v1.1.10 (Feb. 16, 2005) ====================== Fixes: ------ 1. Problem: Wrong device ID in pci_dev_id table. Change: Fixed ID. Impact: None. v1.1.9 (Feb. 10, 2005) ====================== Fixes: ------ 1. Problem: (CQTO771) Driver fails to compile on RHEL3 update 4. Cause: The RH kernel has back-ported some netif functions not found in the same vanilla kernel version. Duplicate function names are defined. Change: Added intelligence in Makefile to detect such conditions and change the CFLAGS accordingly. Impact: None. 2. Problem: (CQTO1017) Driver allows 1000 half duplex autoneg off. Cause: Missing validity check. Change: Added check. Impact: None. Enhancements: ------------- 1. Change: The code to handle tx queue full condition was redone to properly handle all boundary and race conditions. Impact: Minimum tx ring size is now MAX_SKB_FRAGS+1. 2. Change: Tx timeout code was changed to work queue context. This allows netif to be shutdown gracefully before chip reset. Impact: None. 3. Change: Added memory barriers to ISR and NAPI poll for correctness. Impact: None. v1.1.8 (Feb. 01, 2005) ====================== Fixes: ------ 1. Problem: (CQTO969) No interupts on a system that does not support MSI. Cause: On this system, the MSI generated in the MSI test terminates with Master Abort which is a fatal condition for the chip. Change: A chip reset is added when MSI test fails to bring the chip back to normal operations again (in INTx mode). Impact: None. Enhancements: ------------- 1. Change: Removed register 0x84 from the ethtool register test. This is an interrupt control register that should not be touched to prevent unwanted interrupts. Impact: None. v1.1.7 (Jan. 28, 2005) ====================== Enhancements: ------------- 1. Change: Added interrupt test when MSI is enabled. If MSI test fails, driver will fallback to INTx mode. Impact: None. 2. Change: Added test for certain chipsets where MSI is known to fail, and disable MSI unconditionally when such chipsets are found. Impact: None. 3. Change: Removed support for 1000 Mbps half duplex. Impact: 1000 Mbps half duplex will no longer work. v1.1.6 (Jan. 26, 2005) ====================== Fixes: ------ 1. Problem: (CQTO940) MTU size not set properly when device is down. Cause: bnx2_change_mtu only handled the "up" case. Change: Simple fix to handle the "down" case as well. Impact: None 2. Problem: (CQTO926) 5706S does not autoneg properly after the tx cable is pulled. Cause: If the link partner is autonegotiating, autoneg will fail when the tx cable is pulled. The software will turn off autoneg seeing that the rx cable is still attached with SIGNAL_DETECT. When the tx cable is re-attached, autoneg is still off and the link partner will not establish link. Change: Added code to poll another PHY register to check if configs are received when autoneg is disabled. Impact: None Enhancements: ------------- 1. Change: Added OEM product name strings. Impact: None. v1.1.5 (Jan. 25, 2005) ====================== Fixes: ------ 1. Problem: PCI-X bus speed may not be detected correctly by the driver, causing failure because certain register settings are done based on bus speed. Cause: hardware problem. Change: Use a different register to detect PCI-X speed. Impact: None. v1.1.4 (Jan. 17, 2005) ====================== Fixes: ------ 1. Problem: 5706S does not reliably detect link up or down. Cause: hardware problem. Change: Enabled hardware workaround which is effective in A2 and newer chips only. Impact: None. v1.1.3 (Jan. 13, 2005) ====================== Fixes: ------ 1. Problem: netdump does not work. Cause: poll_controller routine does not work in NAPI mode. Change: Fixed poll_controller routine for NAPI mode. Impact: None. Enhancements: ------------- 1. Change: Added the new mmiowb macro which is used mainly in NUMA machines to guarantee PCI ordering. Impact: None. 2. Change: Added OEM product name strings. Impact: None. 3. Change: Changed ONE_TDMA workaround on systems with P64H bridge to PING_PONG_DMA on all systems using PCI. Impact: Better performance and better compatibility on all PCI systems. 4. Change: Added "disable_msi" parameter to allow disabling MSI. Impact: None. 5. Change: Reduced default tx coalescing parameters for better tx only performance such as ttcp. Impact: None. 6. Change: Changed NIC detection console message to display more information. Impact: None. 7. Change: Cleaned up some Linux .h files that are not needed. Impact: None. 8. Change: Cleaned up the nvram routines. Impact: None. v1.1.2 (Nov. 11, 2004) ====================== Fixes: ------ 1. Problem: Unable to load the driver on more than 2 or 3 devices. Cause: Default register space is too big. System fails to map the register space on the 3rd or 4th device. Change: Changed driver to map a smaller register space as the higher registers are not needed for standard operations. Impact: None. v1.1.1 (Nov. 9, 2004) ====================== Fixes: ------ 1. Problem: (CQTO656) One remaining ethtool parameter can be set out of range. Cause: Wrong upper bounds in code. Change: Fixed upper bound. Impact: None. 1. Problem: 5706 A1 cannot be run on a PCI bus. Cause: Hardware errata. Change: Added workaround to detect 5706 A1 on PCI bus and abort. Impact: Driver will not load 5706 A1 on PCI bus. v1.1.0 (Oct. 29, 2004) ====================== Fixes: ------ 1. Problem: (CQTO663) No link on fiber NIC set to autoneg when the link partner is set to forced speed. Cause: No code to handle this case. Change: Added code to check SIGNAL DETECT when autoneg fails, and turn off autoneg when appropriate. Also added code to force a link down when speed settings are changed. Impact: None. 2. Problem: (CQTO649) ifconfig up/down can cause system to hang on 2.6 kernels using mmconfig. Cause: Dummy read in the kernel's pci_mmcfg_write routine may cause system to hang during D3hot -> D0 transition. The PLL may lose lock during the internal D0 transition chip reset and cause the dummy read to hang. Change: The PLL problem will be fixed in A2. Meanwhile, the driver is changed to go into D3hot only if wol is enabled. Impact: Minor impact in increased power consumption when the driver is shutdown with wol disabled. 3. Change: Changed to use pci_get_device as pci_find_device will be deprecated soon. Impact: None. 4. Problem: (CQTO656) Some ethtool parameters can be set out of range. Cause: Wrong upper bounds in code or documentation. Change: Fixed code and documentation. Impact: None. v1.0.15 (Oct. 15, 2004) ====================== Fixes: ------ 1. Problem: (CQTO644) Data corruption when sending FTP traffic on Dell Precision 530MT. Cause: PCI bridge errata. Change: Added code to enable ONE_TDMA workaround when P64H PCI bridge is detected. Impact: Slower tx performance on systems using P64H bridge. 2. Problem: (CQTO643) Driver allows MTU to be set up to 9004. Cause: Driver used the wrong upper bound limit. Change: Fixed the upper bound. Impact: None. 3. Problem: Driver does not support forced speed on 5706S. Cause: Missing software logic. Change: Added code to support forced 1000 Full and Half duplex. Impact: None. 4. Change: Added workaround to disable PERR generation on 5706 A1 when it is in PCI 64-bit slot. Impact: None. v1.0.14 (Oct. 05, 2004) ====================== Fixes: ------ 1. Problem: Driver load/unload hangs on some machines. Cause: Transition delay required during D3hot -> D0 transition. Change: Added necessary delay. Impact: None. v1.0.12 (Oct. 04, 2004) ====================== Fixes: ------ 1. Problem: (CQTO609) New flow control parameter does not take effect until ifdown/ifup or link down/up. Cause: New flow control settings are only configured during link up. The driver did not check flow control advertisement changes and therefore no re-negotiation and no link down. Change: Fixed logic so that link will always go down whenever there is a change a flow control advertisement. Impact: None. 2. Problem: (CQTO612) VLAN packet reception not working. Cause: VLAN #define not setup properly. Change: Fixed #define for VLAN. Impact: None. 3. Problem: (CQTO628) WoL not functioning correctly. Cause: Multiple problems in the WoL code. Change: Fixed by: 1. using sort mode. 2. setting up mac address correctly. Impact: None. Enhancements: ------------- 1. Change: Added support for non-dword and non-aligned write access to eeprom, allowing ethtool -E to work. Impact: None. v1.0.11 (Sep. 24, 2004) ====================== Fixes: ------ 1. Problem: (CQTO600) Kernel panic when attempting to ftp on Fedora kernel. Cause: skbuffs are 4-byte aligned on Fedora, causing the rx headers to be misaligned. skbuffs are 16-byte aligned on other standard kernels. Change: Removed any assumptions about skbuff alignment and added code to align all rx skbuffs to 8-byte boundaries. Impact: None. Enhancements: ------------- 1. Change: Added netif_carrier_off to Driver init code so that the initial link state is off. Impact: None. v1.0.10 (Sep. 23, 2004) ====================== Fixes: ------ 1. Problem: (CQTO599) Driver fails to compile on RH 3.0ES. Cause: Bug in poll_bcm5706 where bp is referenced without being defined. Change: Fixed the minor bug. Impact: None. v1.0.9 (Sep. 23, 2004) ====================== Fixes: ------ 1. Problem: Jumbo frames not working reliably. Cause: Bug in bcm5706_reuse_rx_skb. Change: Fixed the bug so that the host address is properly copied from one BD to the other. Impact: None. Enhancements: ------------- 1. Change: Change the locking scheme for more reliable open/close/ioctl operations where the spinlock is needed. Impact: None. 2. Change: Added minimum MTU size check for MTU changes. Impact: None. v1.0.8 (Sep. 20, 2004) ====================== Fixes: ------ 1. Problem: (CQTO561) Kernel panic on RH30EL after repeated driver load/unload. Cause: Occasionally, the system is unable to map device registers, causing subsequent register access to fail. Change: Added check for the return value from ioremap, and exit gracefully if it fails. Impact: None. 2. Problem: (CQTO574) NETDEV WATCHDOG when running 5706 A1 on PCIX 133MHz slot. Cause: Some hw register setup required for 133 Mhz. Change: Added the register setup code. Impact: None. 3. Problem: (CQTO468) Link does not go down after changing from 10Mbps full (forced) to 10Mbps half (forced) and vice versa when the link partner is also using forced speed. Cause: Delay not long enough for the link to go down. Change: Not practical to increase delay as a very long delay is needed for the link to go down. Added code to record the proper link speed and duplex when speed is forced so that ethtool will return the proper speed without the link going down. Note that the link will go down if the link partner has autoneg turned on, ensuring that the link partner will see the link change. Impact: None. Enhancements: ------------- 1. Change: Added power management and WOL during device close. This will allow WOL to work after Linux shutdown. Impact: None. 2. Change: Changed driver so that ethtool will report invalid speed after ifdown. Impact: None. 3. Change: Updated tpatfw.h Impact: None. v1.0.7 (Sep. 14, 2004) ====================== Fixes: ------ 1. Problem: (CQTO523) 5706 A1 hangs after a thousand iterations of load/ifup/ifdown/unload. Cause: The driver may be servicing an interrupt within 15 msec of chip reset, causing the chip to hang. The problem was aggravated by the timer mode coalescing which created an excessive number of interrupts (hardware problem). The Driver may also occasionally see the wrong firmware signature that will cause it to abort. Change: Added synchronization to make sure all pending interrupts are serviced before resetting the chip. Also changed to collect mode coalescing. The firmware signature problem will be fixed in boot code. Impact: The use of collect mode coalescing may affect performance. 2. Problem: (CQTO558) Unable to load driver on some early 2.6 kernels. Cause: pci_dma_sync_single_for_* routines not defined on early 2.6 kernels. Change: Added compatibility defines for earlier kernels. Impact: None. v1.0.6 (Sep. 08, 2004) ====================== Fixes: ------ 1. Problem: (CQTO523) 5706 A1 hangs during repeated driver ifup/down. Cause: No delay after chip reset for A1. Change: Added 15 msec delay after chip reset for A1. Impact: None. 2. Problem: (CQTO468) Link does not go down after changing from 10Mbps full (forced) to 10Mbps half (forced) and vice versa. Cause: Not enough delay after forcing link down. Change: Added proper delay for link to go down. Impact: None. v1.0.5 (Sep. 02, 2004) ====================== Enhancements: ------------- 1. Change: Added support for ethtool -c, ethtool -C, ethtool -p, and firmware version for ethtool -i. Impact: None. Fixes: ------ 1. Problem: 5706C not advertising 1000 half duplex. Cause: 1000 full duplex overwrites 1000 half duplex. Change: Fixed the bug so that the 2 bits are or'ed together. Impact: None. 2. Problem: ethtool -A does not change the flow control settings in all cases. Cause: Flow control settings not zeroed out before setting new values. Change: Minor bug fix to zero out the value. Impact: None. v1.0.4 (Sep. 02, 2004) ====================== Fixes: ------ 1. Problem: (CQTO504) Multiple NFS transfers will hang some connections. Cause: Driver discards some receive packets when the error status is non-zero. Change: Changed the driver to only discard receive packets when the defined error bits in the error status are non-zero. Impact: None. v1.0.3 (Sep. 01, 2004) ====================== Enhancements: ------------- 1. Problem: Driver does not support ethtool -t self test and ethtool -S statistics. Change: Added ethtool self test and statistics. Impact: None. Fixes: ------ 1. Problem: (CQTO478) Kernel still panics when transmitting certain files using NFS after many iterations Cause: Tx DMA stalls on certain UDP packets, causing NFS client to stall. Change: More fixes made in firmware. Impact: None. v1.0.2 (Aug. 26, 2004) ====================== Enhancements: ------------- 1. Problem: Driver does not work on big endian machines. Change: Ported and tested on SPARC64 machine. Impact: None. Fixes: ------ 1. Problem: (CQTO478) Kernel panics when transmitting certain files using NFS. Cause: Tx DMA stalls on certain UDP packets, causing NFS client to stall. Change: Fixed in firmware. Impact: None. 2. Problem: (CQTO469) Unable to modify flow control parameters Cause: Did not call setup_phy after the parameters are changed. Change: Added call to setup_phy after parameters are changed. Impact: None. 3. Problem: (CQTO467) 5706 does not autonegotiate properly after changing settings with ethtool. Cause: This is an ethtool limitation as the proper advertising parameters are not passed to the driver properly. Change: Implemented a new scheme to work around the problem to allow users to specify full autoneg, single speed autoneg, and fixed speed. Impact: None. 4. Problem: ethtool -e does not work. Cause: Various bugs in the nvram routines. Change: Fixed and tested nvram routines on little endian and big endian machines. Impact: None. v1.0.1 (Aug. 18, 2004) ====================== Fixes: ------ 1. Problem: (CQTO459) 5706 NIC does not get link. Cause: Boot code timing out in WAIT2 state before driver is ready. Change: Moved the WAIT2 state ahead in the driver reset sequence as a temporary workaround until it is fixed in boot code. Impact: None. 2. Problem: (CQTO463) Kernel panics when loading the driver on RH30EL (2.4.21-4.EL) Cause: Older kernel used different API to allocate and register netdev. Change: Added older APIs to be used on older kernels. Impact: None. v1.0.0 (Aug. 13, 2004) ====================== Initial release