diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2017-01-19 09:06:32 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-01-25 11:47:26 -0500 |
commit | 2ed8b10f53407e38fdbeff8f839f474437ef06bf (patch) | |
tree | 5ab5df6a6316b250a7c6f6f2c469493b90f87373 /src/usr/isteps/pm | |
parent | 9fe6f884d176a13b432baaa986179ef6fa654f94 (diff) | |
download | talos-hostboot-2ed8b10f53407e38fdbeff8f839f474437ef06bf.tar.gz talos-hostboot-2ed8b10f53407e38fdbeff8f839f474437ef06bf.zip |
Support ring overrides for HCODE image
Allows data from the RINGOVD partition of PNOR to be applied
to the HCODE/STOP image that is generated during boot and
at runtime.
Change-Id: I66665bb89af020fc1a249d89f42d541a06383309
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/35128
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Reviewed-by: Corey V. Swenson <cswenson@us.ibm.com>
Reviewed-by: Martin Gloff <mgloff@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/isteps/pm')
-rw-r--r-- | src/usr/isteps/pm/pm_common.C | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/src/usr/isteps/pm/pm_common.C b/src/usr/isteps/pm/pm_common.C index a094f9621..857314128 100644 --- a/src/usr/isteps/pm/pm_common.C +++ b/src/usr/isteps/pm/pm_common.C @@ -52,6 +52,7 @@ #include <initservice/initserviceif.H> #include <runtime/interface.h> +#include <secureboot/service.H> // Procedures #include <p9_pm_pba_bar_config.H> @@ -338,12 +339,23 @@ namespace HBPM ImageType_t l_imgType; + // Check if we have a valid ring override section and + // include it in if so + void* l_ringOverrides = NULL; + l_errl = HBPM::getRingOvd(l_ringOverrides); + if(l_errl) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + ERR_MRK"loadHcode(): Error in call to getRingOvd!"); + break; + } + FAPI_INVOKE_HWP( l_errl, p9_hcode_image_build, l_fapiTarg, l_pImageIn, //reference image i_pImageOut, //homer image buffer - nullptr, //default is no ring overrides + l_ringOverrides, (PM_LOAD == i_mode) ? PHASE_IPL : PHASE_REBUILD, l_imgType, @@ -949,5 +961,63 @@ namespace HBPM return l_errl; } // resetPMAll + + /** + * @brief Fetch the ring overrides (if they exist) + */ + errlHndl_t getRingOvd(void*& io_overrideImg) + { + errlHndl_t l_err = nullptr; + + do { + io_overrideImg = nullptr; + + // No overrides in secure mode + if( SECUREBOOT::enabled() ) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + INFO_MRK"getRingOvd(): No overrides in secure mode"); + break; + } + + PNOR::SectionInfo_t l_pnorRingOvd; + l_err = PNOR::getSectionInfo(PNOR::RINGOVD, l_pnorRingOvd); + if(l_err) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + ERR_MRK"getRingOvd():Error trying to read RINGOVD " + "from PNOR!"); + break; + } + if(l_pnorRingOvd.size == 0) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + INFO_MRK"getRingOvd(): No RINGOVD section in PNOR"); + break; + } + + TRACDBIN( ISTEPS_TRACE::g_trac_isteps_trace, + "getRingOvd():100 bytes of RINGOVD section", + (void *)l_pnorRingOvd.vaddr,100); + + // If first 8 bytes are just FF's then we know there's no override + if((*(static_cast<uint64_t *>((void *)l_pnorRingOvd.vaddr))) == + 0xFFFFFFFFFFFFFFFF) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + 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<void*>(l_pnorRingOvd.vaddr); + + }while(0); + + return l_err; + } + } // end HBPM namespace |