summaryrefslogtreecommitdiffstats
path: root/src/usr/fapi2/plat_utils.C
diff options
context:
space:
mode:
authorBrian Stegmiller <bjs@us.ibm.com>2017-12-05 16:01:44 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-12-08 11:28:58 -0500
commit1eba8f47f718aa44800ed5be0f70b1cf795298c9 (patch)
tree70da207315086f33eb35c1791b5a865bf676c6e2 /src/usr/fapi2/plat_utils.C
parent18f9c896aa1e4b348d3ae2ed4ff641b91b36cd67 (diff)
downloadtalos-hostboot-1eba8f47f718aa44800ed5be0f70b1cf795298c9.tar.gz
talos-hostboot-1eba8f47f718aa44800ed5be0f70b1cf795298c9.zip
Avoid assert on invalid target types for PRD and HWP PLID association
Change-Id: I576559dba463bdc884e7929f731e5a098c6f7749 CQ:SW409720 Backport: release-op910 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/50535 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> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/fapi2/plat_utils.C')
-rw-r--r--src/usr/fapi2/plat_utils.C82
1 files changed, 80 insertions, 2 deletions
diff --git a/src/usr/fapi2/plat_utils.C b/src/usr/fapi2/plat_utils.C
index 58c4da663..a1b95ec8f 100644
--- a/src/usr/fapi2/plat_utils.C
+++ b/src/usr/fapi2/plat_utils.C
@@ -1009,6 +1009,16 @@ void set_log_id( const Target<TARGET_TYPE_ALL>& i_target,
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 );
@@ -1016,10 +1026,78 @@ void set_log_id( const Target<TARGET_TYPE_ALL>& i_target,
errlHndl_t l_pError = reinterpret_cast<errlHndl_t>(io_rc.getPlatDataPtr());
uint32_t plid = ERRL_GETPLID_SAFE(l_pError);
- // Connect the PLID to PRD log
+ // get target passed in
TARGETING::Target* l_target =
reinterpret_cast<TARGETING::Target*>(i_target.get());
- l_target->setAttr<TARGETING::ATTR_PRD_HWP_PLID>( plid );
+
+
+ // 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) )
+ {
+ 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
+
} // end set_log_id
OpenPOWER on IntegriCloud