From 284cebd97cf08d42ba2f4caa8779bf47494fcc20 Mon Sep 17 00:00:00 2001 From: Matt Derksen Date: Fri, 23 Mar 2018 16:50:11 -0500 Subject: 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 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Reviewed-by: Christian R. Geddes Tested-by: FSP CI Jenkins Reviewed-by: William G. Hoffa --- src/usr/hwas/common/deconfigGard.C | 42 +++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) (limited to 'src/usr') 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().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()); + } + else + { + HWAS_INF("Proc %.8X Skipping non-present endpt target %.8X of %.8X BUS", + get_huid((*l_procInfoIter).iv_pThisProc), + l_pDstTarget->getAttr(), + l_pTarget->getAttr()); + } + 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() == + 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; } } -- cgit v1.2.1