diff options
author | Matt Derksen <v2cibmd@us.ibm.com> | 2016-11-17 14:21:31 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-12-19 18:21:41 -0500 |
commit | 3320ec5232e3a10df6adee024ce200c26920cec7 (patch) | |
tree | 73e47e70dbf68b21e72e0bb0b90b8bd70884b0a2 /src/usr/hwas/common/deconfigGard.C | |
parent | db432c2f9d0d1269c8660a23b84c0552cd672b31 (diff) | |
download | talos-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.C | 55 |
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; } } } |