summaryrefslogtreecommitdiffstats
path: root/src/usr/hwas/common/deconfigGard.C
diff options
context:
space:
mode:
authorMatt Derksen <v2cibmd@us.ibm.com>2016-11-17 14:21:31 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-12-19 18:21:41 -0500
commit3320ec5232e3a10df6adee024ce200c26920cec7 (patch)
tree73e47e70dbf68b21e72e0bb0b90b8bd70884b0a2 /src/usr/hwas/common/deconfigGard.C
parentdb432c2f9d0d1269c8660a23b84c0552cd672b31 (diff)
downloadtalos-hostboot-3320ec5232e3a10df6adee024ce200c26920cec7.tar.gz
talos-hostboot-3320ec5232e3a10df6adee024ce200c26920cec7.zip
Enforce magic port logic at deconfig time
Special MCA on each MC chiplet contains unique logic found nowhere else. We need to mark the entire MC chiplet non-functional if the special MCA is also marked non-functional. Change-Id: Id28e0be4d72fa49fc3db5a3d634fb303dc692826 RTC:163938 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/32843 Reviewed-by: Martin Gloff <mgloff@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/hwas/common/deconfigGard.C')
-rw-r--r--src/usr/hwas/common/deconfigGard.C55
1 files changed, 45 insertions, 10 deletions
diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C
index bf47e2a4d..0f250c1f5 100644
--- a/src/usr/hwas/common/deconfigGard.C
+++ b/src/usr/hwas/common/deconfigGard.C
@@ -1306,7 +1306,40 @@ errlHndl_t DeconfigGard::_invokeDeconfigureAssocProc(
}
//******************************************************************************
+void DeconfigGard::enforceMagicMcaDeconfig(
+ Target & i_target,
+ const uint32_t i_errlEid,
+ const DeconfigureFlags i_deconfigRule)
+{
+ // Check if "magic" port is the target
+ if ((i_target.getAttr<ATTR_TYPE>() == TYPE_MCA) &&
+ ((i_target.getAttr<ATTR_CHIP_UNIT>() % 4) == 0))
+ {
+ HWAS_INF("enforceMagicMcaDeconfig for MCA%d %.8X (i_deconfigRule %d)",
+ i_target.getAttr<ATTR_CHIP_UNIT>(), get_huid(&i_target),
+ i_deconfigRule);
+
+ // magic port found and need to deconfigure its MCBIST parent on down
+
+ // get parent MCBIST
+ TargetHandleList pParentMcbistList;
+ getParentAffinityTargetsByState(pParentMcbistList, &i_target,
+ CLASS_UNIT, TYPE_MCBIST, UTIL_FILTER_PRESENT);
+
+ HWAS_ASSERT((pParentMcbistList.size() == 1),
+ "HWAS enforceMagicMcaDeconfig: pParentMcbistList != 1");
+
+ Target *l_parentMcbist = pParentMcbistList[0];
+ HWAS_INF("enforceMagicMcaDeconfig rollup deconfig to "
+ "MCBIST parent (%.8X)", get_huid(l_parentMcbist));
+
+ _deconfigureTarget(*l_parentMcbist, i_errlEid, NULL, i_deconfigRule);
+ _deconfigureByAssoc(*l_parentMcbist, i_errlEid, i_deconfigRule);
+ }
+}
+
+//******************************************************************************
void DeconfigGard::_deconfigureByAssoc(
Target & i_target,
const uint32_t i_errlEid,
@@ -1519,6 +1552,10 @@ void DeconfigGard::_deconfigureByAssoc(
i_errlEid,i_deconfigRule);
}
+ // Checks if MCA is the "magic" port, if so,
+ // then deconfig from its MCBIST parent on down
+ enforceMagicMcaDeconfig(i_target, i_errlEid, i_deconfigRule);
+
// and we're done, so break;
break;
}
@@ -1894,21 +1931,19 @@ void DeconfigGard::_deconfigureByAssoc(
TargetService::CHILD,
TargetService::ALL,
&isFunctional);
- for (TargetHandleList::iterator pChild_it =
- pChildList.begin();
- pChild_it != pChildList.end();
- ++pChild_it)
+
+ for (const auto & l_pChild: pChildList)
{
- if( (*pChild_it)->getAttr<ATTR_CHIP_UNIT>() > l_myUnit )
+ if( l_pChild->getAttr<ATTR_CHIP_UNIT>() > l_myUnit )
{
- _deconfigureTarget(*(*pChild_it),
+ _deconfigureTarget(*l_pChild,
i_errlEid, NULL,
i_deconfigRule);
- _deconfigureByAssoc(*(*pChild_it),
+ _deconfigureByAssoc(*l_pChild,
i_errlEid,i_deconfigRule);
}
}
- }
+ }
break;
} // TYPE_PHB
@@ -2636,7 +2671,7 @@ errlHndl_t DeconfigGard::_symmetryValidation(ProcInfoVector &io_procInfo)
(*l_mGroupProcInfoIter).procFabricGroup) &&
(!((*l_mGroupProcInfoIter).iv_deconfigured)) &&
((*l_mGroupProcInfoIter).procFabricChip ==
- (*l_procInfoIter).procFabricChip) )
+ (*l_procInfoIter).procFabricChip))
{
// Find xbus peer proc to mark deconfigured
for (uint8_t i = 0; i < NUM_X_BUSES; i++)
@@ -2662,7 +2697,7 @@ errlHndl_t DeconfigGard::_symmetryValidation(ProcInfoVector &io_procInfo)
(*l_procInfoIter).
iv_pXProcs[i]->procHUID);
(*l_procInfoIter).iv_pXProcs[i]->
- iv_deconfigured = true;
+ iv_deconfigured = true;
}
}
}
OpenPOWER on IntegriCloud