diff options
Diffstat (limited to 'src/usr/sbe')
-rw-r--r-- | src/usr/sbe/sbe_update.C | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C index 5c4068631..b3366adf0 100644 --- a/src/usr/sbe/sbe_update.C +++ b/src/usr/sbe/sbe_update.C @@ -962,6 +962,7 @@ namespace SBE ///////////////////////////////////////////////////////////////////// errlHndl_t procCustomizeSbeImg(TARGETING::Target* i_target, + void* i_hwImgPtr, void* i_sbeImgPtr, size_t i_maxImgSize, void* io_imgPtr, @@ -1035,6 +1036,7 @@ namespace SBE FAPI_INVOKE_HWP( err, p9_xip_customize, l_fapiTarg, + i_hwImgPtr, io_imgPtr, //image in/out tmpImgSize, (void*)RING_SEC_VADDR, @@ -1045,6 +1047,8 @@ namespace SBE (uint32_t)MAX_RING_BUF_SIZE, (void*)RING_BUF2_VADDR, (uint32_t)MAX_RING_BUF_SIZE, + (void*)RING_BUF3_VADDR, + (uint32_t)MAX_RING_BUF_SIZE, procIOMask ); // Bits(8:31) = EC00:EC23 // Check for no error and use of input cores @@ -1705,6 +1709,36 @@ namespace SBE } ///////////////////////////////////////////////////////////////////// + errlHndl_t sbeLoadHcode(char*& o_hcodeAddr) + { + errlHndl_t l_errl = NULL; + PNOR::SectionInfo_t l_info; + + do + { + + // Get HCODE PNOR section info from PNOR RP + l_errl = PNOR::getSectionInfo( PNOR::HCODE, l_info ); + if( l_errl ) + { + //No need to commit error here, it gets handled later + //just break out to escape this function + break; + } + + o_hcodeAddr = reinterpret_cast<char*>(l_info.vaddr); + + TRACUCOMP( g_trac_sbe, + ERR_MRK"sbeLoadHcode() - Error from " + "HCODE addr = 0x%p ", + o_hcodeAddr); + + } while ( 0 ); + + return l_errl; + } + + ///////////////////////////////////////////////////////////////////// errlHndl_t getSbeInfoState(sbeTargetState_t& io_sbeState) { @@ -1965,7 +1999,25 @@ namespace SBE /* Calculate CRC of the image */ /*******************************************/ size_t sbeImgSize = 0; + + + // get a pointer to the hcode for the .overlays + char* l_hCodeAddr = NULL; + + err = sbeLoadHcode(l_hCodeAddr); + + if(err) + { + TRACFCOMP( g_trac_sbe, ERR_MRK"ge() - " + "Error from sbeLoadHcode(), " + "RC=0x%X, PLID=0x%lX", + ERRL_GETRC_SAFE(err), + ERRL_GETPLID_SAFE(err)); + break; + } + err = procCustomizeSbeImg(io_sbeState.target, + l_hCodeAddr, // HCODE in memory sbeHbblImgPtr, //SBE, HBBL in memory sbeHbblImgSize, reinterpret_cast<void*> @@ -1982,6 +2034,8 @@ namespace SBE break; } + + // Verify that HW Key Hash is included in customized image SHA512_t hash = {0}; err = getHwKeyHashFromSbeImage(io_sbeState.target, // ignored @@ -3800,6 +3854,14 @@ namespace SBE TRACFCOMP( g_trac_sbe, ERR_MRK,"createSbeImageVmmSpace() - Error from loadSecureSection(PNOR::HB_BOOTLOADER)"); break; } + + err = loadSecureSection(PNOR::HCODE); + + if (err) + { + TRACFCOMP( g_trac_sbe, ERR_MRK,"createSbeImageVmmSpace() - Error from loadSecureSection(PNOR::HCODE)"); + break; + } #endif }while(0); @@ -3911,6 +3973,13 @@ namespace SBE TRACFCOMP( g_trac_sbe, ERR_MRK,"cleanupSbeImageVmmSpace() - Error from unloadSecureSection(PNOR::HB_BOOTLOADER)"); break; } + err = unloadSecureSection(PNOR::HCODE); + if (err) + { + TRACFCOMP( g_trac_sbe, ERR_MRK,"cleanupSbeImageVmmSpace() - Error from unloadSecureSection(PNOR::HCODE)"); + break; + } + #endif }while(0); |