
RELEASE NOTES FOR TIGER4 HSCBP T4HSC15 CODE  10/05/05Operational mode:       Major 1, Minor 15
Flash update mode:      Major 1, Minor 12
Config Version :	Major 1, Minor 10

Boot Code Address Range :  0x7C000 - 0x7FFFF
Op   Code Address Range :  0x61000 - 0x7A387

HEX CODE FILE:  T4HSC15.HEX   10/05/05  357,167 bytes


INFOBLOCK INFORMATION RETURNED BY: FWUPDATE T4HSC14.HEX /INFOBLOCK

OP CHECKSUM:		0x2CBE  (DIB ONLY)
BOOT CHECKSUM:		0x4C1B	(DIB ONLY)


*  The following checksum were calculated using the Firmware Range Checksum command. *

Utility Version 2.7 (Built: Sep 15 2004)

Boot code checksums (match data from Range Checksum command):
	Boot code (0x7C000 - 0x7FFFF): 0x1d7d

Operational code checksums (match data from Range Checksum command):
	Section 1 (0x61000 - 0x6FFFF): 0xe9f6
	Section 2 (0x70000 - 0x7A387): 0x736f
	Overall   (0x61000 - 0x7A387): 0x15d65


==============
KNOWN ISSUES: 
==============

1)  The boot code is not update able due to our hardware implemetation for the HSBP.  
    Therefore, if you try to update the boot code, the FWupdate utilities will display an 
    error message to show that the boot code was not verified successfully.  

2)  This version should be used with BMC16 or latter to resolve the BMC/HSC 
    communication problems.

3)  This version only runs on Pre-beta or later HW with GEM359 controller.  Do not 
    install this version on Alpha SCSI BP, which does not have the GEM359 controller.  
    It might cause your Alpha HW to stop functioning. 

=============================================================================
                           ISSUES FIXED
=============================================================================
T4HSC15:
========
- QLogic Core used is V1.12A1

- Support for new version of HSC flash device

T4HSC14:
========
- QLogic Core used is V1.10A5

- Fixed DR #39472 (HSC: "Set Event Receiver" generates unexpected SEL entries).
  Drive Inserted/Presence and Drive Removed/Absent events will not be genearated
  on boot.

-----------------------------------------------------------------------------
The following are the release notes from Qlogic with changes that are included 
in this release.
------------------------------------------------------------------------------

                 QLogic(R) GEM359 SAF-TE/IPMI Firmware

                          SAF-TE/IPMI Firmware
     ========================================================
                            Version 1.12A1
                          (September 19, 2005)


------------
INTRODUCTION
------------

This file contains the following:

 - Product Enhancements
 - Recent Bug Fixes
 - Known Issues
 

Hex file:  

A359V112A1SAFTEIPMIFlashimage.hex -   is the complete booter/runtime/configuration
                                                                          file in INTEL EXTENDED HEX Format for use 
                                                                          with an AMD 29F400BT or compatible flash ram.
 
   NOTE: This Version contains the contains the AMD type Flash update algorithm in the Boot code
         for downloading firmware.  It contains the same Operational Firmware as V1.11A2, only the Boot
         code is changed.  The Operational Firmware V1.11A2 and configuration data can be downloaded
         with the V1.12A1 boot firmware when used with an AMD compatible flash device.


----------------------------------------
PRODUCT ENHANCEMENTS
---------------------------------------- 

V1.00A1
-----------   
     - Initial pre-release

V1.00A3
-----------
1).  Added additional checks for errors when erasing and updating flash.
2).  Added a kickstart routine in the idle loop to speed up processing pending
       messages.  Was waiting for 50ms timer or other interrupt to kickstart this 
       process.
3).  Changed several one or two line functions to inline to speed up code execution.
4).  Changed the processing of a slave packet from being processed on a 50ms interrupt
       to being processed in the Idle loop.

V1.01
-------
5).  Added the following IPMI functions:
         Broadcast Get Device ID,
         Get/Set Sensor Threshold,
         Get/Set Event Receiver,
         Get/Set Sensor Hysteresis,
         Get/Set Sensor Event Enable,
         Get Sensor Event Status,
         Get Sensor Reading,
         Set Power Supply state,
         Get Fault Status.
6).   Added Event Generation code.
7).   Added foreground polling for LM75's.
8).   Added FRU processing.
9).   Added Function to read all tachs at the same time and save values in a buffer. 
10). Added SDRR's and cross reference to element table.
11). Added new config paramenters for INTEL to the default config.
12). Added capabilities to read/write EEPROMS.
13). Added capability to get the I2C port attached to the LM75's from config parameters.
14). Added capability to get IPMB port for Event Generation from the config parameters.

