diff options
| author | Andres Lugo-Reyes <aalugore@us.ibm.com> | 2016-03-10 15:26:44 -0600 |
|---|---|---|
| committer | William G. Hoffa <wghoffa@us.ibm.com> | 2016-03-21 15:31:13 -0400 |
| commit | 9b188cdec934275ce65eab3ade91398fdec4ddb9 (patch) | |
| tree | cd6d670163fd54079ca5ee1a7501e4fee0c729ec /src | |
| parent | b25d5773b2ee0d7da771b21584046a4cf17581dc (diff) | |
| download | blackbird-hostboot-9b188cdec934275ce65eab3ade91398fdec4ddb9.tar.gz blackbird-hostboot-9b188cdec934275ce65eab3ade91398fdec4ddb9.zip | |
Sending Firmware progress sensor is now synchronous
Change-Id: I22dc54cc4472958aec35a23d91740106be0be928
CQ:SW336181
ForwardPort:yes
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/21902
Tested-by: Jenkins Server
Reviewed-by: Prachi Gupta <pragupta@us.ibm.com>
Reviewed-by: Richard J. Knight <rjknight@us.ibm.com>
Tested-by: Jenkins OP Build CI
Tested-by: Jenkins OP HW
Reviewed-by: Jay M. Azurin <jmazurin@us.ibm.com>
Tested-by: FSP CI Jenkins
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/22300
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/usr/ipmi/ipmi_reasoncodes.H | 3 | ||||
| -rw-r--r-- | src/include/usr/ipmi/ipmisensor.H | 15 | ||||
| -rw-r--r-- | src/usr/ipmi/ipmisensor.C | 39 |
3 files changed, 55 insertions, 2 deletions
diff --git a/src/include/usr/ipmi/ipmi_reasoncodes.H b/src/include/usr/ipmi/ipmi_reasoncodes.H index e0d01146f..1717619e5 100644 --- a/src/include/usr/ipmi/ipmi_reasoncodes.H +++ b/src/include/usr/ipmi/ipmi_reasoncodes.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014,2015 */ +/* Contributors Listed Below - COPYRIGHT 2014,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -37,6 +37,7 @@ namespace IPMI MOD_IPMIDCMI = 0x04, // IPMI::sensor MOD_IPMIRT = 0x05, // rt IPMI::send/IPMI::sendrecv MOD_IPMISRV_POSTEVENT = 0x06, // IpmiRP::postEvent + MOD_IPMI_PROG_SENSOR = 0x07, // IPMI::FirmwareProgressSensor }; enum IPMIReasonCode diff --git a/src/include/usr/ipmi/ipmisensor.H b/src/include/usr/ipmi/ipmisensor.H index 9f57d4ded..f82a3aaf1 100644 --- a/src/include/usr/ipmi/ipmisensor.H +++ b/src/include/usr/ipmi/ipmisensor.H @@ -376,7 +376,7 @@ namespace SENSOR * @return Errorlog handle * */ - errlHndl_t sendSetSensorReading( + virtual errlHndl_t sendSetSensorReading( setSensorReadingRequest * i_data); /** @@ -495,6 +495,19 @@ namespace SENSOR errlHndl_t setBootProgressPhase( INITSERVICE::firmwareProgressPhase i_phase); + + /** + * + * @brief Synchronous implementation of sendSetSensor Reading used for + * avoiding a race condition. + * + * @param[in] i_data - the ipmi message data + * + * @return Errorlog handle + */ + errlHndl_t sendSetSensorReading( + setSensorReadingRequest * i_data ); + private: // @enum firmwareProgressOfsets // diff --git a/src/usr/ipmi/ipmisensor.C b/src/usr/ipmi/ipmisensor.C index 4aa1c9f4b..d4eb6560f 100644 --- a/src/usr/ipmi/ipmisensor.C +++ b/src/usr/ipmi/ipmisensor.C @@ -540,6 +540,45 @@ namespace SENSOR }; // + // sendSetSensorReading + // + errlHndl_t FirmwareProgressSensor::sendSetSensorReading( + setSensorReadingRequest * i_data ) + { + size_t l_len = sizeof( setSensorReadingRequest ); + IPMI::completion_code cc = IPMI::CC_UNKBAD; + + //i_data will hold the response when this returns + errlHndl_t l_err = sendrecv(IPMI::set_sensor_reading(), + cc, + l_len, + (uint8_t*&)i_data ); + // If no error, check completion code + if( (l_err == NULL) && (cc != IPMI::CC_OK) ) + { + TRACFCOMP(g_trac_ipmi, "bad completion code from BMC=0x%x",cc); + + /*@ + * @errortype ERRL_SEV_INFORMATIONAL + * @moduleid IPMI::MOD_IPMI_PROG_SENSOR + * @reasoncode IPMI::RC_SET_SENSOR_FAILURE + * @userdata1 BMC IPMI Completion code. + * @devdesc Request to set the firmware progress + * sensor failed. + */ + l_err = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_INFORMATIONAL, + IPMI::MOD_IPMI_PROG_SENSOR, + IPMI::RC_SET_SENSOR_FAILURE, + static_cast<uint64_t>(cc), + 0, + true ); + l_err->collectTrace(IPMI_COMP_NAME); + } + return l_err; + } + + // // RebootCountSensor constructor - uses system target // RebootCountSensor::RebootCountSensor() |

