diff options
author | Matt Derksen <mderkse1@us.ibm.com> | 2018-03-23 16:50:11 -0500 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2018-03-29 10:46:42 -0400 |
commit | 284cebd97cf08d42ba2f4caa8779bf47494fcc20 (patch) | |
tree | af608318369688dd8c7b9806abae949ef4268a73 /src | |
parent | 95c1dd78c27aca67b4298854306702fe605f906e (diff) | |
download | talos-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.C | 42 |
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; } } |