V1.01A5
-----------
15). Added MasterWriteReadI2C function.

V1.01A6
------------
16). Added code for get enclosure status, get enclosure configuration and get device 
        slot status.

V1.03A1
-----------
17). Added default fan tach capabilities with SDRR's for 3 fan tachs. SDRR's for fan 
        installed were not implemented.

V1.03A4
-----------
18). Added erase/update support for AMD AM29F400BT or Fujitsu MBM29F400TC flashes.

V1.04A2
-----------
19). Added watchdog timer support.
20). Added SCSI to I2C pass-through support.
21). Added runtime file length to header.
22). Added support for up to 8 LM75's per I2C port.
23). Added support for SEEPROMs 24C01,24C04,24C08,24C16,24C17,24C32 and 24C64.
        Previously only supported 24C02's,

V1.06A1
------------
24). Added new LED flash rates and patterns.
 
V1.06A2
------------
25). Added new LED model select bit input Function Type and support for multiple 
     LED models. Models can be configured to be selectable at run time. 

V1.06A3
------------
26). Added booter FW revision information to run-time Get Device Id response.

V1.06B2
-----------
27). Changed the method of processing sensor information. Now sensors are only read
        if the scan bit is active in the SDRR for the sensor.  If the scan bit is 
        inactive, and a read sensor command is received, the data returned is the value
        saved from the last read of the sensor with the scan bit active.  Previously
        the saved value was being updated by the SAF-TE element processing controlled 
        by the Polling enable flag in the configuration and/or the read once after 
        receiving a SAF-TE Enclosure Status command.
V1.08A1
-----------
28). Added I2C SMB handler for processing the Intel Specific SMB commands - GetDeviceId, 
        Enter Firmware Transfer Mode, Exit Firmware Transfer Mode, GetSelfTestResults, 
        Firmware Program, Firmware Read, Get Firmware Range Checksum, and Set Program 
        Segment in Booter and Enter Firmware Transfer Mode, GetSelfTestResults, and 
        GetDeviceId in runtime.
29). Added I2C recovery and I2C keep alive capabilities.(Refered to as I2C WatchDog).

V1.09A1
-----------
30). Changed SMBus handling from a Byte Write/Read protocol to a Block Write/Read 
     protocol.  This changed the SMBus handling to expect to receive a Block Write
     command to do something and then receive a Block Read command to return the 
     status of the Block Write command.  Previously the status was returned in the
     Read portion of the write/read command.

V1.10A2
-----------
31). Changed the hardcoded Slot ID values from:
       	ID_ON0 -> Slot ID's 0, 1, 2, 3, 4, 8, 9
        ID_ON1 -> Slot ID's 10, 11, 12, 13, 14, 15, 0
     to:
	ID_ON0 -> Slot ID's 0, 1, 2, 3, 4, 5, 0
        ID_ON1 -> Slot ID's 10, 11, 12, 13, 14, 15, 0
     per Intel Request

V1.11A1
-----------
32). Removed the 5 second timeout at POR which waited for a SetPowerSupply cmd
        before using the default values.  Now uses default values immediately and
        continues on with POR.  The SetPowerSupply cmd can be sent anytime and as
        often as desired.

V1.11A2
-----------
33). Changed Event generation logic to allow events to be generated for Type 0x0D
        with Event Reading Type 0x6F.  Added a mask definition using the last 8 bits
        of the 13 Event bits defined to initialize the Event generation logic to prevent
        Events from being generated at POR.  The Mask is defined in the Gem359
        Firmware Functional Spec under Section Header “Runtime IPMI Sensor Support”
        Drive Slot Status.

V1.12A1
-----------
34). Changed the Flash update algorithm in the Boot code from an Intel compatible 
        Flash Device to an AMD compatible Flash Device.  Both algorithms cannot 
        reside in the Boot code because of code space therefore separate Flash devices 
        must be used for Intel and Amd type flash devices.


----------------
BUG FIXES
----------------
  
V1.00A2 
-----------
1).  Corrected limits error checking in Get Firmware Range Checksum function.
       Now returns the proper error if input parameters are out of range.
2).  Corrected a problem with the RUNTIME error reported by the Get Self Test
       function. The error flag was being reset in the wrong place.
3).  Corrected a problem with the Enter Firmware Transfer function while in
       Booter.  This caused the a reset which cleared the stay in Booter flag.
4).  Corrected a problem where Booter only functions return the error code 0xD1
       if executed in RUNTIME.
