diff options
-rw-r--r-- | src/bootloader/bootloader.C | 17 | ||||
-rw-r--r-- | src/kernel/bltohbdatamgr.C | 10 |
2 files changed, 16 insertions, 11 deletions
diff --git a/src/bootloader/bootloader.C b/src/bootloader/bootloader.C index d7e092012..5d5fe2681 100644 --- a/src/bootloader/bootloader.C +++ b/src/bootloader/bootloader.C @@ -52,6 +52,10 @@ extern char bootloader_end_address; +// XSCOM/LPC BAR constants +const uint64_t XSCOM_BAR_MASK = 0xFF000003FFFFFFFFULL; +const uint64_t LPC_BAR_MASK = 0xFF000000FFFFFFFFULL; + namespace Bootloader{ /** @@ -129,9 +133,10 @@ namespace Bootloader{ // Copy values for MMIO BARs g_blData->blToHbData.xscomBAR - = /* (l_blConfigData->version >= MMIO_BARS_ADDED) + = ((l_blConfigData->version >= MMIO_BARS_ADDED) && + ((l_blConfigData->xscomBAR & XSCOM_BAR_MASK) == 0)) ? l_blConfigData->xscomBAR - : @fixme-RTC:149250-Remove */ MMIO_GROUP0_CHIP0_XSCOM_BASE_ADDR; + : MMIO_GROUP0_CHIP0_XSCOM_BASE_ADDR; /* lpcBAR already copied in main() */ // Only set rest of BlToHbData if SecureROM is valid @@ -296,13 +301,13 @@ namespace Bootloader{ // @TODO RTC:138268 Support multiple sides of PNOR in bootloader // Copy SBE BL shared data into BL HB shared data -/* const auto l_blConfigData = reinterpret_cast<BootloaderConfigData_t *>( + const auto l_blConfigData = reinterpret_cast<BootloaderConfigData_t *>( SBE_HB_COMM_ADDR); - @fixme-RTC:149250-Remove */ g_blData->blToHbData.lpcBAR - = /* (l_blConfigData->version >= MMIO_BARS_ADDED) + = ((l_blConfigData->version >= MMIO_BARS_ADDED) && + ((l_blConfigData->lpcBAR & LPC_BAR_MASK) == 0)) ? l_blConfigData->lpcBAR - : @fixme-RTC:149250-Remove */ MMIO_GROUP0_CHIP0_LPC_BASE_ADDR; + : MMIO_GROUP0_CHIP0_LPC_BASE_ADDR; //pnorEnd is the end of flash, which is base of lpc, plus //the offset of the FW space, plus the TOP memory address in FW space diff --git a/src/kernel/bltohbdatamgr.C b/src/kernel/bltohbdatamgr.C index 1bc076628..1fa211381 100644 --- a/src/kernel/bltohbdatamgr.C +++ b/src/kernel/bltohbdatamgr.C @@ -145,7 +145,9 @@ printk("Version=%lX\n",i_data.version); } // Ensure Bootloader to HB structure has the MMIO members - if( iv_data.version >= Bootloader::BLTOHB_MMIOBARS ) + // NOTE: BLTOHB_MMIOBARS version may not be sufficient to ensure that BARs + // were set correctly, instead use BLTOHB_SECURE_OVERRIDES version. + if( iv_data.version >= Bootloader::BLTOHB_SECURE_OVERRIDES ) { printk("lpc=%lX, xscom=%lX\n", i_data.lpcBAR, i_data.xscomBAR ); kassert(i_data.lpcBAR>0); @@ -161,10 +163,8 @@ printk("lpc=%lX, xscom=%lX\n", i_data.lpcBAR, i_data.xscomBAR ); } - //@fixme-RTC:149250-Remove this hack - iv_data.lpcBAR = MMIO_GROUP0_CHIP0_LPC_BASE_ADDR; - iv_data.xscomBAR = MMIO_GROUP0_CHIP0_XSCOM_BASE_ADDR; - printk( "Use default LPC/XSCOM\n" ); +printk("lpc=%lX, xscom=%lX, iv_data=%p\n", iv_data.lpcBAR, iv_data.xscomBAR, + static_cast<void *>(&iv_data) ); // Size of data that needs to be preserved and pinned. |