summaryrefslogtreecommitdiffstats
path: root/src/usr/ipmi
diff options
context:
space:
mode:
authorMatt Derksen <mderkse1@us.ibm.com>2017-08-15 16:44:36 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-09-01 09:38:11 -0400
commit3d4caf24f7e90f183f93cbcb915470f7205bb7f4 (patch)
tree2dfba534dc100960f8d4a40d9fbbfef9ff832b61 /src/usr/ipmi
parent7b2191a74ffc3b431c9ddb6c75b0fefc7f20d133 (diff)
downloadblackbird-hostboot-3d4caf24f7e90f183f93cbcb915470f7205bb7f4.tar.gz
blackbird-hostboot-3d4caf24f7e90f183f93cbcb915470f7205bb7f4.zip
Added Error log support for new GPU sensors
Change-Id: I8a0de390516fd02df07860b960db506899b13f14 RTC:178218 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45116 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/ipmi')
-rw-r--r--src/usr/ipmi/ipmiconfiglookup.C83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/usr/ipmi/ipmiconfiglookup.C b/src/usr/ipmi/ipmiconfiglookup.C
index 0cea60a55..ee2eb85eb 100644
--- a/src/usr/ipmi/ipmiconfiglookup.C
+++ b/src/usr/ipmi/ipmiconfiglookup.C
@@ -92,6 +92,76 @@ bool IpmiConfigLookup::lookupIPMISensorInfo(TARGETING::Target * i_target,
}
+//-----------------------------------------------------------------------------
+// Private method used to lookup sensor information from the GPU_SENSORS
+// array attribute of the i_target parameter.
+//
+// Returns true if the sensor was found, false otherwise.
+//-----------------------------------------------------------------------------
+bool IpmiConfigLookup::lookupGPUSensorInfo(TARGETING::Target * i_target,
+ uint32_t i_sensorNumber,
+ uint8_t& o_sensorType,
+ uint8_t& o_entityId,
+ TARGETING::SENSOR_NAME& o_sensorName
+ )
+{
+ using GPU_ARRAY_ELEMENT = uint16_t[7];
+ bool l_result{false};
+
+ assert(nullptr != i_target);
+ assert(TARGETING::UTIL::INVALID_IPMI_SENSOR != i_sensorNumber);
+
+ // Get the GPU_SENSORS array attribute from i_target
+ TARGETING::AttributeTraits<TARGETING::ATTR_GPU_SENSORS>::Type
+ l_sensorArray;
+ if(!i_target->tryGetAttr<TARGETING::ATTR_GPU_SENSORS>(l_sensorArray))
+ {
+ return l_result;
+ }
+
+ //Search the sensor array for the desired sensor
+ uint32_t elementCount = (sizeof(l_sensorArray)/sizeof(l_sensorArray[0]));
+ const GPU_ARRAY_ELEMENT * begin = &l_sensorArray[0];
+ const GPU_ARRAY_ELEMENT * end = &l_sensorArray[elementCount];
+ const GPU_ARRAY_ELEMENT * itr{nullptr};
+
+ itr = std::find_if(begin,
+ end,
+ [i_sensorNumber] (const GPU_ARRAY_ELEMENT& a)
+ {
+ return (
+ (a[TARGETING::GPU_SENSOR_ARRAY_FUNC_ID_OFFSET] == i_sensorNumber) ||
+ (a[TARGETING::GPU_SENSOR_ARRAY_TEMP_ID_OFFSET] == i_sensorNumber) ||
+ (a[TARGETING::GPU_SENSOR_ARRAY_MEM_TEMP_ID_OFFSET] == i_sensorNumber));
+ }
+ );
+
+ if(itr != end)
+ {
+ l_result = true;
+ uint16_t l_sensorName;
+ if (*itr[TARGETING::GPU_SENSOR_ARRAY_FUNC_ID_OFFSET] == i_sensorNumber)
+ {
+ l_sensorName = *itr[TARGETING::GPU_SENSOR_ARRAY_FUNC_OFFSET];
+ }
+ else if
+ (*itr[TARGETING::GPU_SENSOR_ARRAY_TEMP_ID_OFFSET] == i_sensorNumber)
+ {
+ l_sensorName = *itr[TARGETING::GPU_SENSOR_ARRAY_TEMP_ID_OFFSET];
+ }
+ else
+ {
+ l_sensorName = *itr[TARGETING::GPU_SENSOR_ARRAY_MEM_TEMP_ID_OFFSET];
+ }
+
+ o_sensorName = static_cast<TARGETING::SENSOR_NAME>(l_sensorName);
+ o_sensorType = static_cast<uint8_t>((l_sensorName >> 8) & 0x00FF);
+ o_entityId = static_cast<uint8_t>(l_sensorName & 0x00FF);
+ }
+
+ return l_result;
+}
+
//--------------------------------------------------------------------------
//Given a sensor number, lookup and parse SENSOR_NAME into SENSOR_TYPE
//and ENTITY_ID values.
@@ -150,6 +220,19 @@ bool IpmiConfigLookup::getIPMISensorInfo(uint32_t i_sensorNumber,
break;
}
}
+ else if (doesTargetHaveGPUSensorsAttr(*itr))
+ {
+ l_result = lookupGPUSensorInfo((*itr),
+ i_sensorNumber,
+ l_sensorType,
+ l_entityId,
+ l_sensorName);
+ if (l_result)
+ {
+ break;
+ }
+
+ }
}
}
OpenPOWER on IntegriCloud