5).  Changed I2C address configuration from the setting of the ID-ON jumper from
       selecting C0 when jumper installed to selecting C2 when jumper installed
       and C0 without jumper.
               
V1.00A3
-----------
6).  Fixed a problem where the flash suspend was not completed before placing 
       flash back on line when an I2C interrupt is detected during a flash erasure.
7).  Fixed a problem where flash parameter block 1 was not being erased when the INTEL
       firmware downloader updated the runtime and config code. This block is currently
       not being used and is reserved but the INTEL firmware downloader loads over 
       this region to load the configuration information in parameter block2.  This
       did not currently cause a problem but could if this block is used later.
8).  Fixed a problem where the BOOT code could have been updated erroneously by the 
       INTEL downloader. The erase function prevents erasing but the downloader could
       have tried to overwrite the block with download address error.       
9).  Fixed a problem in the I2C logic where the current I2C register selection could 
       have been lost by an I2C interrupt.  Added a save and restore I2C register 
       selection in interrupt handler.
10). Fixed several re-entry problems in the I2C driver which caused the GEM to hang.

V1.01
-------        
11). Changed get_NB_Data function to return data requested to the temp area or a
        location specified in parameter 2.
12). Changed SCSI interface to return NOT READY STATUS for Enclosure Status and 
        Enclosure Config requests until parameters are ready.
13). Changed firmware version numbers from version 2.00 to 1.01 for INTEL.

V1.01A4 
-----------
14). V101A4 released to Intel was labeled V101A3 in VSS.

V1.01A5
-----------
15). Changed the default configuration for the I2C port from 0 to 1.
16). Change default for FaultLightState to all LEDs off.
17). Reversed logic for FaultLightState to allow LEDs to operate normally when fault
        light state is off and just turn LED on when state is set to on.
18). Changed RdBuff to return error condition for unsupported buffer ID per spec. 
19). Fixed the check and error return for incorrect request data length in all IPMI
        functions.
20). Fixed the check and error return for invalid Safte buffer ID per spec.
21). Fixed the default to return error for unsupported or invalid Wr Buffer IDs. 
22). Corrected the data segment declaration for Sense buffers to match segment definition
        in the downloader code. This fixes incorrect sense key returns while in IPMI booter.
23). Changed Wr Buff length = 0 case to return good (per spec.) to avoid hanging SCSI Bus.
24). Fixed the Sense Error returns to match Sense, ASC, ASCQ values defined in Intel spec.
25). Fixed the Wr Buff FW Download code to return Sense, invalid command,  instead of
        setting Boot Flags.  Per Intel Spec, SCSI Firmware download is not supported
        with IPMI booter. 
26). Fixed the I2C tranfser code to prevent transfer while were are in "reset" or a 
        transition from booter or to booter.
27). Changed Error completion code for invalid sensor number to 0xCC
        (COMP_CODE_INVALID_DATA_FIELD) for
           GetFruInvAreaInfoReq,
           ReadFruInvDataReq,
           WriteFruInvDataReq,
           SetSensorHysteresis, 
           GetSensorHysteresis,
           SetSensorThreshold, 
           GetSensorThreshold, 
           SetSensorEventEnable, 
           GetSensorEventEnable, 
           GetSensorReadingReq, and 
           GetSensorEventStatus.
 28). Fixed a problem where a short command ("Invalid" for example) is process just at the
         time a new command is received, the flag that keeps track of a command pending may be
         cleared. This causes the pending command to delay until a new command is received. 
         Changed the flag to an increment/decrement type operation to insure a command isn't 
         left pending.
29). Changed the Get/Set Hysteresis, Get/Set Thresholds, and Set Event Enable to return 
        0xCD (Illegal Request) error code, if the command is illegal for given sensor, based 
        on its capabilities defined in SDR.
30). Changed Get Event Enable to return "good" with minimum data (Overall byte) if All 
        Events were disabled on the sensor.
31). Changed Set Event Enable to return "good" after setting the overall byte if All events
        are disabled.
32). Changed loop to clear any bytes in request less than max in Set Event Enable to avoid
        incorrect setting of event message bits.  Per Spec, mask bytes not included in request
        are treated as 0x00. 
33). Corrected the defined value for IPMB_GET_SENS_HYST_REQ_LENGTH to include required 
        reserved byte.
34). Changed SetSensorHysteresis and GetSensorHysteresis to return an error code of 0xCC 
        (COMP_CODE_INVALID_DATA_FIELD) for an "invalid" reserved byte in request.
35). Changed FindSensorNumber to return 'Not Found' (Invalid Sensor Number) for Reserved 
        Sensor Number.
