From c623059686ee2da857b2db64f3a0c85664213420 Mon Sep 17 00:00:00 2001 From: Matt Derksen Date: Thu, 22 Jun 2017 12:04:19 -0500 Subject: [PATCH] Grab RINGOVD data on FSP systems from lid Change-Id: Ic6acf3e0785d00618a75023a38b26bca4d77b5ed RTC: 171484 CMVC-Prereq: 1027252 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42623 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: Martin Gloff Reviewed-by: Nicholas E. Bofferding Reviewed-by: Daniel M. Crowell --- src/include/usr/util/utillidmgr.H | 1 + src/usr/isteps/pm/pm_common.C | 44 ++++++++++++++++++------------- src/usr/util/utillidpnor.H | 13 ++++----- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/include/usr/util/utillidmgr.H b/src/include/usr/util/utillidmgr.H index e334a9b13f5..6e0c95d2f71 100644 --- a/src/include/usr/util/utillidmgr.H +++ b/src/include/usr/util/utillidmgr.H @@ -51,6 +51,7 @@ enum LidId // Hcode Reference Image LIDs NIMBUS_HCODE_LIDID = 0x81e00602, CUMULUS_HCODE_LIDID = 0x81e00603, + HWREFIMG_RINGOVD_LIDID = 0x81e00620, }; } diff --git a/src/usr/isteps/pm/pm_common.C b/src/usr/isteps/pm/pm_common.C index 5a5189aad28..9956867472f 100644 --- a/src/usr/isteps/pm/pm_common.C +++ b/src/usr/isteps/pm/pm_common.C @@ -96,6 +96,7 @@ namespace HBPM std::shared_ptr g_pOccLidMgr (nullptr); std::shared_ptr g_pHcodeLidMgr (nullptr); + std::shared_ptr g_pRingOvdLidMgr (nullptr); /** * @brief Convert HOMER physical address space to a vitual address @@ -1049,50 +1050,55 @@ namespace HBPM do { io_overrideImg = nullptr; -#ifdef __HOSTBOOT_RUNTIME - break; -#endif + uint32_t l_lidId = Util::HWREFIMG_RINGOVD_LIDID; + if(g_pRingOvdLidMgr.get() == nullptr) + { + g_pRingOvdLidMgr = std::shared_ptr + (new UtilLidMgr(l_lidId)); + } + void* l_pImageIn = nullptr; + size_t l_lidImageSize = 0; - PNOR::SectionInfo_t l_pnorRingOvd; - l_err = PNOR::getSectionInfo(PNOR::RINGOVD, l_pnorRingOvd); - if(l_err) + l_err = g_pRingOvdLidMgr->getStoredLidImage(l_pImageIn, + l_lidImageSize); + if (l_err) { - delete l_err; - l_err = NULL; TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - INFO_MRK"getRingOvd(): RINGOVD section not found or " - "is blocked in secure mode. it is optional"); + ERR_MRK"getRingOvd: get stored LID image failed!"); + l_err->collectTrace("ISTEPS_TRACE",256); + l_err->collectTrace(FAPI_TRACE_NAME,256); + l_err->collectTrace(FAPI_IMP_TRACE_NAME,256); break; } - if(l_pnorRingOvd.size == 0) + + if((l_lidImageSize == 0) || (l_pImageIn == nullptr)) { TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - INFO_MRK"getRingOvd(): RINGOVD section is empty in PNOR"); + INFO_MRK"getRingOvd(): RINGOVD section is empty"); break; } TRACDBIN( ISTEPS_TRACE::g_trac_isteps_trace, "getRingOvd():100 bytes of RINGOVD section", - (void *)l_pnorRingOvd.vaddr,100); + l_pImageIn, 100); // If first 8 bytes are just FF's then we know there's no override - if((*(static_cast((void *)l_pnorRingOvd.vaddr))) == - 0xFFFFFFFFFFFFFFFF) + if((*(static_cast(l_pImageIn))) == 0xFFFFFFFFFFFFFFFF ) { TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - INFO_MRK"getRingOvd():No overrides in RINGOVD section " - "found"); + INFO_MRK"getRingOvd():No overrides in RINGOVD section " + "found"); break; } TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, INFO_MRK"getRingOvd():Found valid ring overrides"); - io_overrideImg = reinterpret_cast(l_pnorRingOvd.vaddr); + io_overrideImg = l_pImageIn; }while(0); return l_err; - } + } // end getRingOvd } // end HBPM namespace diff --git a/src/usr/util/utillidpnor.H b/src/usr/util/utillidpnor.H index acec01462bd..f4da469dc2c 100644 --- a/src/usr/util/utillidpnor.H +++ b/src/usr/util/utillidpnor.H @@ -57,11 +57,12 @@ bool cmpLidToPnor (const std::pair p1, const std::pair lidToPnor[] = { - std::make_pair(Util::TEST_LIDID, PNOR::TESTRO), // 0x00000111 - std::make_pair(Util::OCC_LIDID, PNOR::OCC), // 0x81e00430 - std::make_pair(Util::WOF_LIDID, PNOR::WOFDATA), // 0x81e00440 - std::make_pair(Util::NIMBUS_HCODE_LIDID, PNOR::HCODE), // 0x81e00602 - std::make_pair(Util::CUMULUS_HCODE_LIDID, PNOR::HCODE) // 0x81e00603 + std::make_pair(Util::TEST_LIDID, PNOR::TESTRO), // 0x00000111 + std::make_pair(Util::OCC_LIDID, PNOR::OCC), // 0x81e00430 + std::make_pair(Util::WOF_LIDID, PNOR::WOFDATA), // 0x81e00440 + std::make_pair(Util::NIMBUS_HCODE_LIDID, PNOR::HCODE), // 0x81e00602 + std::make_pair(Util::CUMULUS_HCODE_LIDID, PNOR::HCODE), // 0x81e00603 + std::make_pair(Util::HWREFIMG_RINGOVD_LIDID, PNOR::RINGOVD)// 0x81e00620 }; // Size of lidToPnor[] @@ -70,4 +71,4 @@ const size_t NUM_LID_TO_PNOR = ( sizeof(lidToPnor) / } -#endif \ No newline at end of file +#endif