diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2018-01-22 11:15:33 -0600 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2018-01-25 16:43:33 -0500 |
commit | 2935800fa74d6c18c77b322b45930d250ab47be7 (patch) | |
tree | cb0085c0f9fc804394f8cdee0cf882ee89d4bafd /src/usr/fapi2 | |
parent | afa7087e71fedb6d50b8874231420449834e7d1b (diff) | |
download | talos-hostboot-2935800fa74d6c18c77b322b45930d250ab47be7.tar.gz talos-hostboot-2935800fa74d6c18c77b322b45930d250ab47be7.zip |
PRD: generic solution to associate HWP failures with PRD isolation
Change-Id: Id5a767cc2475e4a7cc2003eeb74af6c07369315a
CQ: SW413495
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/52285
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Diffstat (limited to 'src/usr/fapi2')
-rw-r--r-- | src/usr/fapi2/plat_utils.C | 110 | ||||
-rw-r--r-- | src/usr/fapi2/test/fapi2VerifyPrdAttrTest.C | 43 |
2 files changed, 25 insertions, 128 deletions
diff --git a/src/usr/fapi2/plat_utils.C b/src/usr/fapi2/plat_utils.C index 9659476da..dc4493391 100644 --- a/src/usr/fapi2/plat_utils.C +++ b/src/usr/fapi2/plat_utils.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2017 */ +/* Contributors Listed Below - COPYRIGHT 2015,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -1038,99 +1038,37 @@ void logError( /// @brief Internal Function associates PRD and HW elogs /// Used by log_related_error /// -void set_log_id( const Target<TARGET_TYPE_ALL>& i_target, +void set_log_id( const Target<TARGET_TYPE_ALL>& i_fapiTrgt, fapi2::ReturnCode& io_rc, fapi2::errlSeverity_t i_sev ) { - TARGETING::TYPE l_type; - TARGETING::TargetHandleList l_targList; - TARGETING::Target* l_attrTarget = NULL; // for setting attribute - - - // Need model for nimbus/cumulus checks - TARGETING::Target * l_masterProc; - TARGETING::targetService().masterProcChipTargetHandle(l_masterProc); - TARGETING::MODEL l_model = l_masterProc->getAttr<TARGETING::ATTR_MODEL>(); - - // Create elog for FAPI error - createPlatLog( io_rc, i_sev ); - - // Get PLID for this elog - errlHndl_t l_pError = reinterpret_cast<errlHndl_t>(io_rc.getPlatDataPtr()); - uint32_t plid = ERRL_GETPLID_SAFE(l_pError); + do + { + // Get TARGETING target. + TARGETING::Target* attrTrgt = + reinterpret_cast<TARGETING::Target*>(i_fapiTrgt.get()); + if ( nullptr == attrTrgt ) + { + FAPI_ERR( "[set_log_id] attrTrgt is null" ); + break; + } - // get target passed in - TARGETING::Target* l_target = - reinterpret_cast<TARGETING::Target*>(i_target.get()); + // Create an error log for this FAPI error. + createPlatLog( io_rc, i_sev ); + // Get the PLID from this error log. + errlHndl_t errl = reinterpret_cast<errlHndl_t>(io_rc.getPlatDataPtr()); + uint32_t plid = ERRL_GETPLID_SAFE(errl); - // PRD only uses this for PROC and MCA/DMI targets - // so ensure we have one of those. - if (NULL != l_target) - { - if ( l_target->tryGetAttr<TARGETING::ATTR_TYPE>(l_type) ) + // Set the PLID in this attribute. + if ( ! attrTrgt->trySetAttr<TARGETING::ATTR_PRD_HWP_PLID>(plid) ) { - switch (l_type) - { - case TARGETING::TYPE_PROC: - case TARGETING::TYPE_MCA: - case TARGETING::TYPE_DMI: - // Supported for these targets - l_attrTarget = l_target; - break; // proc/mca/dmi - - case TARGETING::TYPE_DIMM: - // Need parent MCA (or DMI) - if ( TARGETING::MODEL_NIMBUS == l_model ) - { // NIMBUS - getParentAffinityTargets( l_targList, l_target, - TARGETING::CLASS_UNIT, - TARGETING::TYPE_MCA ); - - if (1 == l_targList.size()) - { - l_attrTarget = l_targList[0]; - } // one parent found - - } - else if ( TARGETING::MODEL_CUMULUS == l_model ) - { // CUMULUS - getParentAffinityTargets( l_targList, l_target, - TARGETING::CLASS_UNIT, - TARGETING::TYPE_DMI ); - - if (1 == l_targList.size()) - { - l_attrTarget = l_targList[0]; - } // one parent found - } - else - { - // Unknown PROC type so don't do - // anything till we add support - FAPI_ERR("WARNING:set_log_id: UNKNOWN MODEL"); - Assert( TARGETING::MODEL_NIMBUS == l_model ); - } // end else new proc to work on - break; // dimm - - default: - // No idea what we have, - // so don't use it or it - // will explode on us. - break; - - } // end switch on type - - } // if got target type - - if (NULL != l_attrTarget) - { - // Connect the PLID to PRD log - l_attrTarget->trySetAttr<TARGETING::ATTR_PRD_HWP_PLID>( plid ); - } // attrTarget valid - - } // if valid target + FAPI_ERR( "[set_log_id] failed to set ATTR_PRD_HWP_PLID on 0x%08x", + TARGETING::get_huid(attrTrgt) ); + break; + } + } while (0); } // end set_log_id diff --git a/src/usr/fapi2/test/fapi2VerifyPrdAttrTest.C b/src/usr/fapi2/test/fapi2VerifyPrdAttrTest.C index 6e4b7fff8..2a5ab6d40 100644 --- a/src/usr/fapi2/test/fapi2VerifyPrdAttrTest.C +++ b/src/usr/fapi2/test/fapi2VerifyPrdAttrTest.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2017 */ +/* Contributors Listed Below - COPYRIGHT 2017,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -137,47 +137,6 @@ uint32_t verifyHwpPrdAssociaton() FAPI_INF("...verifyHwpPrdAssociation MCA done: PLID %08X", l_plid); - // ============================================================== - // HW procedures might pass DIMM so verify that works - // ============================================================== - TargetHandleList l_dimmList; - getChildAffinityTargets( l_dimmList, l_mcaList[0], - TARGETING::CLASS_NA, - TARGETING::TYPE_DIMM ); - - if (l_dimmList.size() >= 1) - { - FAPI_INF("...verifyHwpPrdAssociation DIMM:%d", - l_dimmList.size() ); - - // Using masterProc target as FAPI core target for test - Target<fapi2::TARGET_TYPE_CORE> fapi2_dimmTarget(l_dimmList[0]); - // We have to pass a FAPI RC so make one up - l_fapiRc = verifyPrd_get_fapi2_error(); - - // Init the attribute so we know if it changes - l_mcaList[0]->setAttr<TARGETING::ATTR_PRD_HWP_PLID>( 0x33333333 ); - - // Create/commit elog associated with PRD PLID attribute - fapi2::log_related_error( fapi2_dimmTarget, l_fapiRc ); - - // Verify that PLID attribute changed - l_plid = l_mcaList[0]->getAttr<TARGETING::ATTR_PRD_HWP_PLID>(); - - if (0x33333333 == l_plid) - { // PLID did not change so routine failed somehow - TS_FAIL(" verifyHwpPrdAssociation DIMM No PLID change:%08X", - l_plid); - l_rc = 1; - } - else - { // PLID was altered, so that is good - TS_TRACE(" verifyHwpPrdAssociation GOOD on DIMM"); - } - - FAPI_INF("...verifyHwpPrdAssociation DIMM done: PLID %08X", l_plid); - } // end if any DIMMs - } // end if any MCAs |