36). Changed InitEventReqXmitSvc to initialize the event receiver to the default value
        in configuration.
37). Changed GetFirmwareCheckSum to return "good", checksum equal to zero, in the case of 
        starting address larger that ending address.
38). Changed GetFaultState to ignore sensor types other that those which have fault status
        explicitly maintained. This prevents returning an error for other sensor types defined
        in SDR.
39). Changed initialization of event receiver from POR/RESET Init time to Set Event Receiver
        command.

V1.01A6
-----------
40). Changed pre-irqhandler back to V1.00A3 version for runtime compatibility with Booter. 
        This fix along with the fix in the C-code interrupt handler fixed the busy problem 
        when executing V1.01A5 Runtime with V1.00A3 Booter.

41). Changed saving the compiler activated library function variables, from being saved in 
        the pre-irqhandler to the Common "C-code" interrupt handler.  This keeps the mirrored
        pre-irqhandler the same in runtime and booter for backwards compatibility.

V1.01A7
-----------
42). Test version

V1.01A8
-----------
43). Test version

V1.02A1
-----------
44). Changed runtime Get Device ID to get Configuration Area Revision values. 
45). Changed Get Device ID to use indexed addressing when building the response packet
        instead of a local pointer (saves about 250 bytes and 11 lib calls). 

V1.02A2
-----------
46). Corrected revision number.
47). Changed net function from 0x06 to 0x30 on: 
         Get/Set Fault State,
         Get Enclosure Configuration,
         Get Slot Status,
         Get Enclosure Status.
48). Changed completion code for an invalid IPMI command in runtime from 0xD1 to 0xC1.
49). Corrected bug in Firmware Check Sum generation that occurs when data is shorter than
        buffer length of 0xff. 
50). Changed slot power control to function per instruction from INTEL.
51). Changed to a 250-500 msec delay between device insertion and slot power being applied.



V1.03A1
-----------
52). Fixed RearmSensorEvents to rearm and generate a message whenever a new SetEventReceiver
        cmd is received.
53). Changed Event Data Bytes sent in platform message for Discrete sensor to match spec.
54). Changed initialization of the GPIO's used for Slot Power (for INTEL) to power off
        at the beginning of booter.  Then after ~250ms delay look for each slot occupied
        and activate slot power to that slot delaying 50ms between slots.
55). Changed door lock status returned to 0x01, when the door lock is not installed.
56). Fixed a problem which occurred when an incorrect odd length range checksum was requested.
57). Fixed a problem which occurred when an incorrect range checksum for requested lengths
        greater that 254 bytes.
58). Changed the code to return a 1 byte checksum when the starting address == ending address.
59). Corrected intermittant checksum error which occurred when
        starting address > ending address > 0xff18.
60). Fixed Get_FW_Data function to prevent read wrap-arounds. Also it now returns good,
        with no data, on a zero length read. 
61). Changed Get_Device_ID to use the common defined version labels.
62). Changed Read Buffer upload configuration, while in booter, from returning data to 
        returning an error based on IPMI boot code.
63). Relocated Boot jumper check, for Intel code only, to allow checksum test to run when
        Boot jumper is installed.  This provides correct POR status to a GetSelfTestResults
        command even with Boot jumper installed.
64). Added slot ids for INTEL code based on SCSI Jumper setting.
65). Added saving library declared variable(FP_L00) to stack on an interrupt.
        Variable is current not being used in our code.
66). Fixed a problem where the Diagpoll function cleared the tach registers before they 
        could be read and used by the event generation code. 
67). Changed code to get the upper and lower fan tach values from the SDR instead of from
        the configuration file.

V1.03A2
-----------
68). Changed SCSI Invalid Buffer ID error response from 05,26,02 to 05,24,00.
69). Changed unsupported SCSI command error response from 05,26,02 to 05,20,00.
70). Changed Inquiry reported firmware version from MajorMajorMinorMinor to
        Major"."MinorMinor.
71). Changed the automatic generation of events at POR and SetEventReceiver. Now sets
        compare parameters to current read values and will only generate events if a 
        change is detected.  Note: If an event is failing at POR or SetEventReceiver the
        error condition will never be generated.
72). Changed to a one time reading of temperature sensors when the disable polling 
        temperature sensors flag is active, and a request enclosure status is received.

V1.03A3
-----------
73). Fixed firmware revision returned in inquiry from MajorMajorMinorMinor to 
        Major"."MinorMinor.  Entry 110 above changed it for the SES version not the Intel
        version.
74). Changed flash fetch waitstates from 2 to 3 for SPECIAL TEST..

