summaryrefslogtreecommitdiffstats
path: root/src/usr/ipmi
diff options
context:
space:
mode:
authorMatt Derksen <mderkse1@us.ibm.com>2017-12-14 11:52:15 -0600
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2017-12-21 16:51:42 -0500
commit6141805efc9ca2e9109ca29c837ee3f51d63b141 (patch)
treede6945f3e0ee156a152a9829467bb8cf09199c8a /src/usr/ipmi
parent25cb28c5a6cf36e77719a1ae3e8bd142e09cd491 (diff)
downloadtalos-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.C79
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
OpenPOWER on IntegriCloud