summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/bootloader/bootloader.C17
-rw-r--r--src/kernel/bltohbdatamgr.C10
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.
OpenPOWER on IntegriCloud