V1.03A4
-----------
76). Changed flash fetch waitstates from 3 back to 2, the normal configuration.
77). Changed IPMI version from 1.0 to 1.5

V1.04A1
-----------
78). Corrected a loop terminator problem that overwrote ext_reg0_Mask, which controls
        GPIOG[0-7] output, after I2C pass through operation.
79). Fixed an I2C problem caused by reading an I2C register immediately after writing
        to it.  The value read contained the old value before the update.
80). Fixed an I2C problem caused by Enabling slave access to the FIFOs during 
        W_SERVICE.  This causes the loss of the incoming message. 
81). Fixed an I2C problem where the MS_CMD_DONE disappears during a slave transaction.             
        During a slave transaction the I2CMS_CMD_DONE bit is masked away, but the interrupt
        still occurs.
82). Fixed an I2C problem caused by Setting I2CSC_I_NACK while Slave is ACKing a byte. 
        This terminates the ACK.  Setting the I2CSC_I_NACK bit will force a releasing of the
        SDA line by the core.
83). Changed Firmware Revisions returned in GetDeviceId and Inquiry from a defined
        value to the Firmware Version area in the booter or runtime header.
84). Removed extra pin assignment for device insert in default config and adjusted
        offsets for remaining entries.
85). Changed the code to update new_drvinsert to true upon new device insertion.  This bit 
        is used to update the unconfigured drive bit on a Read Slot Status request.
86). Fixed a problem with handling of multiple Device Element Type Descriptor Headers
        in the config parameter block. The index was being reset at the beginning of each
        header therefore the Device Element count was only the count of the last Device 
        Element group.
87). Fixed a problem with the GLOBAL_FAIL_TOOR bit.  It was being incorrectly cleared
        when multiple Type Descriptor Headers for temperature sensor elements were defined
        in the configuration block.

V1.04A2
-----------
88). Fixed a problem with the SDRR search routine which caused an error in tach status
         reporting in configurations other than the default configuration.
89). Fixed a problem where the sensors with thresholds were being processed correctly 
        if the SDRR for the sensor did not exist.  Now defaults thresholds to MIN and MAX
        if no SDRR exists and returns an IPMI error code if sensor parameters are requested.
90). Fixed a problem with an index pointer into the SDRR table when the sensor numbers 
        were not sequencial.
91). Fixed a problem with runtime inquiry reporting the firmware version from the Intel
        header instead of the Qlogic header.
92). Fixed a problem where an error code returned from the MasterWriteReadI2C function
        was the result of a logical expression instead of an assigned value.		
93). Added support for Sensor type 0x04, ER Type 0x06 (Fans with a Fan Fail Indicator).
94). Fixed a bug where the global alarm was being toggled with disk fault.  Now is just
        on with disk fault.
95). Fixed a problem with the temperature sensor logic which caused a lockup if no 
        temperature sensors were assigned.  This problem also occurred with no devices
        assigned.

V1.04A3
-----------
96). Fixed a problem which caused the firmware to stay in booter if the number of 
        devices were less than or more than 6. This test was originally put in to keep slot
        power active when going from runtime to booter.

V1.05A1
-----------
97). Fixed a problem where the GetSensorReading command would not get valid temperature
        data if the disable polling flag was set.  Now reads the temperature sensor once after
        receiving the command.
98). Corrected Event Message Enable Bit handling for sensors with Global Disable Only
        capability. Now is set/cleared at Init time or from the SetEventReceiver command
        based on a valid or invalid Event Receiver ID.
 99). Fixed a problem with the SensorTriggeredThresholdEvent generation which caused 
         incorrect handling of Low-Going Upper Assertions & Lower Deassertions and High-Going
	 Lower Assertions & Upper deassertions when all bits in the AEM/DEM are set.
100). Fixed a problem with the GetSensorEventEnable command for Threshold sensors. The 
          upper nibble returned 0x7? instead of 0x0?.
101). Corrected the initialization of Enable All Messages and Enable Sensor Scan from
          the Enable/Disable state info of the sensor SDR.
102). Fixed a problem where the watchdog timer caused the Gem to locks up when a large 
          configuration is loaded and the Gem begins POR sequence. 
103). Fixed a problem where the alarm was being turned off in response to an absence of 
          drive fault condition when the alarm is muted.
104). Added check of IPMI UTRM/LTRM for Temperature and Tachometer sensors to verify 
          existance of a valid IPMI Critical threshold before using it for the Saf_Te 
          threshold.  If no valid critical threshold is available, Saf_Te threshold is set to 
          Max or Min to avoid false falures.
