diff options
author | Matt Derksen <mderkse1@us.ibm.com> | 2017-12-14 11:52:15 -0600 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2017-12-21 16:51:42 -0500 |
commit | 6141805efc9ca2e9109ca29c837ee3f51d63b141 (patch) | |
tree | de6945f3e0ee156a152a9829467bb8cf09199c8a /src/usr/ipmi | |
parent | 25cb28c5a6cf36e77719a1ae3e8bd142e09cd491 (diff) | |
download | talos-hostboot-6141805efc9ca2e9109ca29c837ee3f51d63b141.tar.gz talos-hostboot-6141805efc9ca2e9109ca29c837ee3f51d63b141.zip |
Add HB_VOLATILE sensor so OpenBMC can mark volatile sections
Set sensor to 1 to tell OpenBMC code to allow hostboot
volatile section to be cleared.
RTC: 180772
Change-Id: Id63e3ae8a24facd5e01e8bf94688a60f066ba838
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/51101
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Martin Gloff <mgloff@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/ipmi')
-rw-r--r-- | src/usr/ipmi/ipmisensor.C | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/usr/ipmi/ipmisensor.C b/src/usr/ipmi/ipmisensor.C index 5eb850c6a..fadb65e05 100644 --- a/src/usr/ipmi/ipmisensor.C +++ b/src/usr/ipmi/ipmisensor.C @@ -1679,4 +1679,83 @@ namespace SENSOR } // end of GPU loop } // end of if check for non-default values } // end of updateGpuSensorStatus() + + + // + // HbVolatileSensor constructor - uses system target + // + HbVolatileSensor::HbVolatileSensor() + :SensorBase(TARGETING::SENSOR_NAME_HB_VOLATILE, NULL) + { + // message buffer created and initialized in base object. + } + + // + // HbVolatileSensor destructor + // + HbVolatileSensor::~HbVolatileSensor(){}; + + // + // setHbVolatile - tell BMC to make hostboot volatile memory + // (volatile(1) or not(0)) + // + errlHndl_t HbVolatileSensor::setHbVolatile( hbVolatileSetting i_setting ) + { + // adjust the operation to overwrite the sensor reading + // to the value we send. + iv_msg->iv_operation = SET_SENSOR_VALUE_OPERATION; + + // the HB_VOLATILE Sensor is defined as a discrete sensor + // but the assertion bytes are being used to transfer the state + iv_msg->iv_assertion_mask = le16toh(i_setting); + + TRACFCOMP(g_trac_ipmi,"HbVolatileSensor::setHbVolatile(%d)", + i_setting); + + return writeSensorData(); + } + + // + // getHbVolatile - get the HB volatile memory setting from the BMC + // + errlHndl_t HbVolatileSensor::getHbVolatile( hbVolatileSetting &o_setting ) + { + // the HB_VOLATILE sensor is defined as a discrete sensor + getSensorReadingData l_data; + + errlHndl_t l_err = readSensorData( l_data ); + + if( l_err == nullptr ) + { + // check if in valid range of hbVolatileSetting enums + if (l_data.event_status <= ENABLE_VOLATILE) + { + o_setting = static_cast<hbVolatileSetting>(l_data.event_status); + } + else + { + TRACFCOMP(g_trac_ipmi,"Unknown hb volatile setting: %d", + l_data.event_status); + + /*@ + * @errortype ERRL_SEV_UNRECOVERABLE + * @moduleid IPMI::MOD_IPMISENSOR_HBVOLATILE + * @reasoncode IPMI::RC_INVALID_SENSOR_SETTING + * @userdata1 Invalid hb volatile control setting + * @userdata2 <unused> + * @devdesc The sensor returned an invalid setting + * @custdesc Unable to find a valid sensor setting. + */ + l_err = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, + IPMI::MOD_IPMISENSOR_HBVOLATILE, + IPMI::RC_INVALID_SENSOR_SETTING, + l_data.event_status, + 0, + false); + } + } + return l_err; + } + }; // end name space |