Release Note for BCM5751/5751m BOOT Code Firmware ================================================== Version 3.16 or later: From this version or later, the release.txt is shared among all Shasta devices. Please see releases.txt for the release text. Version 3.15: 1. Turn core clock to slow speed in WoL Problem: When bootcode going to WoL mode. The core clock was not slowed Down. Cause: 5705/Shasta clock control bits are different from 5703 or 5704 devices and it was using 5703 bits to control core clock. Fix: Changed the code to program correct bits to slow clock to save power under WoL mode (VAUX power only mode). Note: This bug does not cause any functional problem. Fixing this problem will give us a better power consumption under WoL mode. Version 3.14: 1. Changed version to 3.14. Problem: Version 3.13 has two version of code. One had version string with "3.12" and later changed to "3.13". Cause: When initially releasing version 3.13, the version string was not updated. Then later, corrected the string. Fix: Released version 3.14 to avoid confusion. This release will have the same functionality as v3.13. Version 3.13: 1. Change Wireless Combo mode LED setting Problem: LED Wireless Combo mode does not work Cause: The hardware setting changed from A0 to A1 for Wireless Combo mode. [15:11] = 10000 for A0 [15:11] = 10011 for A1 Fix: Since A0 never worked for this mode, the A0 setting is ignored. The new code will set 10011 for Wireless Combo mode. Version 3.12: 1. Change voltage value. Change: There was no problem with previous value, 0xbf00000; however, after the hardware engineers' analyzation, they have concluded that 0xec00000 is closer to 1.2v/2.5v power voltage; therefore, we will use this voltage from this version. This setting will only affect A0 revision silicons. 2. Disabled beacon signal Problem: There is possible ICH locking by beacon signal due to the existing Intel bug and since we are not using beacon signal, we will disable this from this version. Change: Disabled the beacon signal 3. Removed UART support Change: UART was only for debugging purpose. Since the device is more stable now, we will only build UART support version upon request. By default, we will removed this to make the code size within 8k. Version 3.11: 1. Fixed ASF/Driver handshake problem Problem: Today, we are using the shared memory last_driver_state, 0xc04, as parameter for reset. last_driver_state got cleared by bootcode upon reset. Cause: Upon reset, bootcode is designed to initialize all shared memory between 0xb54-0xc28 to zero. Originally, when last_driver_state field was defined, it was only used for ASF self resetting purpose; therefore, the code has been changed to: "if the last_driver_state (0xc04) contains CPU_RESET (0x40), then preserve this value." Any other value was cleared to zero. When ASF code sees the value "CPU_RESET", it knows the reset was initiated by ASF code itself and will know how to handle the reset. This changed was made in more than two years ago, Dec. 92. and it was working since. Today, we defined more usage for last_driver_state parameter. However, since the bootcode will only preserve the value for CPU_RESET (0x40), any other parameter was zeroed. The reason, the problem never showed up until now was probably because, driver was writing the parameter after bootcode initialize shared memory to zero and before ASF was fully up and running. Now, we are trying to change the driver code to deposit signature and parameter before GRC reset, the problem showed up. fix: Change bootcode to preserve any value in last_driver_state, 0xc04. Version 3.10: 1. Changed voltage workaround value back to 0x0fb00000 Problem: Version 3.09 has mistakenly using the experimental voltage workaround value 0x0ec00000. Cause: The experimental code was checked in to source control. Fix: Changed back the workaround value to 0x0fb00000 Version 3.09: 1. Writes firmware id to shared memory rx_cpu_firmware_id field Enhancement: Phase1 & Phase2 code will write the firmware id to rx_cpu_firmware_id. 2. Added new support for Shasta LED modes Problem: Wireless combo mode was not supported Enhancement: New mode; Wireless combo mode, Shasta Mac mode, and Mac mode were added Note: Chip revision A0 has problem with wireless mode, should be fixed in A1. Version 3.08: 1. Fixed LED blink problem Problem: With version 3.05a, LED would blink. Cause: Phase 1 code detects phase2 code CRC error in mbuf and could not jump to execute the code. It blinks LED to indicate the failure. Symptom: By adding NOP operation, the problem will go away. Root Cause: When reading the code from NVRAM, the FIRST and LAST command bits were assigned incorrectly. Originally, the firmware was loading the entire phase2 code in one big block of sequential read. The FIRST bit was assigned to the first word of phase2 code and the LAST bit was assigned to the last word of phase2 code. For Shasta, since the NVRAM resource is shared by BroadSafe, we changed to code to load phase2 code in small block of max. 256 bytes. When the loading address is the first word of phase2 code or the address is xxxx00, the FIRST bit will be set and then the last word of phase2 or the address is xxxxfc, the LAST bit will be set. This logic allows BroadSafe to gain the arbitration in the middle of loading phase2 code. The problem occurs when the starting offset of phase2 code was sitting at xxxxfc. For version 3.05a, it was located at 0xcfc. Initially, the FIRST bit was assigned; however, when it detected the offset was xxxxfc, it changed to LAST bit. The first byte was attempt to be read by LAST bit without FIRST bit and cause the NVRAM block state machine to misbehave. This was causing the loading of the first word data to be wrong. As result, the CRC calculation goes wrong and caused LED to blink. 2. Fixed NVRAM type detected Problem: The bootcode will not boot if the NVRAM AT25F512 is used. Cause: The specification to determine NVRAM type has been changed from 2 bits to 4 bits and it is not compatible with other (non-Shasta) devices spec. Fix: Changed the NVRAM type detection to SHASTA specific code. Note: With this change, the bootcode can read data from AT25F512; however, write operation is not supported. This means, vpd write will not work correctly. Version 3.07: 1. Added phy_type field in manufacture data block Problem: PXE code needed this field to determine the phy type Fix: Hard coded this field to be copper type 2. Read revision id from PCI config. register Change: For all legacy PCI bus, without main power, the PCI config. space was not available. Since the revision resides in PCI config. space, we had to determine the revision using phy register or other creative way to find out the revision. Since PCIE mode, the PCI config. space is always accessible, this means the creative way is no longer needed. The code is changed for PCIE to read the revision from 0x68 directly. 3. Applied workaround for Windows restart yellow bang problem. Problem: When WoL is disabled, after Windows shutdown/hibernate/standby, the device will yellow bang out after restart. Cause: When Wol is disabled, after Windows shutdown or hibernate, to save power, the firmware will shutdown the device. When system is coming back, with PCI reset, the chip should come back alive; however, that was not the case. Because of it, Windows will not be able to recognize the device any more. Fix: For revision A0, we don't shutdown the device. 4. Restored algorithm in version 3.05. Problem: To over come the mystery LED blink issue, the algorithm implemented in 3.05 has been removed in 3.06. Cause: After the investigation, we isolated that the 3.05 algorithm was not the root cause of the LED blinking issue; therefore, we are restoring the algorithm. Fix: Algorithm restored. Version 3.06: 1. Changed LED programming method back to version 3.04. Problem: For some reasons, with version 3.05, we cannot access register 0x40c correctly. Cause: Unknown. Fix: Since we know with version 3.04, it was working correctly, the LED mode programming method is reversed back to version 3.04. Side effect: With version 3.04 method, there is no protection against LED mode. The specification states, when share mode is used, LED mode must be in MAC mode. Version 3.05: 1. Changed shared_traffic_link_led bit define Problem: The shared_traffic_link_led bit should bit 14 instead bit 13. Cause: The Shasta register spec. version 2.2 had typo. Fix: Changed the define from bit 13 to bit 14. Version 3.04: 1. Support shared_traffic_link_led bit in configuration Enhancement: We needed a new bit to define the behavior of green LED in NVRAM configuration. This bit is defined in bit 15 of 0xc8/0xd8. When set the Link LED performs dual role: Solid green, when there is a link. Blink when there is an activity. This bit takes effect only when bit 2, and 3 of offset 0xc8/0xd8 are zero. (LED mode = MAC Mode) The bootcode will copy this bit to Mac LED control register (0x40c) bit 13. Version 3.03: 1. Enhanced UART functions a. Changed Read command display format b. Accept UART empty line c. Changed so it takes leading white spaces before commands d. Read length converted to actual length instead of count 2. Fixed UART bug problem: The value input had bug reading hex number 'a' to 'f'. Because of this, for example, reading from address 0x7c00 was actually reading from 0x7f80 and caused cpu to hang. Fix: Fixed the charactor input to integer converting routine. 3. Applied workaround for 'no snoop' Problem: We needed to clear 'no snoop' and 'relax ordering' bit to make master DMA to work. Fix: Added the code to clear those bits upon reset. Version 3.02: 1. Releasing two version of bootcodes. Problem: We need both PCIE 1.0 compliance and 1.0a compliance version Fix: Released two version of bootcodes ee5751c3.02a for PCIE 1.0a compliance ee5751c3.02 for PCIE 1.0 compliance 2. Added UART support Enhancement: UART debugging was needed for testing Fix: incorporated UART code into regular bootcode. Side effect: Now the bootcode size is 12K instead of 8K. 3. Disabled Flow Control timeout Problem: We needed to put this workaround on both 1.0 and 1.0a version Version 3.01: 1. Program device to be PCIE 1.0 compliance. Problem: The bootcode was not programming the mode, and we needed the device to be PCIE 1.0 compliance. Fix: Program device to be PCIE 1.0 compliance. Version 3.00: Initial version