      Release Note for b57ldiag and the bcm57diag driver
==============================================================

Version 1.59: (driver bcm57diag v9.5.9)
    1. Problem: (CQ27882)
         On RAM size 1MB devices, given that no ASF/IPMI/UMP installed 
         and there is insufficient space to contain the whole ASF/IPMI/UMP 
         component, b57ldiag is able to program a piece of ASF/IPMI/UMP - the 
         "Advanced Fw CFG" - in the NVRAM. Also, b57ldiag actually knows 
         there is insufficient space and prints out the appropriate message 
         on the screen.
       Cause:
         b57ldiag program ASF CFG first, and then check and program 
         the ASF firmware.  That means even insufficient space is reported, 
         ASF CFG still get programmed.
       Fixed:
         Added code to check if there is enough space for whole ASF 
         image before program any piece of ASF firmware.  
       Impact:
         None.

    2. Enhancement: (CQ27940)
         Remove PLL powerdown enable/disable option from the menu.
       Impact:
         None.

    3. Problem: (CQ27996)
         On 5755M, external loopback test ("pkttest -e" or "nictest d3")
         fails at Speed 1000. It passes at Speed 10 and 100.
       Cause:
         This was a 5755M code bug only and was a result of adding the 
         phy trim tab fix in v9.5.8.
       Fixed:
         Moved the phy trim tab code into the reset phy function.
       Impact:
         The fix is specific to the 5755M and will not affect other 
         boards.  No other changes were made.

    
Version 1.58: (driver bcm57diag v9.5.8)
 
    1. Problem: (CQ27669)          
          Running nictest on a specific platform on port 0 results in 
          "NVRAM data error".  Also noticed that WOL values cannot be 
          toggled on this port either.  
       Cause:
          The root cause is that the 5704 LOM device had been set to 'NIC'.  
          5704 LOM device has NVRAM write protection, and the GPIO1 is
          used for this purpose. 
          When a 5704 LOM device was set to 'NIC', write protection was 
          not disabled. so write NVRAM failed on port0.          
       Fixed:
          Extra code is added to disable the Write protection on both ports 
          before NVRAM write operation.
       Impact:
          None.          

    2. Enhancement: (CQ27832, done by bcm57diag)          
          Modified 5755M PHY settings to improve performance.
          IEEE amplitude & return loss are marginal / failing on some 
          notebook systems.
       Cause:
          This system has an external E-switch that impacts IEEE 
          performance.
       Fixed:
          On a particular OEM's system, the external resistor value causes 
          necessity to change the PHY Trim Tab values so the 5755M device can 
          pass IEEE compliant test.  This change is only applied to 5755M 
          device.  For any future 5755M design, the A.E. agreed to make
          modification to the external logic so that the system can pass 
          IEEE test using this set of Trim Tab value.
       Impact:
          5755M PHY Trim Tab values after reset.

    3. Enhancement: (bcm57diag) 
          Increased wait loop for 5906 VCPU init done after reset
       Cause:
          The 5906 VCPU INIT_DONE bit gets asserted high approximately 
          ~7ms after a GRC reset. Yet the bcm57diag was only waiting 
          ~5ms. the change was needed to prevent a potential problem.
       Fixed:
          The max wait loop for the INIT_DONE bit to assert was 
          increased from ~5ms to ~20ms until it times out and returns failure. 
       Impact: 
          only 5906 with bcm57diag v9.5.7 and greater.


Version 1.57: (driver bcm57diag v9.5.6)
 
    1. Problem: (CQ27658)          
          5906 LED Mode is inconsistent with what is indicated by DOS diag. 
       Cause:
          The Linux LED mode definition is different from the DOS.
       Fixed:
          Correct the LED mode definition.
       Impact:
          5906 LED configuration.
          
    2. Problem: (CQ27721)
          The "ifconfig ethX down" commands that must occur before 
          removing the tg3 driver and inserting the bcm57diag driver 
          are failing.  When the rundiag script attempts to insert 
          the bcm57diag modules, it fails indicating that there are
          no devices found.
       Cause:
          Previous runDiag script did not bring down the interface 
          if the tg3, bcm5700, or tg4 driver is installed.  
       Fix:
          Bring down the interface if the system kernel is 2.4, and the 
          driver is tg3, tg4, bcm5700, and/or bcm57diag.
       Impact:
          None.
          
    3. Problem: (CQ27669)
          NVRAM test fails on port 0 of HP DL360 using b57ldiag.
       Cause  : 
          A race condition exists between the bcm57diag driver and asf 
          firmware when writing the keep alive message in the fw event
          register resulting in lost keep alive messages causing the 
          fw to reset the hw.    
          Refer to CQ26395.
       Fix: 
          In bcm57diag v9.5.6. Use a recently defined keep alive message where
          the fw keeps track of multiple conditions before reseting the hw. 
       Impact: 
          none.


     
