Release Note for Jade/Caesar Bootcode Firmware ============================================== 5787, 5787f, 5787m, 5754, 5754m, 5786 ---------------------------- Version 3.26 ---- 6/20/07 ---------------------------- 1. Serial number get changed issue The workaround for CQ#28997 in V3.25 only restores 0x164[31:28] and 0x168[7:0] after setting bit 23 of 0x7c04. In this release, the entire 32 bits of 0x164 and 0x168 will be restored. ---------------------------- Version 3.25 ---- 6/19/07 ---------------------------- 1. Serial number get changed issue Problem: CQ#28997 The serial number in offset 0x164/168 get changed after reset. As result, OS will treat our device as new device in the system. Cause: Under certain corner cases, the Reserved bits of 0x164[31:28] or 0x168[7:0] may not have default value set correctly. Workaround: Firmware will write back the hardware default value after setting bit 23 of 0x7c04. ---------------------------- Version 3.24 ---- 12/29/06 ---------------------------- 1. Remove "L1 PLL Power Down" as a configurable option in NVRAM Enhancement: (CQ#27936) Remove the "L1 PLL Power Down" feature (CQ#27236) as a configurable option in NVRAM 2. Fixed Timer Prescale value such that the timer tick will be 1us Problem: (CQ#27938) Currently, one timer tick will take 2us with the default Timer Prescale value in register 6804[7:1]. Cause: The default Timer Prescale value 0x7f has been used and has not been adjusted correctly. Fix: Changed the Timer Prescale value to 65 in register 6804[7:1]. Impact: This fix will impact the timing of execution of bootcode for 5705 and newer devices. ---------------------------- Version 3.23 ---- 11/28/06 ---------------------------- 1. Fixed NVRAM read bug Problem: Due to other project change, since version 3.22, shared_config was read incorrecly. Cause: NVRAM access FIRST/LAST bit can only be used in consecutive addresses. When reading configurations from offset 0xc4,0xc8 and 0xdc, 0xdc could not be read in one bulk read. Fix: Shared_config 0xdc was read separately from previous bulk read. ---------------------------- Version 3.22 ---- 11/07/06 ---------------------------- 1. Improve Enhancement Request CQ#27236 Enhancement: This version adds logic to read configurable option from the NVRAM for allow/disallow SerDes PLL power down feature. Note: V3.21a Bootcode for 5787M is obsoleted. 2. PCIE Link Polarity Enhancement: CQ#27039, CQ#26767, CQ#27105 Apply PCIE Link polarity workaround only at hardware reset (POR or PEReset). 3. Improve PCIE SerDes PLL Power Down Feature Enhancement: CQ#27236 Poll the actual clkreq state at 0x68A4[2] and Gphy link status at 0x460[3]: a. If 0x68A4[2]=1 and 0x460[3]=0, then enables PLL power down by writing 0x7d54 with 0x7000. b. Else, then disables PLL power down by writing 0x7d54 with 0x7080. Note: This enhancement is only applicable to 5787M. 4. Increase the Fast Training Sequence(FTS) timming Problem: CQ14315 If L0s is enabled on the BRCM chip a "yellow bang", or a system hang condition can occur. Cause: During the L0s to L0 exit transition, symbol lock can be lost if the system reference clock has not fully stabilized what leads the PCI-E link training state machine to go through the "detect" state. Going through "detect" causes an internal reset to the BRCM chip what causes "yellow bang" and/or a system hang condition based on the chipset configuration. Fix: 1. Change Serdes RX Timer from 768 ns to 2 uS to make sure the Serdes CDR is stable before it sends data to the Physical Layer. 2. Increase FTS Count from 1uS to 2.25 uS to avoid intermittent GRC Reset when L0s is enabled. Since RX Timer value and FTS Count change only needed before PCIE link training, bootcode will initialize those values and retrain the PCIE link during cold reset only. When driver reset, this workaround is bypassed to avoid PCIE link retrain. Impact: Increasing the amount of FTS required to transition from L0s to L0, performance impact between 1uS to 2.25uS is un-noticeable. ---------------------------- Version 3.21 ---- 10/24/06 ---------------------------- 1. Improve PCIE SerDes PLL Power Down Feature in conjunction with clkreq being enabled. Enhancement: CQ#27236 Poll the actual clkreq state at 0x68A4[2]: a. If 0x68A4[2]=1, then enables PLL power down by writing 0x7d54 with 0x7000. b. if 0x68a4[2]=0, then disables PLL power down by writing 0x7d54 with 0x7080. Note: This enhancement is only applicable to 5787M. There are 2 version of boot code for 5787M. One is V3.21 and the other is V3.21a. V3.21a has this enhancement enabled. ---------------------------- Version 3.20 ---- 10/09/06 ---------------------------- 1. L1 exit latency improvement Enhancement: CQ#27044 Improve the L1 exit latency when Clock Request is enabled. Note: No change for non-Mobile parts. ---------------------------- Version 3.19 ---- 10/05/06 ---------------------------- 1. Enable Clock Request Enhancement: CQ#26951 The clock request was disabled in version 3.18 for CQ #26629 for Mobile parts. Change to use h/w default setting. ---------------------------- Version 3.18 ---- 9/15/06 ---------------------------- 1. Disable Clock Request Enhancement: CQ#26629 The clock request enabled feature is not fully tested. This feature needs to be disabled for RC 10.0 release. Note: The ClockReq is automatically disabled by h/w on a non-Mobile parts; therefore, this change does not affect non-Mobile parts. 2. Link speed issue Enhancement: CQ26652 We have compatibility issue with Intel NIC Intel Pro/1000MT based LOM (NDIS5.1 8.5.14, Auto detect for Speed/Duplex parameter, Windows XP Professional SP2 O/S). The symptom shows when WoL is disabled and there is no management firmware loaded, after first time power up, the link partner settles at speed 10H where our device settle at 1000F after the link negotiation. To workaround the issue, bootcode is changed to use different method to initialize the phy. Impact: This issue exists not only in this device but all NetXtreme I products. ---------------------------- Version 3.17 ---- 7/27/06 ---------------------------- 1. Set the voltage limit to prevent VCO control out of range. Problem: (CQ25114) VCO control voltage will go out of range. Cause: ASIC default value has been changed. Fix: At power up, the firmware is required to prevent SerDes PLL VCO control voltage goes out of range. Firmware will change the PCISerdes register, port 0x29, reg. 0xd default value back to 0x102d. 2. Removed disabling of ClkReq. Enhancement: CQ26097 Since version 3.10 disabled ClkReq., we could not test ClkReq function. Per project lead's decision, the feature was disabled before validation. However, without enabling it, PQA will not be able to test it. Therefore, we will enable this feature. Change: The change is made so firmware will not touching register 0xdc. The value to advertise ClkReq feature will be based on the hardware default. The ClkReq is enabled only in Mobil devices. Impact: Since chip revision A0 and A1 had a bug in ClkReq and hardware default for mobile devices are enabled, programming this firmware to A0, A1 revision chips can cause some problem. Bootcode's change may also get over written. Updated driver should be used to ensure the function is enabled. (Refer to CQ26098 to find out the correct driver version that address this issue.) ---------------------------- Version 3.16 ---- 7/25/06 ---------------------------- 1. Wrong revision. Problem: (CQ26037) The chip revision posted in Shared memory 0xd2c was incorrect. Cause: Bug introduced in version 3.15. The metal revision mask was changed by other project incorrectly. Fix: Changed back to the correct mask. Impact: Any revision sensitive routines or workaround was affected by this. One example is ASF firmware: when ASF is enabled, the firmware will based on wrong revision to initialize GPhy incorrectly. As result, the link disappears. 2. Changed VPD default Product String Enhancement: Per MRD requirement, the VPD default product string is now changed from "Broadcom NetXtreme Gigabit Ethernet Controller" to "Broadcom NetLink Gigabit Fiber Controller". For 5787f, the string is changed to "Broadcom NetXtreme Fast Ethernet Controller" Impact: Any application uses product string based on VPD data, the string will be changed. 3. Cable Sense Support Problem: The GPhy was shutdown even if the cable sense mode is enabled. Cause: Coding error Fix: Changed the code so it does not power down the Gphy if cable sense mode is enabled. 4. Changed Shutdown routine Enhancement: The original was taking many steps to shutdown each component separately before shutting down the chip. For Jade, the ASIC is designed to shutdown all blocks once the device shutdown bit is set. Therefore, to save code space, the code is changed to shutdown the device simply by setting the shutdown bit. 5. Turn off Cable Sense issue Problem: Once the Cable Sense was turned on, it could not be turned off until the next power cycle to the chip. Cause: The Cable Sense mode was cleared on by POR only. Since the bootcode only turns cable sense on when it is enable, assuming any reset would clear Cable Sense configuration, it was not clearing the configuration until the next power cycle. Fix: Not just turn on but also turn off the configuration according to the NVRAM setting. 6. Enhanced Force PCIE polarity workaround algorithm Problem: Bootcode may not work under certain platform under special condition. Please refer to CQ#25290 for the detail of the particular platform. Cause: If the device is placed in a system violates the specification - with VMain present and holding PEReset asserted. (Some platform use this method to disable the LOM by BIOS) The device may get stuck in forever loop in PCIE polarity workaround algorithm implemented in version 3.07. Fix: Added one second timeout when waiting for stable PCIE link. The bootcode will advance when the timeout expires. --------------------------- Version 3.15 ---- 5/15/06 ---------------------------- 1. Change phy settings for better link detection. Enhancement: CQ24525 Shut off SMDSP clock after programming the Tab registers. 2. Enabled second phase fastboot feature Enhancement: Only the first phase bootcode NVRAM loading is bypassed with the older bootcodes. Starting with this version, the second phase is also pre- reserved and NVRAM code loading is bypassed. Impact: Since the bootcode is no longer reload from NVRAM, the boot time will be much faster. Upon reset, there will be only few words of configuration NVRAM access. ---------------------------- Version 3.14 ---- 3/22/06 ---------------------------- 1. Changed SSID Enhancement: CQ#23848 For Jade devices, bit-15 of SSID needs to be set to 1. There is no impact/change for Caesar devices. ---------------------------- Version 3.13 ---- 3/07/06 ---------------------------- 1. VPD-R checksum error Problem: Related CQ#23565, CQ#23566 VPD-R checksum was incorrect Cause: Checksum was calculated from VPD-R to the end of VPD-R region; however, the specification indicates that Checksum should be calculated from the offset zero. Fix: Corrected the checksum 2. Initialized Cardbus pointer register Enhancement: CQ#23431 Since Cardbus support is no longer a requirement, in order to pass the plug-fest compliance test, we write zero to register 0x28 to disable cardbus feature. ---------------------------- Version 3.12 ---- 2/09/06 ---------------------------- 1. Enable PEReset Mask Problem: CQ#23039: On certain systems, when entering S5 state (with WoL enabled), the LOM current draw on the 1.2V rail can fluctuate between ~90mA and ~150mA from shutdown to shutdown. CQ#22684: On certain systems (with WoL enabled), the 5754/A1 LOM may disappear during repeated S5 Power-Cycle tests. Cause: As part of the bootcode f/w logic, the NIC f/w will make access to certain registers (0x00-0xff and 0x7c00-0x7fff) when the firmware detected that the Vmain power goes low. Due to CQ23039, the register bit that the firmware used for detecting the "Vmain power state" can also toggles between logical '0' and '1', and this leads to f/w to not able to make reliable read/write access to the registers (0x00-0xff and 0x7c00-0x7fff), which ultimately causes bad behaviors that is described in CQ22684. Fix: Firmware now enables the PEReset Mask register bit (0x68a4[16]=1). By enabling this register bit, the chip exits the reset state after the current fluctuation become stabilized, which eliminates the toggling of the "Vmain power" detection register bit, which ultimately enables successful access to the register (0x00-0xff, 0x7c00-0x7fff) by the f/w. Impact: Fixes CQ#23039 and CQ#22684. ---------------------------- Version 3.11 ---- 1/24/06 ---------------------------- 1. Changed CQ#22832 fix Problem: CQ#22832 The CQ#22832 request to change 0x7d00 access to read-modify-write still have problem on some system when reference clock is not stable. Cause: Absolute-write may corrupt register 0x7D00 content under corner conditions. Fix: Changed to code to not to touch 0x7d00 at all. Impact: There is no impact if the WOL feature is not enabled in our device. There is also no impact if the system always broadcasts PME_Turn_Off tlp message to downstream before it removed the main power in system OOB or hibernate scenario. There is little power consumption increase when a) WOL is enabled in our device and b) the system ungracefully removes the main power without sending out PME_Turn_Off tlp message to downstream in system OOB or hibernate scenario. The current draw in our device is measured at 236mA as compared to 172mA before this change. Since there is no more 0x7d00 access, version 3.10, #4 (Enabled ASIC fix for CQ#11011), is undone. Using hardware default value. 2. Enabled ASIC fix for tx Ethernet packet corruption on late collision Enhancement: CQ#22908, CQ#14561, CQ#14521 Since the ASIC is fixed and verified by ASIC team, we are enabling the fix in this version. ---------------------------- Version 3.10 ---- 1/18/06 ---------------------------- 1. Disabled clkreq# Enhancement: CQ#22829 Disable clkreq# for all the revision of the Mobile parts until the feature is fully verified with engineering system. This is done by clearing bit 18 of 0xdc and bit 8 of 0xe0. 2. Changed 0x7d00 access to absolute write Problem: CQ#22832 A value of 0xa000 was left in register 0x7d00 and caused the device to disappear. Cause: When the device was put into D3 power state, due to the clock issue, the PCIE registers become not accessible. If read-modify-write were used at this point, the read will fail and returning zero to CPU. Then, after CPU modify the content and write back, many critical bits are cleared in register 0x7d00. As result, the subsequence reset, the device could not establish PCIE link and disappears from the host. Fix: Changed 0x7d00 register to absolute write instead of read-modify-write. 3. Changed revision reading Problem: CPU reads incorrect silicon revision id in D3 power state. Cause: In D3 power state, except OOB, the PCI/PCIE registers are not accessible. All reads returns zero. Because of this, the read is not reliable. Fix: Instead of reading from register 0x68, the code is changed to read the revision id from register 0x2018. The register 0x2018 is available at all time. 4. Enabled ASIC fix for CQ#11011 Enhancement: The decision has been made to enable this ASIC fix to be consistent with Shasta/Baxter. This is done by clearing bit 18 of 0x7d00. ---------------------------- Version 3.09 ---- 1/09/06 ---------------------------- 1. Changed 2.5V voltage regulator value Enhancement: The DVT tests with Jade A1 parts indicate that the 2.5V regulator default output is low. Bootcode now will change the 2.5V regulator so it is close to 2.5V. 2. Enable clock request for A2 or newer revision Enhancement: Due to the ASIC bug, the clock request was disabled in version 3.03, #2. Since this feature has been fixed in A2 or newer revision, starting this version, the clock request will be enabled back for A2 or newer devices. ---------------------------- Version 3.08 ---- 12/08/05 ---------------------------- 1. Fixed device disappearing issue Problem: CQ#22330 When VMain is turned off, either from OOB case or turn off the system by power button, next boot, the device disappears to the host. Cause: The workaround logic put in v3.07, #1 to force PCIE link polarity requires to wait until the link is up when there is VMain. However, the PCIE Tx/Rx was turned off when bootcode sense there was no VMain to save power. On next boot, since the code to turn back on PCIE Tx/Rx was placed after the PCIE link polarity workaround to wait for PCIE link, the link never came up and stuck in the loop forever. Fix: Moved the code to turn on PCIE Tx/Rx prior to PCIE link polarity workaround. ---------------------------- Version 3.07 ---- 12/06/05 ---------------------------- 1. Force PCIE polarity Problem: CQ#22173,CQ#22176,CQ#22178,CQ#22180,CQ#22254 In some platform, the PCIE link polarity comes up incorrectly. Cause: ASIC could not handle all cases correctly. Fix: Wait until PCIE link comes up. Then based on the link polarity status detected by ASIC polarity auto detect, firmware will then force the PCIE link to the correct polarity. 2. Enable refclock auto switching Problem: The workaround in version 3.06, #1 is not stable. CPU could read "good" link indication without REFCLK. Cause: Without clock, the interface can timeout and return anything left in the data bus. Fix: Enable auto clock switching. When enabled, the clock will automatically switched to internal clock when there is no ref. clock available. 3. Removed ref.clock advertisement in A0/A1. Problem: When ref.clock support is advertised, the device gets unwanted reset. Cause: If clkreq# enabled, it may intermittently caused SerDes PLL state machine misbehavior and lead to GRC reset. Fix: This problem will be fixed in ASIC A2. For A0/A1, firmware will disable ref.clock advertisement. ---------------------------- Version 3.06 ---- 11/22/05 ---------------------------- 1. Fixed WoL was not working issue. Problem: CQ#14614 WoL was not working on OOB case. Cause: Version 3.03 (#1) added workaround for platforms that show an unstable PCIE refclk during power up. Nevertheless, there is a limitation to this workaround as to where it requires VMAIN to be present. In systems where there is no VMAIN present and there is no PCI-E REFCLK at all for the cases outlined above the bootcode will loop forever, therefore not enabling WoL. Fix: Added a condition to the "unstable PCI-E Refclk" workaround to apply this fix only when there is VMain present. In cases where there is no VMAIN present, the boot code will no longer check/wait for a "stable PCI-E Refclk" before continuing. 2. Fixed Link Histogram Issue. Problem: In DVT testing, Link histogram results seemed to be worsen in bootcode version 3.05. Cause: The change in version 3.05, item#2, removes all Gphy workaround. The workaround included hybrid bias change, adc bias change, and pll startup bandwidth change. The hardware fix still have incorrect PLL startup bandwidth value. By removing the workaround, the sympton has showed up. Fix: Added the adjustment for the PLL startup bandwidth. ---------------------------- Version 3.05 ---- 10/18/05 ---------------------------- 1. Fixed Cable Sense mode Problem: The Cable Sense mode was not enabled correctly. Cause: There was a confusion between SuperAirplane mode and Cable Sense mode. SuperAirplane mode with GPHY configuration should be equivalent to Cable Sense mode. The previous, version 3.04, was setting SuperAirplane mode without configuring GPHY. Therefore, it would not function as Cable Sense mode. Fix: Instead of using SuperAirplane mode (bit 25), now the code will use Cable Sense mode (bit 26) so it does not need to program GPHY. 2. Not to apply poor BER performance work around Problem: The work around for poor BER (Bit Error Rate) with cable length 70m or less was causing the problem. Cause: For 5754/5787 family, the BER problem has been fixed in ASIC already. If the work around was applied, by changing hybrid bias current, would yield the unwanted current. Fix: Removed the work around ---------------------------- Version 3.04 ---- 10/12/05 ---------------------------- 1. Fixed Cable Sense mode Problem: The Cable Sense mode could not be enabled. Cause: The bit to check for mobile part was wrong. Fix: Changed to correct way of detecting mobile part. 2. Move GPIO initialization to Phase1 code Problem: CQ#14105 Unexpected POR was seen at Windows S3/S4 shutdown when using 64k EEPROM. Cause: Originally, activating VAUX power was done in phase 2 bootcode. However, once driver waited for phase1 signature, driver may start to configure GPIO for WoL setting. The 2nd phase GPIO initialization may destroy driver's setting. This problem was worked around by driver by waiting for phase2 bootcode to be loaded before the GPIO initialization. However, when the NVRAM device is 64K EEPROM, phase 2 takes over 500ms to be loaded. To meet the Windows Fast Initiative requirement, driver could only wait for 200ms. When driver times out, it will proceed with GPIO initialization and later, destroyed by 2nd phase bootcode. This caused power glitch and generated POR. Fix: Moved the GPIO initialization to phase 1. ---------------------------- Version 3.03 ---- 10/3/05 ---------------------------- 1. Worked around unstable PCIE refclk issue Problem: Device does not come up on some machine platform. (bootcode v3.02) Cause: In some particular system, the PCIE refclk was not stable for a long period of time. Accessing PCI config. space registers, 0x7d00 and 0x7e00 block registers relying on this clock. When the clock is not available, all access to those registers will timeout and read will return zero. The read-modify-write instruction performed at 0x7d00, reads zero (due to unavailable clock and stall for a long time), then clock become available (due to long timeout delay) and write modified zero value back to register. As result, destroyed the register content. With value zero in 0x7d00 shuts down PCIE bus and hence the device become invisible from the bus. Since all access performed to 0x7d00, 0x7e00, and PCI config. space is invalid until the clock is available, many initialization may not be done correctly; or at least it may read incorrect revision ID. Therefore, to ensure the code is executed properly, we need to ensure the clock is there first before proceeding with initialization. Fix: Put a wait loop until refclk is stable before move on to initialization process. 2. Disable ClockReq Problem: The chip will get a GRC_RESET when going from D3Hot to D0 state Cause: When ClockReq is enabled, the chip will get a GRC_RESET when going from D3Hot to D0 state. The hardware default for mobile part is enabled. Fix: Disable ClockReq for mobile part. Note: The ClockReq is automatically disabled by h/w on a non-M parts; therefore, this change does not affect non-M parts. ---------------------------- Version 3.02 ---- 9/22/05 ---------------------------- 1. Fixed PCIE Serdes shutdown routine Problem: When the bootcode was trying to shutdown device, bootcode has disabled PCIE transmitter and receiver; however, other bits in the same register was destroyed. Cause: Absolute write routine was used. Fix: Changed to read-modify-write. 2. Removed Nvram config1 initialization Problem: There is address lockout error Cause: Per design, Nvram config1 register (0x7014) modification is not allowed when address lockout feature is enabled. The original firmware was overriding this register to adjust the NVRAM clock access speed. When write to config1 register is attempt, address lockout error 9 was posted (at reg. 0x7000 [31:28]) Fix: Removed the config1 register initialization. ----------------------------- Version 3.01 ---- 9/7/05 ---------------------------- 1. Enabled PCIE transmitter & receiver upon reset Problem: When WoL is enabled in NIC mode, device disappears after turning off power. Cause: When bootcode detects no VMain, it turns off PCIE transmitter & receiver. Those two bits are only reset upon power on reset (POR) but not other resets. Therefore, when power it on with power switch, the device getting PE reset does not bring PCIE link out of disabled state. As result, the device become not visible. Fix: Enable PCIE transmitter and reciever upon reset. Note: When using version 3.00, this problem occured, the only to recover is to short jumper J405 and then use Alt-Ctl-Del to restart the computer. ---------------------------- Version 3.00 ---- 9/6/05 ---------------------------- 1. Initial official release Problem: Version 2.00, 2nd phase bootcode did not run. Cause: The stack pointer was initialized to 0x20000. For Jade, the mbuf memory size only has 48k, 0x10000-0x1c000; therefore, the stack pointer should be initialized to 0x1c000 instead of 0x20000. Fixed: Fixed the stack pointer ---------------------------- Version 2.00 ---- 6/2/05 ---------------------------- 1. Initial engineering release This is a branch of Stanford v2.01. GPIOs will not be changed to output pins for the one not in use.