summaryrefslogtreecommitdiffstats
path: root/src/usr/ipmi
diff options
context:
space:
mode:
authorElizabeth Liner <eliner@us.ibm.com>2016-02-09 22:47:21 -0600
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2016-03-02 17:43:21 -0500
commit94175505c5f2e5a699c25ee84398e043655837fd (patch)
treecf3085b3d21000c5029216527a8bbc96def5e2d6 /src/usr/ipmi
parent878a49592e2ebd9513d728b1c88765f5d7073837 (diff)
downloadtalos-hostboot-94175505c5f2e5a699c25ee84398e043655837fd.tar.gz
talos-hostboot-94175505c5f2e5a699c25ee84398e043655837fd.zip
Adding chip DD/EC levels to FRU inventory
Change-Id: Ibed8e8ed630db69d20778e1a9b21b6becd307f7a RTC:124665 ForwardPort: yes Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/20669 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: Richard J. Knight <rjknight@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/21616
Diffstat (limited to 'src/usr/ipmi')
-rw-r--r--src/usr/ipmi/ipmifruinv.C56
-rw-r--r--src/usr/ipmi/ipmifruinvprvt.H15
2 files changed, 61 insertions, 10 deletions
diff --git a/src/usr/ipmi/ipmifruinv.C b/src/usr/ipmi/ipmifruinv.C
index 152c72e8b..720b979a1 100644
--- a/src/usr/ipmi/ipmifruinv.C
+++ b/src/usr/ipmi/ipmifruinv.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014,2015 */
+/* Contributors Listed Below - COPYRIGHT 2014,2016 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -42,7 +42,6 @@
extern trace_desc_t * g_trac_ipmi;
-
/**
* @brief Compairs two pairs - used for std:sort
* @param[in] lhs - left pair for comparison
@@ -581,20 +580,39 @@ errlHndl_t procIpmiFruInv::buildBoardInfoArea(std::vector<uint8_t> &io_data)
//Push Fru File ID Byte - NULL
io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
+ //Get EC Data
+ TARGETING::ATTR_EC_type ecInfo;
+ bool getEC = iv_target->tryGetAttr<TARGETING::ATTR_EC>(ecInfo);
+
//Get ECID Data
TARGETING::ATTR_ECID_type ecidInfo;
bool getEcid = iv_target->tryGetAttr<TARGETING::ATTR_ECID>(ecidInfo);
+
//Only add ECID Data if in an update scenario
if (getEcid && iv_isUpdate == true)
{
addEcidData(iv_target, ecidInfo, io_data);
}
- else
+ //Add in the EC Data whether we're in an update scenario or not.
+ //We have the EC info after discover_targets()
+ if (getEC)
+ {
+ addECData(iv_target, ecInfo, io_data);
+ }
+
+ if(!getEC && !(getEcid && iv_isUpdate))
{
- //Indicate no custom fields if ecid data not found
+ //Indicate no custom fields if ecid and ec data not found
io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
}
+ if (iv_isUpdate == true)
+ {
+ std::vector<TARGETING::TargetHandle_t> l_procList;
+ l_procList.push_back(iv_target);
+ customData(l_procList, io_data);
+ }
+
//Indicate end of custom fields
io_data.push_back(IPMIFRUINV::END_OF_CUSTOM_FIELDS);
@@ -1134,7 +1152,7 @@ errlHndl_t membufIpmiFruInv::buildBoardInfoArea(
//Only set the ECID Data during an update scenario
if (iv_isUpdate == true)
{
- customEcidData (iv_extraTargets, io_data);
+ customData (iv_extraTargets, io_data);
}
//Indicate End of Custom Fields
@@ -1186,7 +1204,7 @@ errlHndl_t membufIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
return l_errl;
}
//##############################################################################
-void IpmiFruInv::customEcidData(TARGETING::TargetHandleList i_extraTargets,
+void IpmiFruInv::customData(TARGETING::TargetHandleList i_extraTargets,
std::vector<uint8_t> &io_data)
{
@@ -1200,7 +1218,7 @@ void IpmiFruInv::customEcidData(TARGETING::TargetHandleList i_extraTargets,
{
TARGETING::TargetHandle_t l_extraTarget = *extraTargets_it;
- //Only set the ECID Data during an update scenario
+ //If we're in an update and the target is a membuf, we update the ecid.
if ( l_extraTarget->getAttr<TARGETING::ATTR_TYPE>() ==
TARGETING::TYPE_MEMBUF)
{
@@ -1253,6 +1271,30 @@ void IpmiFruInv::addEcidData(const TARGETING::TargetHandle_t& i_target,
return;
}
+void IpmiFruInv::addECData(const TARGETING::TargetHandle_t& i_target,
+ const TARGETING::ATTR_EC_type& i_ecInfo,
+ std::vector<uint8_t> &io_data)
+{
+ // Create Custom EC Field
+ // - First put in 'EC:' to make it obvious what this is
+ uint8_t l_data[] = {IPMIFRUINV::TYPELENGTH_BYTE_ASCII + 5,'E','C',':'};
+
+ // @todo-RTC:124687 - Refactor multiple reallocations
+ io_data.insert( io_data.end(),
+ &l_data[0],
+ &l_data[0] + (uint8_t(sizeof(l_data) / sizeof(uint8_t))));
+
+ CPPASSERT(sizeof(ATTR_EC_type) == 1);
+ CPPASSERT((sizeof(i_ecInfo) / sizeof(ATTR_EC_type)) == 1);
+
+ char l_ecAscii[3];
+ sprintf(l_ecAscii,"%X",i_ecInfo);
+
+ io_data.insert(io_data.end(), &l_ecAscii[0],&l_ecAscii[2]);
+
+ return;
+}
+
errlHndl_t IpmiFruInv::addCommonVpdData(
const TARGETING::TargetHandle_t& i_target,
std::vector<uint8_t> &io_data,
diff --git a/src/usr/ipmi/ipmifruinvprvt.H b/src/usr/ipmi/ipmifruinvprvt.H
index cc036f854..0075d9094 100644
--- a/src/usr/ipmi/ipmifruinvprvt.H
+++ b/src/usr/ipmi/ipmifruinvprvt.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014,2015 */
+/* Contributors Listed Below - COPYRIGHT 2014,2016 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -187,12 +187,21 @@ class IpmiFruInv
std::vector<uint8_t> &io_data);
/**
- * @brief Adds Ecid attribute data from extra targets as custom data
+ * @brief Adds EC attribute data
+ * @param[in] target, The target to get the Sensor Number from
+ * @param[in] ecInfo, The EC attribute data
+ * @param[in/out] data, The container to put EC attribute data in
+ */
+ void addECData(const TARGETING::TargetHandle_t& i_target,
+ const TARGETING::ATTR_EC_type& i_ecInfo,
+ std::vector<uint8_t> &io_data);
+ /**
+ * @brief Adds Ecid and EC attribute data from extra targets as custom data
* @param[in] TargetHandleList, Handle to list of extra
* targets associated with this FRU Record
* @param[in/out] data, The container to put ECID attribute data in
*/
- void customEcidData(TARGETING::TargetHandleList i_extraTargets,
+ void customData(TARGETING::TargetHandleList i_extraTargets,
std::vector<uint8_t> &io_data);
/**
OpenPOWER on IntegriCloud