105). Fixed a problem where the SCSI SEL was not being handled correctly which caused the
           Gem to ignore SCSI processing.
106). Fixed a problem where the Prep For Operation returned an Incorrect Get Sensor Reading
          Status.
107). Fixed a problem where No Unconfigured Drive Offset was Received in Get Sensor Reading 
          Status.
109). Fixed a problem where Get Sensor Event Enable Status returned incorrect values for 
          Threshold Based Sensors.
110). Fixed a problem where the Initial Update in Progress bit not being cleared after read 
          of the sensor.

V1.05A2
-----------
111). Fixed a problem where the SCSI I/O control signal was randomly active during the 
          selection process which some controllers assumed we are in a reselect state.
112). Added NMI interrupt handler for watchdog handling in banked code memory.  Ocassionally 
          if the watchdog timed out the gem would lockup or reset.
113). Added reset of NMI bit(caused by a watchdog timeout) in interrupt handler.  This 
          caused a multiple resets if watchdog expired.
114). Fixed a problem where the interrupts were enabled before the correct runtime interrupt
          vector was hooked.  This occasionally caused gem to lockup after reset.
115). Changed the Read Slot Status function to return the No Error bit of byte zero as set by
          user regardless of the state of the other bits.  This is required for compatability 
          with some RAID controllers.
116). Changed the Write Slot Status function to set the No Error bit of byte zero as defined
           by the sent data regardless of the state of the other bits.  This is required for 
           compatability with some RAID controllers.
117). Changed the SetEventReciever, GetSensorReading, GetSensorEventEnable, and 
          RearmSensorEvents handlers to improve performance and avoid intermittent watchdog 
          time-outs.
118). Fixed a problem where the Global alarm activated by a set_drive_fault did not 
          deactivate when the drive fault was removed.
119). Changed the additional sense data returned for sense Not Ready from 
          ASC = 35 ASCQ = 02 to ASC = 00 ASCQ = 00, per spec.
120). Changed the status response logic to return currently stored values if a status
          is requested immediately after an update request which may not have completed.
          Previously a SCSI Not Ready was sent until the update request had completed.
121). Fixed a problem where a search pointer was not being reset correctly which prevented
          subsequent sensor re-arms and initial event generation after the first re-arm.
122). Fixed a problem where the GEM would lock up, under heavy I2C requests, during reset.
          The WatchDog timer intemittently expired during initialization and caused a re-entrant
          condition and the return path was lost.  This is not seen in V1.05A1 because the 
          Watchdog was activated after all initialization was completed.  

V1.06A1
-----------
123). Fixed a problem with initialization of the SAF-TE NO ERROR flag. Now set by the Write
          Slot Status command.  The Read Slot Status command returns the set condition stored.
124). Fixed a problem with event generation logic where all descrete assertion/deassertion 
          events were not being generated.  Now generates assertion/deassertion events based on 
          sensor conditions and the masks.
125). Changed SCSI ASCQ sense returned for invalid Slot ID to 02.

V1.06A3
-----------
126). Reverted booter FW revision from 1.06A3 to 1.06A2.

V1.06B1
-----------
127). Reversed the sequence of the Configuration revision and Boot FW revision reported in 
          the extended ID data of a Get Device ID response so that the Boot FW revision is 
          reported first (in bytes 13 and 14) followed by the Configuration revision (in bytes 
          15 and 16.)
V1.07A1
-----------
128). Fixed a problem with the global alarm blinking repeatedly instead of toggling once 
          on drive swap.
129). Fixed a problem Global Only capable IPMI sensors refusing a Set Sensor Event Enable 
           command which is attempting to modify only the sensor scaning enable/disable of the
           sensor.
130). Fixed a problem with the incorrect Event Code Offset being reported in Events
           generated for Fan Performance type sensors.
131). Fixed a problem in the SCSI handler. The SCSI Bus Reset status flag was being read
           in the data transfer loops after it had been cleared in the interrupt handler.  This
           caused the data transfer loop to continue waiting for data after a bus reset occurred.
132). Fixed a problem with the GEM locking up, instead of remaining in booter, after 
           downloading a bad configuration with a mismatch between the SDRR and the Sensor Map.
133). Fixed a problem with the GEM returning less than the requested number of bytes in
           response to a Read Buffer SAF-TE command  or less than 63 bytes in response to a Read
           Enclosure Configuration command.    

V1.07A1.1
--------------
134). Fixed a problem with Read Buffer, Enclosure Configuration returning 63 bytes instead 
           of 64 bytes.