Version 1.56:  (driver bcm57diag v9.5.5)
 
    1. Problem: (CQ27557)
          Accessing second 5704 port on HP DL360 results in 
          "Invalid serial NVRAM format".
       Cause:
          Linux system bring down the network interface if the  
          configuration is DHCP and there is no link, in this 
          case, B57ldiag can not access the NVRAM correctly.
       Fixed:
          Check and Bring up the network interface when a new command is 
          issued.  Now, even the interface config is dhcp and no link, 
          the b57ldiag still can access the NIC card.
          Without this fix, changing interface boot protocol to 'none' 
          is recommended.
       Impact:
          Minor overhead is added since b57ldiag checks the interface status
          before execute a command.
 
    2. Problem: (CQ27660)  
          Secfg options (ie: CLKREQ) are missing or inconsistent with
          what is displayed in DOS diag for 5906.
       Cause:
          Linux secfg for 5906 has not been updated to the latest 
          secfg requirement.          
       Fixed:
          Changed the code to have same 'secfg' as DOS Diag for HWSB 
          device. 
       Impact:
          5906 secfg options is changed to as same as DOS diag.
 
    3. Problem: (CQ27658)  
          The value shown in b57ldiag on 5787m  for "VPD Data" is 
          inconsistent with what is indicated by DOS diag.
       Cause:
          Linux secfg for 5787m has not been updated to the latest 
          secfg requirement.  
       Fixed:
          Changed the code to have same 'secfg' as DOS Diag for Selfboot 
          device.
       Impact:
          secfg options for Selfboot device are same as DOS diag.
 
    4. Enhancement:
          Changed the code to have same 'secfg' as DOS Diag for regular 
          boot device. 
          
    5. Problem: (CQ27686)
          External Loopback Test ("nictest d3" or "pkttest -e") fails 
          on DUTs 5906(A1 or A2) and 5906M(A2), with the error message:
          ** Error 33 **
          No good link! Check Loopback plug.
       Cause:
          Previous b57ldiag does not support 5906M external loopback.
       Fixed:
          Added code to set related PHY registers and adjust timing to make
          5906 datatest pass.
       Impact:
          Impact only apply to 5906 external loopback since it require extra
          PHY register setting.

          
Version 1.55:  (driver bcm57diag v9.5.5)

    1. Problem: 
          Referenced tg3d in readme.txt for release 1.52 to 1.54.
       Cause:
          Forgot to update readme.txt.
       Fix:
          Updated readme.txt.

    2. Enhancement: 
          Removed the PLL Powerdown option from the "secfg" command
          because this feature is no longer supported.


Version 1.54:  (driver bcm57diag v9.5.5)

    1. Enhancement: (bcm57diag)
          Modified code to avoid intermittent loopback test failures
          seen on a number of kernel versions.

    2. Enhancement: 
          Modified code to check for link status via ethtools and not
          probe the PHY directly.


Version 1.53:  (driver bcm57diag v9.5.4)

    1. Problem: 
          Will not support 5756ME & 5722 for release 10.0.
       Cause:
          Testing for the above chips is not complete.
       Fix:
          Removed support for the above chips.



Version 1.52:  (driver bcm57diag v9.5.4)

    1. Enhancement: (bcm57diag)
          Switched to the bcm57diag driver for the 10.0 release.
          Will switch back to the tg3d after the 10.0 release.
          Improved 5906 support in the bcm57diag driver.

    2. Problem: (CQ27378) 
          Destroy state information needed by firmware at memory 
          location 0xb50-0xf4f. 
       Cause: 
          During memory testing the memory contents at 0xb50-0xf4f 
          is overwritten.
       Fixed: 
          Modified code to read and save the memory content at 
          0xb50-0xf4f before the memory test and then restore the 
          content after the memory test.

    3. Problem: (CQ27382) 
          Diagnostic fails when the interface is brought down during
          a diagnostic run. 
       Cause: 
          In this case, while diagnostic was running, the dhcp client 
          brought down the interface when it failed to get a dhcp 
          address.
       Fixed: 
          Documented in the readme.txt that the user is responsible 
          for the state of the interface during the diagnostic run.
          The runDiag script, the diagnostic program and the driver
          will not be modified to force the driver to stay up during
          the diagnostic run. 


Version 1.51:  (driver tg3 v3.66l patch tg3d v0.01)

    1. Enhancement: (tg3d)
          Patch file updated. Release notes at end of readme.tg3d.

    2. Enhancement: 
          Modified diagnostic not to run the loopback test at 1000 Mbit on
          parts that only support 10/100 Mbits.

    3. Enhancement: 
          Enhanced diver version checking to recognize the new tg3d driver.

    4. Enhancement: 
          Simplify the distribution directory structure and updated the
          documentation to reflect this.

    5. Enhancement: 
          Updated the runDiag script:
          1 - to work with the new directory structure
          2 - allow for repetitive diagnostic runs without re-makeing
              the driver on each run (use the -n option not to re-make)
          3 - handle the auto insmod-ing of the tg3 driver better by
              minimizing the time between "rmmod tg3; insmod tg3d"


Version 1.50:  (driver tg3 v3.66l patch tg4 v0.00)

    1. Enhancement: 
          Going forward the bcm57diag driver is going to be replaced by a
          patched version of the tg3 driver. The user can use the runDiag
          script to automatically load the driver and run diagnostic. The 
          user can also do this process manually by following the diagnostic 
          readme.txt and the readme.tg4 file in the driver directory.

    2. Enhancement: 
          Based on request from a specific OEM customer, this 
          version adds logic to read configurable option from the NvRAM 
          for allow/disallow PLL power down feature. User can use "secfg" 
          and configure "Allow PLL Powerdown {Disable(0), Enable(1)}". 
       Impact: 
          The option of "Allow PLL powerdown" only can be displayed and 
          configured on the device 5787M.

    3. Enhancement: (Applied the fix for DOS CQ27111 into Linux) 
          Customer requests that the 5755M GPIO0 init state to be 
          configurable. 
       Fixed: 
          Change B57diag "secfg" to make 5755M GPIO0 and GPIO2 configurable. 
          (input/output, 0/1 value in output mode). 
          This information is stored in NVRAM (manufacturing 
          information, offset DC).  Also, a boot code change request is in 
          the works to change the behavior to not drive GPIO0 low. 
       Impact: 
          This change only applies to 5755M LOM device.

    4. Enhancement: 
          In the "secfg" command added the Cable Sense option 
          (enable/disable) for the 5752M/5755M/5787M/5787FM chips.

    5. Enhancement: (CQ27328)   
          Added CLI "mread" to read PHY register. Implementing "mread" 
          complete PHY read / write control under b57ldiag.
          

