summaryrefslogtreecommitdiffstats
path: root/src/usr/isteps/pm
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2017-01-19 09:06:32 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-01-25 11:47:26 -0500
commit2ed8b10f53407e38fdbeff8f839f474437ef06bf (patch)
tree5ab5df6a6316b250a7c6f6f2c469493b90f87373 /src/usr/isteps/pm
parent9fe6f884d176a13b432baaa986179ef6fa654f94 (diff)
downloadtalos-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.C72
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
OpenPOWER on IntegriCloud