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