V1.07A1.2
-------------
135). Fixed a problem with the GEM hanging the SCSI bus after a Read Buffer command with
          a transfer length greater than 1024 bytes requested.

V1.08A1
-----------
136). Added ScsiSelect function to check for SCSI reset while interrupts are disabled.
137). Added check for I2C NACK in I2C read/write wait timeout loops to shorten the wait 
          delays.
138). Changed algorithm in SensorTriggeredThresholdEvent to correctly assert neg going 
           events at reading = threshold, and handle deassertions at < or > threshold.
139). Fixed a problem in SCSI handler where ATN & ACK occurring together during data 
           transfer phase was not working correctly.
140). Fixed a problem in enclosure configuration response. Now returns the value in 3 bits
           instead of 4 bits. 
141). Changed MonitorNextSensor and SensorTriggeredThresholdEvent to reset individual 
           event status and so regenerate event on next pass and avoid losing the event in
           the case of event Queue full.
142.) Changed initial setting of Get Sensor Event Status return in byte 2 from "|=" to
           "=" to fix incorrect event status returned.
143). Change startup to set Slave ID to FEh at POR to force NACK of external masters 
           until initialization is complete.
144). Changed polling of Temperature Sensors to poll sensor one time in each polling 
           loop.  Previously would retry a sensor 5 times, if it received no response, before
           going to next sensor in loop.   

  

V1.08A2
-----------
145). Fixed a problem with an incoming IPMI slave message being ignored while both I2c ports 
           are receiving slave messages simultaneously.
146). Fixed a problem with the I2C bus check operation in which the I2C port being checked is 
           switched from the idle port to the other port while the other port has an operation in 
           progress.
147). Changed Booter to respond to IPMI Get Device ID command with Product ID value kept in  
           the Boot header. 
148). Changed SMB supporting Runtime Image to be backward compatible with booter version
           1.06A2.

149). Fixed an issue with I2C port intermittently returning only busy responses to all SMB 
           commands.
150). Fixed an issue with SMB Firmware Program not failing write of 1 byte oversize.
151). Changed Set Event Enable to ignore IPMI command length and reject invalid command 
            based on attempted operation as defined by overall status byte sent and sensor 
            capabilities defined.
152). Fixed an issue with Event Receiver and Event Generator being incorrectly initialized 
            from configuration.
153). Fixed an issue with IPMI Sensor Capabilities being initialized incorrectly after the 
            event receiver is set.
154). Fixed an issue with stale event being generated on first status change following 
            initialization with sensor reading in non-nominal range.
155). Fixed an issue with Temperature sensor handling if number of direct I2C pins defined 
            is greater that number of temperature sensors defined in Type Descriptor Headers.

V1.09A2
-----------
156). Reversed the byte order of the Product_ID value returned with the GetDeviceID in Booter.
157). Changed the returned completion code for a flash write/erase failure from returning 
           a "0" completion code with "0" bytes written to defined error codes with "0" bytes
           written. 

V1.09A3
-----------
158). Changed the completion code for a flash write/erase to Booter from returning 
           a good completion code with the number of bytes written -- to the defined flash error
           codes with "0" bytes written.  Previously the firmware checked for the boot segment 
           and address range and skipped the flash write process and reported good completion code.
159). Modified runtime code to shorten the amount of time the processor was executing with
           interrupts disabled. (found a place where interrupts were disabled for approx. 42ms
           which occasionally caused the SMBus I2C port to be inactive greater than the 25ms 
           timeout required by the SMBus protocol which would lock up the I2C bus.

V1.09A4
-----------
160). Fixed a problem with the F/W update function which required the address passed in the 
           download packet to be segment 0 offset 0x1000 to cause an erase of the runtime flash
           and segment 1 offset 0x8000 or 0xA000 to cause an erase of the 2 parameter blocks.
           Now the erase for the 2 parameter blocks will occurr when a byte of data is written
           to segment 1 offset 0x8000 or 0xA000 (with the flash in program mode and VPP enabled)
           even if the packet address was less than the 0x8000 or 0xA000.
           eg. packet address 0x7FFx or 0x9FFx with 24 bytes to write to flash. This will also
                cause an erase of runtime code if a write to segment 0 offset 0x1000 with the flash
                in program mode and VPP enabled. Item #40.
161). Fixed a problem where the response data returned from a Get Sensor Status command was
           returning "F5" (should have been "1A") after a FURSDR utility was executed.  This "F5"
           was used to indicate an error where the temperature sensors had not been read.  Now
           returns a completion code of "CE".  A retry of the command should return good data.
           Item #41  This problem was not duplicated on a Intel hardware.

