diff options
author | Elizabeth Liner <eliner@us.ibm.com> | 2016-02-09 22:47:21 -0600 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2016-03-02 17:43:21 -0500 |
commit | 94175505c5f2e5a699c25ee84398e043655837fd (patch) | |
tree | cf3085b3d21000c5029216527a8bbc96def5e2d6 /src/usr/ipmi | |
parent | 878a49592e2ebd9513d728b1c88765f5d7073837 (diff) | |
download | talos-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.C | 56 | ||||
-rw-r--r-- | src/usr/ipmi/ipmifruinvprvt.H | 15 |
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); /** |