summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatt Derksen <mderkse1@us.ibm.com>2018-03-23 16:50:11 -0500
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2018-03-29 10:46:42 -0400
commit284cebd97cf08d42ba2f4caa8779bf47494fcc20 (patch)
treeaf608318369688dd8c7b9806abae949ef4268a73 /src
parent95c1dd78c27aca67b4298854306702fe605f906e (diff)
downloadtalos-hostboot-284cebd97cf08d42ba2f4caa8779bf47494fcc20.tar.gz
talos-hostboot-284cebd97cf08d42ba2f4caa8779bf47494fcc20.zip
Change deconfig rules to allow for Zeppelin proc config
Need to allow for a switch between fabric group and chip ids in the deconfig logic. Currently P1 deconfigs because of step 2 in _symmetryValidation. Change-Id: I54e95847b6078fe981bf6fa9cb9dcebeafa01f94 CQ:SW419526 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/56223 Reviewed-by: Martin Gloff <mgloff@us.ibm.com> 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> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/usr/hwas/common/deconfigGard.C42
1 files changed, 37 insertions, 5 deletions
diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C
index e349207be..44493ae5f 100644
--- a/src/usr/hwas/common/deconfigGard.C
+++ b/src/usr/hwas/common/deconfigGard.C
@@ -1320,6 +1320,7 @@ errlHndl_t DeconfigGard::_invokeDeconfigureAssocProc(
HWAS_INF( "_invokeDeconfigureAssocProc> %.8X : G=%d, C=%d, D=%d, M=%d", l_ProcInfo.procHUID, l_ProcInfo.procFabricGroup, l_ProcInfo.procFabricChip, l_ProcInfo.iv_deconfigured, l_ProcInfo.iv_masterCapable );
l_procInfo.push_back(l_ProcInfo);
}
+ HWAS_INF("----------------------------------------------------------");
// Iterate through l_procInfo and populate child bus endpoint
// chiplet information
for (ProcInfoVector::iterator
@@ -1359,14 +1360,30 @@ errlHndl_t DeconfigGard::_invokeDeconfigureAssocProc(
if ((!l_pDstTarget) ||
(!(l_pDstTarget->getAttr<ATTR_HWAS_STATE>().present)))
{
+ if (l_pDstTarget == nullptr)
+ {
+ HWAS_INF("Proc %.8X Skipping non-peer endpt of BUS %.8X",
+ get_huid((*l_procInfoIter).iv_pThisProc),
+ l_pTarget->getAttr<ATTR_HUID>());
+ }
+ else
+ {
+ HWAS_INF("Proc %.8X Skipping non-present endpt target %.8X of %.8X BUS",
+ get_huid((*l_procInfoIter).iv_pThisProc),
+ l_pDstTarget->getAttr<ATTR_HUID>(),
+ l_pTarget->getAttr<ATTR_HUID>());
+ }
+
continue;
}
+
// Chiplet has a valid (present) peer
// Handle iv_pA/XProcs[]:
// Define target for peer proc
const Target* l_pPeerProcTarget;
// Get parent chip from xbus chiplet
l_pPeerProcTarget = getParentChip(l_pDstTarget);
+
// Find matching ProcInfo struct
for (ProcInfoVector::iterator
l_matchProcInfoIter = l_procInfo.begin();
@@ -1388,8 +1405,8 @@ errlHndl_t DeconfigGard::_invokeDeconfigureAssocProc(
// HWAS state
(*l_procInfoIter).iv_XDeconfigured[xBusIndex] =
!(isFunctional(*l_busIter));
+ HWAS_INF( "%.8X add X[%d]> %.8X : G=%d, C=%d, D=%d, M=%d", (*l_procInfoIter).procHUID, xBusIndex, (*l_matchProcInfoIter).procHUID, (*l_matchProcInfoIter).procFabricGroup, (*l_matchProcInfoIter).procFabricChip, (*l_matchProcInfoIter).iv_deconfigured, (*l_matchProcInfoIter).iv_masterCapable );
xBusIndex++;
- HWAS_DBG( "add X> %.8X : G=%d, C=%d, D=%d, M=%d", (*l_matchProcInfoIter).procHUID, (*l_matchProcInfoIter).procFabricGroup, (*l_matchProcInfoIter).procFabricChip, (*l_matchProcInfoIter).iv_deconfigured, (*l_matchProcInfoIter).iv_masterCapable );
}
// If subsystem owns abus deconfigs consider them
else if (i_doAbusDeconfig &&
@@ -1400,8 +1417,8 @@ errlHndl_t DeconfigGard::_invokeDeconfigureAssocProc(
// HWAS state
(*l_procInfoIter).iv_ADeconfigured[aBusIndex] =
!(isFunctional(*l_busIter));
+ HWAS_INF( "%.8X add A[%d]> %.8X : G=%d, C=%d, D=%d, M=%d", (*l_procInfoIter).procHUID, aBusIndex, (*l_matchProcInfoIter).procHUID, (*l_matchProcInfoIter).procFabricGroup, (*l_matchProcInfoIter).procFabricChip, (*l_matchProcInfoIter).iv_deconfigured, (*l_matchProcInfoIter).iv_masterCapable );
aBusIndex++;
- HWAS_DBG( "add A> %.8X : G=%d, C=%d, D=%d, M=%d", (*l_matchProcInfoIter).procHUID, (*l_matchProcInfoIter).procFabricGroup, (*l_matchProcInfoIter).procFabricChip, (*l_matchProcInfoIter).iv_deconfigured, (*l_matchProcInfoIter).iv_masterCapable );
}
break;
}
@@ -2558,7 +2575,7 @@ errlHndl_t DeconfigGard::_deconfigureAssocProc(ProcInfoVector &io_procInfo)
}// STEP 4
// STEP 5:
- // If a deconfigured bus conects two procs on different logical groups,
+ // If a deconfigured bus connects two procs on different logical groups,
// and neither proc is the master proc: If current proc's xbus peer
// proc is marked as deconfigured, mark current proc. Else, mark
// abus peer proc.
@@ -2645,6 +2662,20 @@ errlHndl_t DeconfigGard::_symmetryValidation(ProcInfoVector &io_procInfo)
// Perform SMP group balancing
do
{
+ Target* pSys;
+ targetService().getTopLevelTarget(pSys);
+ HWAS_ASSERT(pSys, "HWAS _symmetryValidation: no TopLevelTarget");
+ if ( pSys->getAttr<ATTR_PROC_FABRIC_PUMP_MODE>() ==
+ TARGETING::PROC_FABRIC_PUMP_MODE_CHIP_IS_GROUP )
+ {
+ // When CHIP_IS_GROUP is set, that means a single fabric CHIP
+ // per GROUP (or NODE). If we apply symmetry deconfig, it will
+ // deconfig all the other chips because they all have the same
+ // relative position to group.
+
+ break;
+ }
+
// STEP 1:
// If a proc is deconfigured in a logical group
// containing the master proc, iterate through all procs
@@ -2697,8 +2728,9 @@ errlHndl_t DeconfigGard::_symmetryValidation(ProcInfoVector &io_procInfo)
(*l_posProcInfoIter).procFabricChip)
{
HWAS_INF("symmetryValidation step 1 marked proc: "
- "%.8X for deconfiguration.",
- (*l_posProcInfoIter).procHUID);
+ "%.8X for deconfiguration. Previously marked %d",
+ (*l_posProcInfoIter).procHUID,
+ (*l_posProcInfoIter).iv_deconfigured?1:0);
(*l_posProcInfoIter).iv_deconfigured = true;
}
}
OpenPOWER on IntegriCloud