V1.09A5
-----------
162). Changed POR/RESET logic to Initialize the Power Supply State to a Default condition 
           after waiting 5 seconds if a Set Power Supply State command is not received.  
           Previously waited for the Set Power Supply command before the normal SCSI commands
           were processed.
163). Changed the response to "0xCE" for I2C Enclosure Status and Enclosure Configuration
           commands received before the Set Power Supply State command was received or the Default
           timeout occurred.
164). Changed the event generation initial state to use values from the NOMINAL byte in Full
           SDRR and OEM byte in compact SDRR to prevent generating an event message and/or event
           status on the first reading of the sensor unless the sensor was out of range.
 165). Changed a count used for detection of a byte wrap in the firmware update function. 
            This would cause a problem with odd numbered byte packets being downloaded over a flash
             erase boundry.  This problem was only produced with with our test tools, it did not 
             occur with the FWPIAUPD Utility using the various packet sizes allowed. 

V1.10A1
-----------
166). Changed IPMI completion code responses to synchronize with responses from the Gem424.
167). Fixed a problem where the I2C clock speed was not correctly selected from the config 
           file entry.

V1.10A2
-----------
168). Fixed a problem where the GEM359 stopped reading the LM75 temperature sensor after 
            responding to an IPMI Read FRU Inventory Data command with a FRU Inventory Offset
            LSB other than zero.

V1.10A3
-----------
169). Fixed a problem where Get Slot Status returned wrong data in byte 4 of the response
           when an inserted drive was removed.
170). Fixed a problem in the event generation logic where an event was being transmitted
           multiple times in certain cases.

V1.10A4
-----------
171). Fixed a problem where event generation logic missed sending a deassertion of a
           non-critical event when the deassertion of a critical and non critical event 
           occurred at the same sampling time.

V1.10A5
-----------
172). Fixed a problem where slot power enable control flag was not being set after reset 
           in runtime.  This caused slot power state to remain in the hardcoded
           (not configuration) state.


V1.10A6   -  TEST VERSION
-----------
173). Fixed SetPowerSupplyState command to allow power supply state to be updated more than
           just at Init time, if power supplies do not have input status pins assigned.
174). Changed runtime Inquiry response to return firmware version from Qlogic runtime header
           firmware version parameters instead of the Intel runtime header firmware version 
           parameter.

V1.10A7
-----------
175). Fixed a problem with an I2C Read only(not a MasterWrite/Read) which caused the 
           firmware to allocate all buffers and not release them.  This particular condition 
           was prevelant when the command was a 1 byte Read.  The driver would allocate a 
            buffer and wait for more info which it didn't receive.  The next read would  
            allocate the alternate buffer or return a busy if alternate buffer was unavailable. 
           Without the buffer aging feature (not enough memory to implement) the buffers would 
           remain allocated and the Gem would appear to be locked up I2C wise.  The Gem 
           firmware does not support I2C Read only commands. 
           NOTE: This fix changes both Boot and Runtime code, but under normal conditions
                         the I2C read only command(which the Gem firmware does not support)
                         should not be executed while in booter so it should not affect backward
                         compatibility.

V1.11A1
-----------
176).  Changed version from V1.10A7 to V1.11A1 because of  changes to Booter.

----------------------
AREAS TESTED
----------------------

Note: The following tests were performed as individual commands, using an Iport I2C Device
      connected to an I2C port, used as the SMBus port, on the Gem359 Evaluation board. These
      tests were performed while in Booter and Runtime. Over and under size limits are also
         checked.

1).   Issued SMBus Block Write commands followed by SMBus Block Read Data Status commands 
         for all the defined Gem359 SMBus commands and verified returned status.

2).   Issued invalid SMBus Block Write commands followed by SMBus Block Read Data Status 
         commands and verified returned status.

3).   Issued all defined Gem359 IPMI commands and verified returned status.

4).   Issued invalid IPMI commands and verified returned statuses.

5).   Issued SCSI SAF-TE commands and verified returned results. 

6).   Verified Event Generation.

7).   Downloaded a complete configuration parameters using the Intel Specific IPMI format
          protocol.

8).   SMBus protocol using the Intel Box ICHx controller and the Gem359 board with the
         FWPIAUPD 16 byte utility.

9).   Downloaded OP code and configuration using the new AMD Flash Device and algorithm.

--------------------------
AREAS UNTESTED
--------------------------


----------------------
KNOWN ISSUES
----------------------
1).  An incorrect I2CMAP element index in the config parameters causes the GEM to lockup.

=========================================================================
Copyright(c) 2002-2005 QLogic Corporation.  All rights reserved.

[END]