diff options
-rw-r--r-- | src/include/usr/sbeio/sbeioif.H | 1 | ||||
-rwxr-xr-x | src/usr/targeting/targetservicestart.C | 25 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/include/usr/sbeio/sbeioif.H b/src/include/usr/sbeio/sbeioif.H index 357a29a95..a951fe4a4 100644 --- a/src/include/usr/sbeio/sbeioif.H +++ b/src/include/usr/sbeio/sbeioif.H @@ -32,6 +32,7 @@ namespace SBEIO enum KeyAddrStashKeys { RSV_MEM_ATTR_ADDR = 0x01, //Start at non-zero + HYPERVISOR_HRMOR = 0x02, //On SBE side struct is defaulted so that //Keys are 0xFF and Vals are 0xFFFFFFFFFFFFFFFF //So a key w/ FF means its empty or at its default val diff --git a/src/usr/targeting/targetservicestart.C b/src/usr/targeting/targetservicestart.C index 4c06c6f52..5eb625d52 100755 --- a/src/usr/targeting/targetservicestart.C +++ b/src/usr/targeting/targetservicestart.C @@ -64,6 +64,7 @@ #include <lpc/lpcif.H> #include <xscom/xscomif.H> #include <bootloader/bootloaderif.H> +#include <sbeio/sbeioif.H> #ifdef CONFIG_DRTM #include <secureboot/drtm.H> @@ -379,6 +380,30 @@ static void initializeAttributes(TargetService& i_targetService, l_pTopLevel->setAttr<ATTR_HB_RSV_MEM_NEXT_SECTION>(0); l_pTopLevel->setAttr<ATTR_ATTN_CHK_ALL_PROCS>(1); + //It is possible that the hypervisor moved the HRMOR + //The SBE should have read the HRMOR value from the master + //core prior to stopping its clocks and passed that + //value to the bootloader. The bootloader passes this to + //HB via the BlToHbDataManager + // Setup physical TOC address + uint64_t l_hyp_hrmor = 0; + + Bootloader::keyAddrPair_t l_keyAddrPairs = + g_BlToHbDataManager.getKeyAddrPairs(); + + for (uint8_t keyIndex = 0; keyIndex < MAX_ROW_COUNT; keyIndex++) + { + if(l_keyAddrPairs.key[keyIndex] == SBEIO::HYPERVISOR_HRMOR) + { + l_hyp_hrmor = l_keyAddrPairs.addr[keyIndex]; + } + } + + if(l_hyp_hrmor) + { + l_pTopLevel->setAttr<ATTR_PAYLOAD_BASE>(l_hyp_hrmor); + } + TARGETING::PredicateCTM l_chipFilter(CLASS_CHIP, TYPE_PROC); TARGETING::PredicateIsFunctional l_functional; TARGETING::PredicatePostfixExpr l_functionalChips; |