diff options
| author | Roland Veloz <rveloz@us.ibm.com> | 2018-07-26 12:22:43 -0500 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-08-30 11:00:31 -0500 |
| commit | c8448c3a09aef319e9669fc1003b9fa6f79ebe5d (patch) | |
| tree | 35cf80a64e7e952ffed23d179bf079fc5de8bbcc /src/usr/hwas/common | |
| parent | 1dd6d76477460e2045ba71145e51f9880d946d0e (diff) | |
| download | talos-hostboot-c8448c3a09aef319e9669fc1003b9fa6f79ebe5d.tar.gz talos-hostboot-c8448c3a09aef319e9669fc1003b9fa6f79ebe5d.zip | |
Deconfig EC/EX/EQ at runtime
Applied the normal parent/child rules for EC/EX/EQ logic to be done in
the runtime deconfig logic.
After applying the deconfig logic, then reset the PM for the parent
proc of the EX/EX/EQ.
To facilitate the code changes, modified the return value of the
TARGETING::getParent(...) call. It no longer returns a const * Target,
considering 5 times out of 7 of it's usage, users were just
staic_cast(ing) away the const.
Clear out the HB reset attribute in the mpipl path.
Modify PRD logic to use runtime deconfig call in malfunction alert
path.
CMVC-Prereq: 1066157
Change-Id: If81f2f15c6e84bf2adb6fd66c1321b8f1ddf1a86
CQ: SW443157
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/64873
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Roland Veloz <rveloz@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/hwas/common')
| -rw-r--r-- | src/usr/hwas/common/deconfigGard.C | 17 | ||||
| -rw-r--r-- | src/usr/hwas/common/hwas.C | 9 |
2 files changed, 16 insertions, 10 deletions
diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C index 75554cf9b..f844ec912 100644 --- a/src/usr/hwas/common/deconfigGard.C +++ b/src/usr/hwas/common/deconfigGard.C @@ -1640,8 +1640,14 @@ void DeconfigGard::_deconfigureByAssoc( _deconfigureByAssoc(*pChild, i_errlEid, i_deconfigRule); } // for CHILD - if ((i_deconfigRule == NOT_AT_RUNTIME)|| - (i_deconfigRule == SPEC_DECONFIG)) + // Retrieve the target type from the given target + TYPE l_targetType = i_target.getAttr<ATTR_TYPE>(); + + if ((i_deconfigRule == NOT_AT_RUNTIME) || + (i_deconfigRule == SPEC_DECONFIG) || + (l_targetType == TYPE_EQ) || + (l_targetType == TYPE_EX) || + (l_targetType == TYPE_CORE)) { // if the rule is NOT_AT_RUNTIME and we got here, then we are // not at runtime. @@ -1649,6 +1655,9 @@ void DeconfigGard::_deconfigureByAssoc( // reason is, we're not really deconfigureing anything, we're just // marking them as non-functional. we only want to do that for the // desired target and it's CHILD + // Except for target EQ, EX, CORE. Deconfigure these regardless of the + // runtime status + // find all CHILD_BY_AFFINITY targets and deconfigure them targetService().getAssociated(pChildList, &i_target, @@ -1673,7 +1682,7 @@ void DeconfigGard::_deconfigureByAssoc( // chip (TYPE_EQ, TYPE_EX, TYPE_CORE) // deconfigureByAssociation rules - switch (i_target.getAttr<ATTR_TYPE>()) + switch (l_targetType) { case TYPE_CORE: { @@ -3069,7 +3078,7 @@ bool DeconfigGard::anyChildFCO (Target & i_parent) // deconfigureTargetAtRuntime /******************************************************************************/ errlHndl_t DeconfigGard::deconfigureTargetAtRuntime( - TARGETING::ConstTargetHandle_t const i_pTarget, + TARGETING::TargetHandle_t i_pTarget, const DeconfigGard::DeconfigureFlags i_deconfigureAction, const errlHndl_t i_deconfigErrl) diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C index 1333be066..0f5a20f1d 100644 --- a/src/usr/hwas/common/hwas.C +++ b/src/usr/hwas/common/hwas.C @@ -1500,8 +1500,7 @@ bool isDescFunctional(const TARGETING::TargetHandle_t &i_desc, if (i_desc->getAttr<ATTR_TYPE>() == TYPE_OBUS_BRICK) { auto obusType = TARGETING::TYPE_OBUS; - TARGETING::Target* l_obus_ptr = const_cast<TARGETING::Target*>( - getParent(i_desc, obusType)); + TARGETING::Target* l_obus_ptr = getParent(i_desc, obusType); //If NPU is bad and OBUS is non-SMP, then mark them bad // Bit does not matter unless not in SMP mode @@ -1590,8 +1589,7 @@ void forceEcExEqDeconfig(const TARGETING::TargetHandle_t i_core, auto exType = TARGETING::TYPE_EX; auto eqType = TARGETING::TYPE_EQ; - TARGETING::Target* l_ex = const_cast<TARGETING::Target*>( - getParent(i_core, exType)); + TARGETING::Target* l_ex = getParent(i_core, exType); getChildChiplets(pECList, l_ex, TYPE_CORE, true); if(pECList.size() == 0) { @@ -1600,8 +1598,7 @@ void forceEcExEqDeconfig(const TARGETING::TargetHandle_t i_core, l_ex->getAttr<ATTR_HUID>(), i_present ? "" : "NOT "); //Now get the parent EQ and check to see if it should be deconfigured - TARGETING::Target* l_eq = const_cast<TARGETING::Target*>( - getParent(l_ex, eqType)); + TARGETING::Target* l_eq = getParent(l_ex, eqType); getChildChiplets(pEXList, l_eq, TYPE_EX, true); if(pEXList.size() == 0) { |

