diff --git a/src/build/buildpnor/pnorLayoutFSP.xml b/src/build/buildpnor/pnorLayoutFSP.xml
index 02c551662d4..26aecb69a89 100644
--- a/src/build/buildpnor/pnorLayoutFSP.xml
+++ b/src/build/buildpnor/pnorLayoutFSP.xml
@@ -176,38 +176,10 @@ Layout Description - Used when building an FSP driver
sideless
-
- Payload (21.375MB)
- PAYLOAD
- 0x162D000
- 0x1560000
- sideless
-
-
-
- Special PNOR Test Space (36K)
- TEST
- 0x2B8D000
- 0x9000
-
- sideless
-
-
-
- Special PNOR Test Space (36K)
- TESTRO
- 0x2B96000
- 0x9000
- sideless
-
-
-
-
-
Hostboot Bootloader (28K)
HBBL
- 0x2B9F000
+ 0x162D000
0x7000
@@ -217,7 +189,7 @@ Layout Description - Used when building an FSP driver
Global Data (36K)
GLOBAL
- 0x2BA6000
+ 0x1634000
0x9000
sideless
@@ -225,7 +197,7 @@ Layout Description - Used when building an FSP driver
Ref Image Ring Overrides (20K)
RINGOVD
- 0x2BAF000
+ 0x163D000
0x5000
sideless
@@ -233,46 +205,35 @@ Layout Description - Used when building an FSP driver
SecureBoot Key Transition Partition (16K)
SBKT
- 0x2BB4000
+ 0x1642000
0x4000
sideless
-
VFRT data for WOF (12MB)
WOFDATA
- 0x2BB8000
+ 0x1766000
0xC00000
sideless
-
- FIRDATA (12K)
- FIRDATA
- 0x37B8000
- 0x3000
- sideless
-
-
Memory Data (24K)
MEMD
- 0x37BB000
+ 0x2366000
0x6000
sideless
diff --git a/src/build/mkrules/hbfw/img/makefile b/src/build/mkrules/hbfw/img/makefile
index 776058bef6e..b8739a42ba2 100755
--- a/src/build/mkrules/hbfw/img/makefile
+++ b/src/build/mkrules/hbfw/img/makefile
@@ -123,7 +123,11 @@ PNOR_LAYOUT = ${pnorLayoutFSP.xml:P}
# Decide which PNOR to build
.if(${FAKEPNOR} == "")
# Parameters passed into GEN_PNOR_IMAGE_SCRIPT.
- GEN_DEFAULT_BIN_FILES = HBBL=${HBBL_IMG},HBB=${HBB_IMG},HBI=${HBI_IMG},HBRT=${HBRT_IMG},TEST=EMPTY,TESTRO=EMPTY,HBEL=EMPTY,GUARD=EMPTY,GLOBAL=EMPTY,PAYLOAD=EMPTY,CVPD=EMPTY,MVPD=EMPTY,DJVPD=EMPTY,RINGOVD=EMPTY,SBKT=EMPTY,FIRDATA=EMPTY,MEMD=${MEMD_IMG}
+ .if(${DEFAULT_PNOR} == 1)
+ GEN_DEFAULT_BIN_FILES = HBBL=${HBBL_IMG},HBB=${HBB_IMG},HBI=${HBI_IMG},HBRT=${HBRT_IMG},TEST=EMPTY,TESTRO=EMPTY,HBEL=EMPTY,GUARD=EMPTY,GLOBAL=EMPTY,PAYLOAD=EMPTY,CVPD=EMPTY,MVPD=EMPTY,DJVPD=EMPTY,RINGOVD=EMPTY,SBKT=EMPTY,FIRDATA=EMPTY,MEMD=${MEMD_IMG}
+ .else
+ GEN_DEFAULT_BIN_FILES = HBBL=${HBBL_IMG},HBB=${HBB_IMG},HBI=${HBI_IMG},HBRT=${HBRT_IMG},HBEL=EMPTY,GUARD=EMPTY,GLOBAL=EMPTY,CVPD=EMPTY,MVPD=EMPTY,DJVPD=EMPTY,RINGOVD=EMPTY,SBKT=EMPTY,MEMD=${MEMD_IMG}
+ .endif
DEFAULT_PARAMS = --build-all --emit-eccless ${TARGET_TEST:b--test} ${HB_STANDALONE:b--hb-standalone} \
${CONFIG_SECUREBOOT:b--secureboot} --systemBinFiles ${GEN_DEFAULT_BIN_FILES} \
--pnorLayout ${PNOR_LAYOUT} ${KEY_TRANSITION_PARAMS} ${CORRUPT_PARAMS} \
@@ -275,14 +279,12 @@ ZZ_MEMD_FINAL_IMG = ZZ.MEMD.bin
GEN_NIMBUS_BIN_FILES = NIMBUS:SBE=${${NIMBUS_SBE_IMG}:P},HCODE=${${NIMBUS_HCODE_IMG}:P},OCC=${${NIMBUS_OCC_IMG}:P},HBD=${${NIMBUS_HBD_IMG}:P}
GEN_CUMULUS_BIN_FILES = CUMULUS:SBE=${${CUMULUS_SBE_IMG}:P},HCODE=${${CUMULUS_HCODE_IMG}:P},OCC=${${CUMULUS_OCC_IMG}:P},HBD=${${CUMULUS_HBD_IMG}:P}
.else
- # @TODO RTC:178164 add OCC support back in
- GEN_NIMBUS_BIN_FILES = NIMBUS:SBE=${${NIMBUS_SBE_IMG}:P},HCODE=${${NIMBUS_HCODE_IMG}:P},HBD=${${NIMBUS_HBD_IMG}:P}
- GEN_CUMULUS_BIN_FILES = CUMULUS:SBE=${${CUMULUS_SBE_IMG}:P},HCODE=${${CUMULUS_HCODE_IMG}:P},HBD=${${CUMULUS_HBD_IMG}:P}
+ GEN_NIMBUS_BIN_FILES = NIMBUS:SBE=${${NIMBUS_SBE_IMG}:P},HCODE=${${NIMBUS_HCODE_IMG}:P},OCC=${${NIMBUS_OCC_IMG}:P},HBD=${${NIMBUS_HBD_IMG}:P}
+ GEN_CUMULUS_BIN_FILES = CUMULUS:SBE=${${CUMULUS_SBE_IMG}:P},HCODE=${${CUMULUS_HCODE_IMG}:P},OCC=${${CUMULUS_OCC_IMG}:P},HBD=${${CUMULUS_HBD_IMG}:P}
.endif
GEN_ZZ_BIN_FILES = ZZ:WOFDATA=${${ZZ_WOFDATA_IMG}:P},MEMD=${${ZZ_MEMD_IMG}:P}
GEN_ZEPPELIN_BIN_FILES = ZEPPELIN:WOFDATA=${${ZEPPELIN_WOFDATA_IMG}:P}
- #@TODO RTC:163810 - Put SBEC back "--systemBinFile SBEC=${${SBEC_IMG}:P}"
SYSTEM_SPECIFIC_PARAMS = --install-all --emit-eccless ${TARGET_TEST:b--test} ${CONFIG_SECUREBOOT:b--secureboot} \
--pnorLayout ${PNOR_LAYOUT} ${CORRUPT_PARAMS} ${HB_STANDALONE:b--hb-standalone} \
--systemBinFiles ${GEN_NIMBUS_BIN_FILES} \
@@ -318,14 +320,14 @@ gen_system_specific_images_bypass_cache :
gen_system_specific_images: build_sbe_partitions .PMAKE
@${MAKE:T:R} gen_system_specific_images_bypass_cache
-HOSTBOOT_DEFAULT_SECTIONS = HBBL=${HBBL_FINAL_IMG},HBB=${HBB_FINAL_IMG},HBI=${HBI_FINAL_IMG},HBRT=${HBRT_FINAL_IMG},TEST=${TEST_FINAL_IMG},TESTRO=${TESTRO_FINAL_IMG},HBEL=${HBEL_FINAL_IMG},GUARD=${GUARD_FINAL_IMG},GLOBAL=${GLOBAL_FINAL_IMG},PAYLOAD=${PAYLOAD_FINAL_IMG},CVPD=${CVPD_FINAL_IMG},MVPD=${MVPD_FINAL_IMG},DJVPD=${DJVPD_FINAL_IMG},RINGOVD=${RINGOVD_FINAL_IMG},SBKT=${SBKT_FINAL_IMG},FIRDATA=${FIRDATA_FINAL_IMG},MEMD=${MEMD_FINAL_IMG}
.if(${DEFAULT_PNOR} == 1)
+ HOSTBOOT_DEFAULT_SECTIONS = HBBL=${HBBL_FINAL_IMG},HBB=${HBB_FINAL_IMG},HBI=${HBI_FINAL_IMG},HBRT=${HBRT_FINAL_IMG},TEST=${TEST_FINAL_IMG},TESTRO=${TESTRO_FINAL_IMG},HBEL=${HBEL_FINAL_IMG},GUARD=${GUARD_FINAL_IMG},GLOBAL=${GLOBAL_FINAL_IMG},PAYLOAD=${PAYLOAD_FINAL_IMG},CVPD=${CVPD_FINAL_IMG},MVPD=${MVPD_FINAL_IMG},DJVPD=${DJVPD_FINAL_IMG},RINGOVD=${RINGOVD_FINAL_IMG},SBKT=${SBKT_FINAL_IMG},FIRDATA=${FIRDATA_FINAL_IMG},MEMD=${MEMD_FINAL_IMG}
NIMBUS_SECT = HBD=${NIMBUS_HBD_FINAL_IMG},SBE=${NIMBUS_SBE_FINAL_IMG},HCODE=${NIMBUS_HCODE_FINAL_IMG},OCC=${NIMBUS_OCC_FINAL_IMG},WOFDATA=${ZZ_WOFDATA_FINAL_IMG}
CUMULUS_SECT = HBD=${CUMULUS_HBD_FINAL_IMG},SBE=${CUMULUS_SBE_FINAL_IMG},HCODE=${CUMULUS_HCODE_FINAL_IMG},OCC=${CUMULUS_OCC_FINAL_IMG},WOFDATA=${ZEPPELIN_WOFDATA_FINAL_IMG}
.else
- # @TODO RTC:178164 add OCC support back in
- NIMBUS_SECT = HBD=${NIMBUS_HBD_FINAL_IMG},SBE=${NIMBUS_SBE_FINAL_IMG},HCODE=${NIMBUS_HCODE_FINAL_IMG},WOFDATA=${ZZ_WOFDATA_FINAL_IMG}
- CUMULUS_SECT = HBD=${CUMULUS_HBD_FINAL_IMG},SBE=${CUMULUS_SBE_FINAL_IMG},HCODE=${CUMULUS_HCODE_FINAL_IMG},WOFDATA=${ZEPPELIN_WOFDATA_FINAL_IMG}
+ HOSTBOOT_DEFAULT_SECTIONS = HBBL=${HBBL_FINAL_IMG},HBB=${HBB_FINAL_IMG},HBI=${HBI_FINAL_IMG},HBRT=${HBRT_FINAL_IMG},HBEL=${HBEL_FINAL_IMG},GUARD=${GUARD_FINAL_IMG},GLOBAL=${GLOBAL_FINAL_IMG},CVPD=${CVPD_FINAL_IMG},MVPD=${MVPD_FINAL_IMG},DJVPD=${DJVPD_FINAL_IMG},RINGOVD=${RINGOVD_FINAL_IMG},SBKT=${SBKT_FINAL_IMG},MEMD=${MEMD_FINAL_IMG}
+ NIMBUS_SECT = HBD=${NIMBUS_HBD_FINAL_IMG},SBE=${NIMBUS_SBE_FINAL_IMG},HCODE=${NIMBUS_HCODE_FINAL_IMG},OCC=${NIMBUS_OCC_FINAL_IMG},WOFDATA=${ZZ_WOFDATA_FINAL_IMG}
+ CUMULUS_SECT = HBD=${CUMULUS_HBD_FINAL_IMG},SBE=${CUMULUS_SBE_FINAL_IMG},HCODE=${CUMULUS_HCODE_FINAL_IMG},OCC=${CUMULUS_OCC_FINAL_IMG},WOFDATA=${ZEPPELIN_WOFDATA_FINAL_IMG}
.endif
PNOR_IMG_INFO = \
nimbus.pnor:${PNOR_LAYOUT}:${NIMBUS_SECT},${HOSTBOOT_DEFAULT_SECTIONS} \
diff --git a/src/include/usr/pnor/pnorif.H b/src/include/usr/pnor/pnorif.H
index b6f616b921a..5dd4a68e844 100644
--- a/src/include/usr/pnor/pnorif.H
+++ b/src/include/usr/pnor/pnorif.H
@@ -263,6 +263,18 @@ errlHndl_t readHeaderMagic(
size_t i_size,
void* o_pData);
+// @TODO CQ:SW400352 remove function
+/**
+ * @brief Determine if a PNOR section is empty by checking if first PAGE
+ * is all 0xFF's or 0x00's depending on ECC or not.
+ *
+ * @param[in] i_secId ID of requested section
+ *
+ * @return bool - True if the section is empty (all 0xFF's or 0x00's)
+ * False otherwise.
+ */
+bool isSectionEmpty(const PNOR::SectionId i_section);
+
} // PNOR
#endif
diff --git a/src/usr/pnor/pnor_common.C b/src/usr/pnor/pnor_common.C
index 20d6bd7603e..3b0195756c5 100644
--- a/src/usr/pnor/pnor_common.C
+++ b/src/usr/pnor/pnor_common.C
@@ -533,3 +533,36 @@ errlHndl_t PNOR::hasKnownHeader(
return pError;
}
+// @TODO CQ:SW400352 remove function
+bool PNOR::isSectionEmpty(const PNOR::SectionId i_section)
+{
+ errlHndl_t l_errhdl = nullptr;
+ bool l_result = true;
+
+ PNOR::SectionInfo_t l_sectionInfo;
+ l_errhdl = PNOR::getSectionInfo( i_section, l_sectionInfo );
+ if (l_errhdl)
+ {
+ // If section is not in PNOR, just delete error and return false
+ delete l_errhdl;
+ l_errhdl = nullptr;
+ }
+ else
+ {
+ std::array empty_buffer{};
+ // Empty ECC sections are filled with 0xFF's to ensure good ECC
+ if (l_sectionInfo.eccProtected)
+ {
+ empty_buffer.fill(0xFF);
+ }
+
+ l_result = memcmp(&empty_buffer,
+ reinterpret_cast(l_sectionInfo.vaddr),
+ sizeof(empty_buffer)) ==0;
+ }
+
+ TRACFCOMP(g_trac_pnor, "PNOR::isSectionEmpty: i_section=%s isSectionEmpty=%d",
+ PNOR::SectionIdToString(i_section), l_result);
+
+ return l_result;
+}
diff --git a/src/usr/runtime/populate_hbruntime.C b/src/usr/runtime/populate_hbruntime.C
index 450ff22fd31..b4af2f3d6f8 100644
--- a/src/usr/runtime/populate_hbruntime.C
+++ b/src/usr/runtime/populate_hbruntime.C
@@ -1169,15 +1169,11 @@ errlHndl_t populate_HbRsvMem(uint64_t i_nodeId)
// -- HCODE
// -- Non-verified Images
/// -- RINGOVD
- // @TODO RTC:178164 add OCC PNOR support for fsp back
- if (!INITSERVICE::spBaseServicesEnabled())
+ l_elog = hbResvLoadSecureSection(PNOR::OCC, i_nodeId,
+ l_prevDataAddr, l_prevDataSize);
+ if (l_elog)
{
- l_elog = hbResvLoadSecureSection(PNOR::OCC, i_nodeId,
- l_prevDataAddr, l_prevDataSize);
- if (l_elog)
- {
- break;
- }
+ break;
}
l_elog = hbResvLoadSecureSection(PNOR::WOFDATA, i_nodeId,
l_prevDataAddr, l_prevDataSize);
diff --git a/src/usr/util/runtime/utillidmgr_rt.C b/src/usr/util/runtime/utillidmgr_rt.C
index 2fe72d65589..cbaaac3fa95 100644
--- a/src/usr/util/runtime/utillidmgr_rt.C
+++ b/src/usr/util/runtime/utillidmgr_rt.C
@@ -327,14 +327,6 @@ const uint32_t * UtilLidMgr::getLidList(size_t * o_num)
bool UtilLidMgr::lidInHbResvMem(const uint32_t i_lidId) const
{
- // @TODO RTC:178164 Remove this and add OCC PNOR support for fsp back
- // hostboot could not verify it from pnor, so it is not in hb resv meomory
- if (iv_spBaseServicesEnabled &&
- (i_lidId == Util::OCC_LIDID || i_lidId == Util::OCC_CONTAINER_LIDID))
- {
- return false;
- }
-
return i_lidId == Util::OCC_LIDID ||
i_lidId == Util::OCC_CONTAINER_LIDID ||
i_lidId == Util::WOF_LIDID ||
diff --git a/src/usr/util/utillidpnor.C b/src/usr/util/utillidpnor.C
index 1545ffc57b6..48381e0d767 100644
--- a/src/usr/util/utillidpnor.C
+++ b/src/usr/util/utillidpnor.C
@@ -106,6 +106,7 @@ bool UtilLidMgr::getLidPnorSectionInfo(uint32_t i_lidId,
// Search if a lid id maps to pnor section
auto l_secId = Util::getLidPnorSection(static_cast(i_lidId));
+ do {
// LidToPnor will return INVALID_SECITON if no mapping found
if (l_secId == PNOR::INVALID_SECTION)
{
@@ -156,7 +157,17 @@ bool UtilLidMgr::getLidPnorSectionInfo(uint32_t i_lidId,
}
#endif
#endif
+ // @TODO CQ:SW400352 remove this check
+ if ((l_secId == PNOR::OCC) && PNOR::isSectionEmpty(l_secId))
+ {
+ UTIL_FT("UtilLidMgr::getLidPnorSection PNOR section %s is empty get data from LID transfer",
+ PNOR::SectionIdToString(l_secId));
+ l_lidInPnor = false;
+ break;
+ }
}
}
+ } while(0);
+
return l_lidInPnor;
}
\ No newline at end of file