From ae1ac07ebcac5e7b650207fdda124e17bcb3be4f Mon Sep 17 00:00:00 2001 From: Christian Geddes Date: Wed, 24 Jan 2018 15:31:12 -0600 Subject: [PATCH] Zero out Cumulus related virtual address attribute during MPIPL During MPIPL we want to zero out virtual address attributes because we want to insure they get recomputed on the MPIPL pass through the isteps. These values can change between boots so its important to recompute them on the MPIPL pass. Change-Id: I58f810e70ed61d9acb04bd32c92fbed45f2b78a2 RTC: 172534 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/52582 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: William G. Hoffa Reviewed-by: Martin Gloff Reviewed-by: Daniel M. Crowell --- src/usr/targeting/targetservicestart.C | 27 ++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/usr/targeting/targetservicestart.C b/src/usr/targeting/targetservicestart.C index a5241025eab..360df2b8e2a 100755 --- a/src/usr/targeting/targetservicestart.C +++ b/src/usr/targeting/targetservicestart.C @@ -416,6 +416,9 @@ static void initializeAttributes(TargetService& i_targetService, l_pTopLevel->setAttr(l_hyp_hrmor); } + + //Assemble list of functional procs and zero out virtual address values + //to ensure they get set again this IPL TARGETING::PredicateCTM l_chipFilter(CLASS_CHIP, TYPE_PROC); TARGETING::PredicateIsFunctional l_functional; TARGETING::PredicatePostfixExpr l_functionalChips; @@ -431,18 +434,19 @@ static void initializeAttributes(TargetService& i_targetService, { l_chip->setAttr(0); l_chip->setAttr(0); - //TODO RTC:172534 Need to clear volatile attributes during MPIPL for cumulus } - TargetHandleList tpms; + //Assemble list of tpms and zero out some values + //to ensure they get set again this IPL + TargetHandleList l_tpms; TARGETING::PredicateCTM tpmFilter(CLASS_CHIP, TYPE_TPM); i_targetService.getAssociated( - tpms, + l_tpms, l_pTopLevel, TargetService::CHILD, TARGETING::TargetService::ALL, &tpmFilter); - for (auto & tpm : tpms) + for (auto & tpm : l_tpms) { tpm->setAttr(0); tpm->setAttr(0); @@ -450,6 +454,21 @@ static void initializeAttributes(TargetService& i_targetService, mutex_init(tpmMutex); } + //Assemble list of membuf and zero out some virtual address attributes + //to ensure they get set again this IPL + TargetHandleList l_membufs; + TARGETING::PredicateCTM membufFilter(CLASS_CHIP, TYPE_MEMBUF); + i_targetService.getAssociated( + l_membufs, + l_pTopLevel, + TargetService::CHILD, + TARGETING::TargetService::ALL, + &membufFilter); + for (auto & membuf : l_membufs) + { + membuf->setAttr(0); + } + // Setup physical TOC address uint64_t l_hbdTocAddr = AttrRP::getHbDataTocAddr();