summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndres Lugo-Reyes <aalugore@us.ibm.com>2016-03-10 15:26:44 -0600
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2016-03-21 15:31:13 -0400
commit9b188cdec934275ce65eab3ade91398fdec4ddb9 (patch)
treecd6d670163fd54079ca5ee1a7501e4fee0c729ec /src
parentb25d5773b2ee0d7da771b21584046a4cf17581dc (diff)
downloadblackbird-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.H3
-rw-r--r--src/include/usr/ipmi/ipmisensor.H15
-rw-r--r--src/usr/ipmi/ipmisensor.C39
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()
OpenPOWER on IntegriCloud