Version 1.49:  (driver bcm57diag v9.5.2)

    Problem: (CQ27208) 
       5787F does not support ASF, but B57Diag 10.04 allowed the   
       firmware to be loaded into NVRAM. 
    Cause: 
       Previous version didn't filter out the 5787F. 
    Fixed: 
       Added a new filter to check if the iamge is a ASF or IPMI 
       firmware, then check if the device support ASF or IPMI. 
       Based on the 10.0 MRD v1.0b, 5702, 5705, 5782, 5751, 5753, 
       5752, 5754, 5755, 5756ME, 5787 should support ASF, whilet 5704, 
       5714, 5715, 5780, 5721, and 5722 should support IPMI.

    Problem: (CQ# 26740)
       The loopback tests (nictest d1, d2, d3) intermittently fail.
    Cause:
       Do not wait long enough for the link to stabilize before
       transmitting packets.
    Fix:
       Added a delay between setting the loopback mode and then
       transmitting the packets.

   Enhancement:
      Enhanced diver version checking so version 9.0.0 or newer of 
      the bcm57diag driver is required for a number of tests and also 
      enhanced version checking so that it will eventually be easier 
      to support a patched version of the tg3 driver.

   Enhancement: (driver)
      Modified the driver to compile on new kernels.
      No functional changes from the diagnostic point of view.


Version 1.48:  (driver bcm57diag v9.5.2)

    Problem: (CQ27120)
       Attempting to enable IPMI on both ports of the 5704c with "secfg"
       option 24 gives the following error: 
       "Secondary device asf if already enabled. 
       Disable that device and enable this?"
    Cause:
       5704 has two port. ASF only can be enabled on one port while 
       IPMI can be enabled on both port.
    Fixed:
       Check if the IPMI or ASf code has been loaded. If IPMI code is 
       loaded, 'enable bit' can be set on both port.  If ASF code is loaded,
       'enable bit' can only be set on one port.

    Problem: (CQ# 23014)
       Configuration register test (nictest a4) fails on a PPC system.
    Cause:
       On a PPC system registers 0x9c, 0xa4 & 0xac are byte swapped.
    Fix:
       Fixed software to handle the byte swapping on those registers.

    Problem: (CQ# 27004)
       Mac Loopback test (nictest d1) hangs on a PPC system.
    Cause:
       The failing kernel defaulted to a blocking read while previous 
       kernels defaulted to a non-blocking read. The diagnostic code 
       is designed for an non-blocking read.
    Fix:
       Modified the code to set up the read as non-blocking independent
       of the kernel default.

    Enhancement: (CQ# 27015)
      Implemented the equivalent of the DOS diagnostic "mwrite" command.


Version 1.47: (driver bcm57diag v9.5.2)
      
    Problem: (CQ# 27051)
      The "sechk" command fails on a 5906 device.
    Cause:
      Code for 5906 "sechk" not called correctly.
    Fix:
      Code for 5906 "sechk" called correctly.

    Problem: (CQ# 27054)
      The "secomp" command fails on the 5906 device.
    Cause:
      The incorrect NVRAM size is used during the "secomp"
      operation for the 5906 device.
    Fix:
      Use the correct NVRAM size for the 5906 devices during "secomp".

    Problem: (CQ# 27093)
      The "setwol" command fails on the 5906 device.
    Cause:
      Code for 5906 "setwol" was not present.
    Fix:
      Added code for 5906 "setwol".

    Problem: (CQ# 27055)
      A 5906M device is identified as a 5906.
    Cause:
      Code for differentiating 5906 and 5906M not present.
    Fix:
      Added code to differentiate the 5906 and 5906M.


Version 1.46: (driver bcm57diag v9.5.2)
      
    Problem: (CQ# 26647)
      Does not prompt the user to erase NVRAM UMP firmware when 
      replacing the UMP firmware with the IPMI firmware.
    Cause:
      Code not coded for IPMI firmware replacing UMP firmware.
    Fix:
      Update code to handle IPMI replacing UMP firmware.

    Problem: (CQ# 26884)
      The "secomp" command fails on self-boot devices.
    Cause:
      The incorrect NVRAM size is used during the "secomp"
      operation for self-boot devices.
    Fix:
      Use the correct NVRAM size for self-boot devices during "secomp".

    Problem: (CQ# 26924)
      The "seprg" command corrupts the self-boot NVRAM image when
      the firmware sized is larger than the NVRAM size.
    Cause:
      When programming the self-boot NVRAM firmware, the size of the
      NVRAM is not checked to verify it is large enough for the firmware.
    Fix:
      Fail the "seprg" command if the self-boot firmware is larger than 
      the NVRAM size.

Version 1.45: (driver bcm57diag v9.5.2)
      
    Enhancement: 
      As of release 1.45 the Broadcom NetXtreme diagnostic and
      driver will be packaged as a single compressed tar file.
      This is done to, achieve consistency with the distribution 
      method used by other Broadcom Ethernet software products, 
      to ease internal distribution and testing, and to maintain 
      batch file attributes.
      The package version number and diagnostic version will be
      the same and incremented with every release. The diagnostic
      driver version number will only be updated when the driver
      is updated.

    Problem: (CQ# 26874)
      A segmentation fault is produced when a 64 bit version of 
      diagnostic is run on a 32 bit kernel. The same happens when
      running a 32 bit diagnostic on a 64 bit kernel.
    Cause:
      Compiling the diagnostic executable on a newer distribution
      then running them on an older one produces this problem.
    Fix:
      Will compile the release diagnostic with older distributions.

    Problem: (CQ# 26875)
      Can not start the 64 bit diagnostic on a 64 bit kernel.
    Cause:
      Pilot error: released a 32 bit compile as a 64 bit diagnostic.
    Fix:
      Release 64 bit compile as a 64 bit diagnostic.

    Problem: (CQ# 26926)
      Can not program ASF or IPMI on the 5722 and 5756ME.
    Cause:
      Incorrect image file identification for the 5722 and 5756ME.
    Fix:
      Corrected image file identification for the 5722 and 5756ME.

    Problem: (CQ# 26930)
      Incorrectly identify the 5722 and 5756ME C0 as A0.
    Cause:
      The 5722 and 5756ME in-chip revision format is different
      than all previous chips.
    Fix:
      Modified code to identify the 5722 and 5756ME based on the 
      new in-chip revision format.

Version 1.44:
      
    Enhancement: 
      Added support for 5756ME, 5722 & 5906 to perform testing for 
      the 10.0 release.

Version 1.43:
      
    Enhancement: (CQ 26583)
      Enhanced the "iscsiprg" NVRAM clean up process, when the 
      NVRAM programming fails. 

Version 1.42:
      
    Enhancement: (CQ# 26508)
      Added iSCSI support (program via "iscsiprg").

Version 1.41:
      
    Problem: 
      Will not support 5756ME, 5722 & 5906 for release 9.7.
    Cause:
      Limited testing has been performed on above chips.
    Fix:
      Removed support for above chips for release 9.7.

    Enhancement:
      Improved 5755 memory testing.

Version 1.40:
      
    Enhancement:
      Initial 5756ME and 5722 support added.
      Needs driver version 9.5.2 or newer.

    Problem: (CQ# 26360 & 26400)
      Can not program a 5705 bootcode or other images.
    Cause:
      Bug introduced by fix for CQ# 25136 in Version 1.38.
      The bug incorrectly sizes the NVRAM for 5705 devices.
    Fix:
      Modified diagnostic code to correctly size the NVRAM.

    Problem: (CQ# 26358)
      Incorrectly identify a 5705F as a 5705.
    Cause:
      No code existed to identify the 5705F.
    Fix:
      Added code to identify the 5705F.

    Problem: (CQ# 26359)
      Can not use the "sedump" command to generate the NVRAM image
      on a 5787 selfboot device. The dumped NVRAM image fails "seprg".
    Cause:
      Incorrect file write routine called in code during "sedump".
    Fix:
      Modified code to use the correct file write routine.

Version 1.39:
      
    Enhancement:
      Initial 5906 support added.
      Loopback tests (d1-3) need driver version 9.5.2 or newer.

Version 1.38:

    Problem: (CQ# 25727)
      System hangs when diagnostic is run with an unsupported Broadcom
      Ethernet adapter.
    Cause:
      Diagnostics does not support Broadcom 5700-03 adapters and was
      accessing them in a way that would hang the system.
    Fix:
      Diagnostics now does not access 5700-03 adapters. 

    Problem: (CQ# 25136)
      The "device" command displays incorrect NVRAM information.
    Cause:
      Incorrect NVRAM information is provided by the driver which
      is then displayed by diagnostics.
    Fix:
      The diagnostic now does not use the driver NVRAM information 
      but determines the information it self. 
      
    Problem: (CQ# 25728 & 25815)
      A warning message is incorrectly printed when using the "seprg"
      command to update the bootcode.
    Cause:
      The code that checked for device and image consistency was 
      incorrect.
    Fix:
      Updated the code that checks for device and image consistency. 
      
    Enhancement:
      Added the "semode" command that displays NVRAM information.
      
Version 1.37:

    Problem: (CQ# 24607)
      The "asf" command causes diagnostic to lockup.
    Cause:
      A bug in the code does not terminate asf testing when the
      necessary asf files are not present in the diagnostic directory.
    Fix:
      Do not execute the asf test and notify the user that the asf
      files necessary for testing are missing. 

Version 1.36:

    Enhancement:
      Replaced the ioctl NICE_CMD_REG_READ with NICE_CMD_REG_READ2.
      An issue caused by AsfIPmon forced a driver change that required
      this change (details are in the release notes of the driver).
      Driver v9.4.5 or newer is required for this diagnostic to run.

Version 1.35:

    Enhancement:
      The 32 bit compile of diagnostic will not run with the 64 bit
      compile of the driver and will prompt the user to use the 64
      bit compile of the diagnostics, for x86_64.

Version 1.34:

    Enhancement:
      Added 5787-lite support.

    Enhancement:
      Linked new executables with the -static option.
      Executables withOUT the -static option (old way) have their
      names post-pended with _d (i.e. b57ldiagi_d, b57ldiagi64_d
      and b57ldiagp_d).
      If there are no issues using the executables created with the
      -static option then eventually the files post-pended with the
      _d option will not be created or distributed.

Version 1.33:

    Problem: (CQ# 23932)
      NVRAM corruption during bootcode and PXE upgrade.
    Cause:
      When firmware is running NVRAM can be corrupted when 
      diagnostic upgrades the content of NVRAM.
    Fix:
      Disable any firmware from running when updating NVRAM. 

Version 1.32:

    Problem: (CQ# 23717)
      Can not program the latest version of UMP firmware.
    Cause:
      When porting DOS UMP code did not remove an extraneous check.
    Fix:
      Removed DOS UMP checking code that is unnecessary in Linux.

    Problem: (CQ# 23770)
      The "setwol" command does not work on selfboot 5787 devices.
    Cause:
      Coding of selfboot is still in progress and this function
      was not complete yet.
    Fix:
      Coded selfboot "setwol" command.

    Problem: (CQ# 23800)
      ASF Option "Send Ready SMBUS Msg" not available.
    Cause:
      The option was new in DOS diagnostic and was not ported to Linux.
    Fix:
      Ported "Send Ready SMBUS Msg" option.

Version 1.31:

    Problem: (CQ# 23724 & 23802)
      The VPD checksum stored in NVRAM was incorrect according to the
      PCI 2.3 specification.
    Cause:
      Code bug.
    Fix:
      Updated the VPD checksum calculation algorithm to be correct.
    Impact:
      The present version of diagnostic will accept both types of 
      checksums in order to be backward compatible. 
      All new checksums stored in NVRAM will be PCI 2.3 compliant.
      This issue showed up because as of release v9.05 of DOS diagnostic 
      the new checksum method is being used, so any device programmed 
      with v9.05 of DOS diagnostic or newer will be seen as having a
      checksum error with Linux diagnostic versions older than 1.31.

Version 1.30:

    Problem: (CQ# 23702)
      Diagnostic incorrectly flags a device/image-file mismatch when
      programming bootcode to NVRAM.
    Cause:
      The routines for identifying new devices and image files had 
      bugs the caused the incorrect identification.
    Fix:
      Updated the device and image file identification routines.

Version 1.29:

    Enhancement:
      Updated the readme.txt with more details.
      No code changes except for version number 1.29.

    Enhancement:
      Updated the cpu05.bin file, with the version used by DOS
      diagnostics, which has better support for the 5752.

Version 1.28:

    Problem: (CQ# 23011)
      Intermittently unable to program the PT code to the NVRAM.
    Cause:
      When PT code is running a resource conflict occurs with 
      diagnostics and access to the NVRAM is corrupted.
    Fix:
      Disable PT code from running before programming NVRAM. 
      The same modification was also made for UMP programming.

Version 1.27:

    Enhancement: (CQ# 23266)
      Enhanced the "seprg" command to handle UMP programming.

    Enhancement: (CQ# 23269)
      Added the "setump" command for UMP enable/disable.


    Enhancement:
      Preliminary support for 5787 selfboot NVRAM images added.

Version 1.26:

    Enhancement:
      Preliminary support for 5754/5787 added.
      Use the new Linux driver based of v8.3.17 of bcm5700.
      The new driver is bcm57diag v9.0.0.
      Eventually bcm5700 will be replaced by bcm57diag.
      Also bcm57diag will be stripped down and optimized for
      diagnostics and will not be a full/functional network driver.
      The release directory for bcm57diag is b57linuxDiagDrvr.
      For the v9.0.0 release of bcm57diag most of the files in the
      release directory are the same as v8.3.17 of bcm5700 but these
      files will be updated over the next few releases.
      
Version 1.25:

    Enhancement: (CQ# 14483)
      Enhanced the "-l0" option of the "sedump" command so that
      all data from NVRAM is copied to the file specified (original
      only boot code was copied to the file specified).

Version 1.24:

    Problem: (CQ# 14483)
      Unable to program IPMI firmware on a PPC with a 5704.
    Cause:
      A Byte swapping bug introduced in v1.22 makes an invalid 
      memory reference when checking for IPMI in NVRAM.
    Fix:
      Fixed byte swapping bug. 

    Problem: (CQ# 14364)
      Once "nictest" is run on a 5752 subsequent runs, run slow.
    Cause:
      During "nictest" the memory test destroys the bootcode stored
      in memory. This causes the driver to run slow after a reset
      because the driver takes time to time-out when waiting for the
      bootcode handshaking which does not happen with corrupt bootcode.
      This only happens when the 5752 operates in the default fast boot
      mode where after the reset the boot code is run from the chip 
      memory. In "slow" boot mode the boot code is re-loaded from NVRAM
      to chip memory before it is executed.
    Fix:
      Force the 5752 to "slow" boot when the memory is tested. 

ersion 1.23:

    Problem: (CQ# 14292)
      The "seprg -a" failed on a 5752A2.
    Cause:
      The "seprg -a" algorithm misidentified the 5752 as a 5705.
    Fix:
      Fixed the incorrect identification specified above.

Version 1.22:

    Problem: (CQ# 13692)
      The "seprg -a" command printed out incorrect version information.
    Cause:
      The algorithm for calculating the present version in the NVRAM
      was incorrect.
    Fix:
      Corrected the algorithm that calculates the present version.

Version 1.21:

    Problem: (CQ# 14003)
      In "asfcfg" option 12 "Getway IP" is incorrect.
    Cause:
      Typo.
    Fix:
      Replaced "Getway" with "Gateway".

    Problem: (CQ# 13886)
      The "secfg" command on a PPC system causes a crash.
    Cause:
      There was an invalid memory reference in the code.
    Fix:
      Modified code not to make the invalid memory reference.

Version 1.20:

    Problem: (CQ# 13187)
      The "secfg" option 21 selection 3 and 4 were swapped.
    Cause:
      Code error swapped selection 3 and 4.
    Fix:
      Fixed "secfg" code error and made some text modifications.

    Problem:
      The "sedump" command incorrectly truncated the bootcode 
      image when the "-l" option was used.
    Cause:
      Code error incorrectly sizes the bootcode.
    Fix:
      Fixed bootcode sizing function error.
    Impact:
      This fix is a temporary fix because eventually the "-l" option
      functionality will be modified so that it is consistent with
      the DOS diagnostics version. In DOS the "-l" option dumps the
      complete NVRAM contents not just the bootcode.

    Enhancement:
      Improved the "sechksum" function for 575x device family.

Version 1.19:

    Problem: (CQ# 13187)
      Some "secfg" text (display only) fields had errors.
    Cause:
      Typos.
    Fix:
      Fixed "secfg" typos and made some text modifications to ease
      automated parsing of the text.

    Problem: (CQ# 13431)
      An error in the driver caused diagnostic to hang with the 5714
      fiber card.
    Cause:
      Diagnostics waited for the driver to return, which it never did.
    Fix:
      Modified the code so that diagnostic will time out and print
      an error even if the driver hangs.
    Impact:
      The Linux driver v8.2.13 or newer is required for testing the
      5714 family of chips.

    Problem: (CQ# 13482)
      The "secfg" mac mode options does not work for 5704 and 5714.
    Cause:
      The mac mode configuration was not being stored in two NVRAM
      locations as required by boot code for proper operation.
    Fix:
      Modified the code to store the mac mode information in the two
      NVRAM locations required by boot code.

Version 1.18:

    Problem: (CQ# 13269)
      Could not enter two smbus addresses in "secfg".
    Cause:
      Original release of diagnostic did not support dual smbus 
      addresses.
    Fix:
      Modified code accept two smbus addresses via "secfg".

Version 1.17:

    Problem:
      Incorrectly identifies the Shasta and 5705 family of devices as
      a 5752.
    Cause:
      The above bug was introduced in v1.16 by a coding typo.
    Fix:
      Fixed the coding typo to eliminate the incorrect identification.

    Problem: (CQ# 13254)
      Could not enable IPMI on two ports.
    Cause:
      Code was written intentionally to limit the enabling of IPMI
      on two ports
    Fix:
      Allow IPMI to be enabled on two ports by removing the limitation 
      stated above, from the code.

    Enhancement: (CQ# 13218)
      Removed the ASF enable/disable display from the "asfcfg" menu to
      make it consistent with the DOS diagnostics.

    Enhancement: (CQ# 13219)
      Added the "setipmi" command to enable IPMI operation.
      
Version 1.16:

    Enhancement: (CQ# 13187)
      Text changes to "secfg" to ease automated parsing.

    Enhancement: (CQ# 13243 & 13244)
      Improved 5714/5705 chip family support.
      
    Enhancement:
      Improved firmware string display of the "device" command on
      Power PC systems.
      
    Problem: (CQ# 12867)
      The boot code was incorrectly programmed to a 5751 board with a
      SaiFun flash device.
    Cause:
      Diagnostic assumed that all device have a flash paging structure
      of the ATMEL device which is not the case for Saifun.
    Fix:
      For ATMEL flash devices convert the logical address to a physical
      addresses and for the SaiFun or ST part no conversion is required.
      
    Problem: (CQ# 13221)
      Could not program a 5714 SERDES device with IPMI firmware.
    Cause:
      Incorrectly identifying the SERDES device as a copper devices.
    Fix:
      Correctly differentiated between 5714 SERDES/copper devices.
      
Version 1.15:

    Enhancement:
      Added ASF programming support for 5705/51/21/52/53/14.

    Enhancement:
      Minor text changes to "secfg" to ease automated parsing.

    Enhancement:
      Fixed text display issues seen with the "dir" command.

Version 1.14:

    Enhancement:
      Added support for 5705/51/21/52/53/14 (alpha stage).

    Problem:
      The "MBUF SRAM via DMA" test fails on Fedora Core 2 & 3.
    Cause:
      The mechanism used to access physics memory has changed 
      for FC2&3 (kernel change).
    Fix:
      This test is removed until a work around is operational.
      For test coverage removing this test is not an issue
      because the MBUF SRAM is tested by "nictest b3" and indirectly
      via "nictest d1/2/3". The DMA is tested in "nictest d1/2/3".

Version 1.13:

    Problem: (CQ# 10980)
      On SOME PPC systems diagnostic failed the DMA test after
      multiple iterations.
    Cause:
      Never received a failing system and could not debug.
      The fix noted in the "Fix:" point below was sent to the 
      customer and was reported to solve the problem.
    Fix:
      Increased the wait time for the DMA test to complete.

Version 1.12:

    Problem:
      On PPC systems diagnostic would hang after running many hours.
    Cause:
      A timer routine did not account for one rollover condition.
    Fix:
      Added code to account for the missing rollover condition.

Version 1.11:

    Enhancement:
      Added the driver returned error number to the end of the 
      "Driver returned error status" message.

Version 1.10:

    Problem:
      On PPC systems the loopback test fails (i.e. nictest d1).
    Cause:
      The setsockopt() PPC call does not complete due to compatibly issues.
    Fix:
      Remove the above call. Nictest d1 will work without it.

Version 1.09:

  1. Fixed failure of "MBUF SRAM via DMA" test on the PPC system.
  
    Problem (CQ# 9876):
      When the "MBUF SRAM via DMA" test is run it fails (test B5).
      
    Cause:
      On the new PPC system the compile environment changed.
      Diagnostic use of u64 is problematic under the new compile
      environment.
    Fix:
      The code was modified to work with u32 instead of u64.

Version 1.08:

  1. Added a new verify option to the "seprg" command.
  
    Problem:
      Command "seprg" can cause diagnostics to crash (CQ9411)
      Command "seprg" accepts firmware files with bad CRCs (CQ9412).
      
    Cause:
      When "seprg" is used to program the flash the from a file the 
      validity of the file is not checked.
      
    Fix:
      Added the -v option to the "seprg" command.
      The -v option verifies the contents of the file being used.
      
   
  2. Support new ASF file format.
  
    Enhancement:
      ASF code is now released as a single binary image.
      Modified diagnostics so it can program the NVRAM with the 
      ASF images using the "seprg -a -f<filename>" command.

Version 1.07: 

  1. Make filename not case sensitive
  
    Problem:
      For formal ASF code releases, the filename was in upper case
      where some of the engineering releases are in lower case.
      This made the operation very inconvinient. 
      
    Cause:
      The ASF code generating utility does unify the filename to
      either upper case or lower case.
      
    Fix:
      Changed the code find the name in 3 steps.
      
      1. Search for the file with giving name as it. This allows
         upper and lower case mixed filenames.
      2. If not found, then convert all letters to lower case.
      3. If not found, then convert all letters to upper case.
      
      If the file cannot be found at this point, it will give up
      the search.
   
Version 1.06:

  1. Fixed DMA overnight SRAM testing failure
  
    Problem:
       After running overnight, from time to time DMA SRAM test 
       was failing.
    
    Cause:
       It was racing between DMA speed and CPU speed. It does not
       happen often, but, once a while, CPU will go and check data
       before DMA complete transfer the whole block.
       
    Fix:
       Put 1 millisecond delay before checking data to allow the DMA
       to complete.     

Version 1.05:

  1. ASF configuration format changed from format 5 to format 6.
   
     Problem:
       The ASF code has been changed to configuration format 6. 
     
     Cause:
       Since b57ldiag asf code is shared with ASF code, after the ASF code
       update, now b57ldiag is using configuration format 6.
       
  2. Fixed Memory test intermittent failure problem
  
     Problem:
       Running test B in loop, intermittently the test would fail.
       
     Cause:
       We had a known chip errata that when doing indirect access to memory
       or registers, the address write does not completes correctly. To
       workaround this, we need to perform an extra read right after the address
       write. 
     
     Fix:
       Added the code to read back the address right after the address write.
       
  3. Restored test group B and A3
  
    Problem:
      Test group B and A3 was temporary removed in Version 1.04
      
    Cause:                  
      We needed an immediate stable version release; thus we had to disable
      test A3 and group B for the previous version.
    
    Fix:
      Restored the tests
      
Version 1.04: 

  1. Added suspend feature upon error for debugging
  
    Problem:
      When test fails, after aborting the test, the driver is 
      resumed and everything back to running. In this case, 
      All debugging information has been lost.
    
    Cause:
      After resume driver, driver will issue reset to the device
      which will reinitialize everything. This will wipe out all
      information about the test failure. 
      
    Fix:
      Added one more option "suspend" upon detecting error. With
      this option, b57ldiag will not resume driver and left driver
      state as suspended.
      
    Note:
      After user select this option, a command "resume" must be
      issued before the port can be back to operational state. 
      
   2. Removed A3 and Group B tests
   
    Problem:
      The test was intermittently failing in version 1.03. We needed
      a stable version in version 1.04. 
      
    Change:
      The test is temporary disabled in this version. Those tests will
      be enabled back in version 1.05.
      
Version 1.03: 

  1. Removed phy_id configuration from NVRAM
  
    Problem:
      Phy_id is not a valid configuration. Should not allow user
      to configure it.
      
    Cause: 
      Order version of configuration had this field; however the
      phy_id is now no longer a configuration field. The id is
      read directly from phy register.
      
    Fix:
      Removed option 24 in secfg.
      
  2. Fixed secfg command problem
   
     Problem: 
       Cannot get into secfg command
       
     Cause: 
       Bootstrap CRC checksum was in little endian format. It needed to be
       converted for comparison.
       
     Fix:
       swapped bootstrap CRC from little endian to big endian.    
       
  3. Checks for valid bootcode for command dir, semap, sechksum,
   
     Problem:
       When bootcode image was invalid, it will behave incorrectly.
       
     Cause:
       Since the bootcode code offset and directory was invalid. The length
       and offset calculation was unpredictable. As result, it may get invalid
       length for memory allocation.
       
     Fix:
       Added image validation check before executing the command. If it is
       invalid, it aborts the command. 
       
  4. Added valid bootcode image check for sedump command.
  
    Problem:
      When bootcode image is invalid, it gets incorrect size for dumping.
      
    Cause:
      When user did not specify the length to dump, the program was trying
      to determine the bootcode length (default) to dump by looking at the boot
      strap and directory. Since the bootcode image was invalid, it get invalid
      length. After the computation, it get negative length if the length field
      was 0xffffffff. As result, it could not allocation memory and cause failure.
      
    Fix:
      When user did not specify the length to dump and the bootcode was invalid,
      force dump length to be 0x2000 (as default) for the size to dump. 
      In addition, it turns off physical-logical translation since the offset is
      invalid. If user wants to use secomp command to compare the content, -a
      option will be needed in secomp command to turn off the address translation
      also.
      
  5. Display firmware version for CPU test
  
    Problem:
      When running CPU test, user cannot tell what version of firmware it was
      testing with. 
      
    Cause:
      Code does not display the version number and order firmware does not have
      version string also. 
      
    Fix:
      Updated firmware to contain version string and modified the program to
      display the version string when testing.
      
    Side effect:
      This function will work only if newer firmware is used. 

version 1.02: 

  1. Added new error codes for CPU Test
  
    Problem:
      When CPU test (test C2) fails it displays "CPU test failed" only.
      It would help if it displayed more information about how it failed.
      This is also true for DOS version of b57diag.
      
    Enhancement:
      1. Changed cpu.bin/cpu05.bin to encode the error
      2. Changed b57ldiag to decode the error message to text format.
      
    New possible error messages:
      1. CPU failed on %s bit access to address %08X
      2. CPU failed on memory pattern %08X at address %08X
      3. CPU Instruction test failed
    
    This requires new cpu.bin/cpu05.bin firmware released in version 
    1.02 or later. 
    
  2. Fixed secomp failure on offset 0x10 
  
    Problem:
      When using secomp command to compare the NVRAM data against file, 
      offset 0x10 was always incorrect. This problem was only seen in 
      PPC, RedHat (i86 systems) was okay. 
   
    Cause:   
      When reading bootcode image from NVRAM, the bootstrap checksum is 
      reversed in PPC. The CRC was stored in little-endian format. It 
      needed to be converted to big-endian before comparison.
      
    Fix:
      Converted checksum to big-endian format.
      
  3. Fixed secomp failure on offset 0x100
  
    Problem:
      When program bootcode image with seprg with restoring serial number,
      Offset 0x100 data will be corrupted. 
      
    Cause:
      The bug was in seprg command. When programming bootcode and try to 
      restore the serial number in VPD data. The vpd data needed to be 
      re-organized due to the serial number restoration. Offset 0x101-0x102 
      is the region length 16 bit field. In PPC, the field needed to be 
      converted to big-endian. There was a bug using 32 bit conversion to 
      convert 16 bit data. As result, the length as stored as zero and 
      caused the data corruption. 
      
    Fix:
      Changed the 32 bit conversion to 16 bit conversion.   
      
  4. Added new option -m and -v for secomp command
  
    Problem:
      When Mac address or serial number was preserved while using command
      seprg, the comparison will fail on mac address, manufacturing block
      checksum, and vpd data.
      
    Cause: 
      The Mac address and serial number will not be the same as original default value
      in file.
      
    Fix:
      Added two new options:
      -m to ignore mac address and manufacturing CRC comparison.
      -v to ignore VPD data comparison.
      
Version 1.01: 

  1. Added -unlock command line option
  
    Problem:
      If the process was killed by other process, the exclusive 
      semaphore is locked forever. When we run the program, it will
      say "An instance is already running" and simply exit program.
      
    Cause:
      The purpose if the semaphore implemented was because we needed
      this program to run exclusively. However, since we cannot trap
      kill signal, we could not unlock the semaphore when the program
      is terminated. 
      
    Fix:
      Added -unlock command line option to take over the locked semaphore.
      
    Side effect:
      As a hardware diagnostics, this program must be running exclusively.
      With this option, however, user is able to override the exclusive
      operation and cause the diagnostics to fail. It is user's responsibility
      and understanding the purpose of the semaphore. 
      
  2. Changed ASF configuration bits
  
    Problem:
      ASF configuration, command "asfcfg" option 7, "ASF Misc. Info", data
      was stored in incorrect location. 
      
    Cause:
      There was big-endian and little-endian issue where bit 24 information
      was stored in bit 0. 
      
    Fix:
      Changed the bit ordering
      
  3. Fixed secfg in PPC system
  
    Problem:
      In Power PC systems, secfg command will return bootstrap checksum error
      and cannot go to configuration routine. 
      
    Cause:
      The checksum check routine was swapping checksum to little endian format
      for comparison.
      
    Fix:
      Changed the checksum to big endian format.
      
  4. Added NVRAM programming status display
  
    Problem:
      When program large block of NVRAM image, it takes long time. Especially 
      when if the device was SEEPROM. In this case, user may mistakenly think
      of program hang.
      
    Fix:
      Changed the code to show programming progress status.
  
  5. Added new command for ASF debugging capabilities
  
    Enhancement:
      We need more commands to support ASF debugging. 
      
    Changes:
      a. Added new command 'halt' to halt CPUs.
      b. Added new command 'u'/'disasm' to disassemble MIP instructions
      c. Added new command 'step' for stepping MIP instruction
      d. Added new command 'go' to jump cpu PC.
      e. Added new command 'asf' for debug version of ASF code. 
      
Version 1.00: 
    Initial Release
 

