summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcrgeddes <crgeddes@us.ibm.com>2017-08-09 13:42:03 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-08-18 10:26:41 -0400
commitd53d9f226aaa8080eb65717ae895dac06a855bf8 (patch)
treef94c901f3704d12d5e0999345a76faf8401e203b
parent6a040451c75c888ad1ecca9e10988c119cbbba84 (diff)
downloadtalos-hostboot-d53d9f226aaa8080eb65717ae895dac06a855bf8.tar.gz
talos-hostboot-d53d9f226aaa8080eb65717ae895dac06a855bf8.zip
Pass Key-Addr info through bootloader
RTC: 165369 Change-Id: If15f6ccc7a7c3649b8352467ae10173a15f3f501 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/44426 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Reviewed-by: Martin Gloff <mgloff@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
-rw-r--r--src/bootloader/bootloader.C32
-rw-r--r--src/build/debug/Hostboot/BlData.pm2
-rw-r--r--src/include/bootloader/bootloader_data.H2
-rw-r--r--src/include/bootloader/bootloaderif.H29
-rw-r--r--src/include/kernel/bltohbdatamgr.H7
-rw-r--r--src/kernel/bltohbdatamgr.C12
6 files changed, 78 insertions, 6 deletions
diff --git a/src/bootloader/bootloader.C b/src/bootloader/bootloader.C
index f3ba3d525..55969fa0b 100644
--- a/src/bootloader/bootloader.C
+++ b/src/bootloader/bootloader.C
@@ -110,6 +110,9 @@ namespace Bootloader{
switch(l_blConfigData->version)
{
// Add cases as additional versions are created
+ case ADDR_STASH_SUPPORT_ADDED:
+ g_blData->blToHbData.version = BLTOHB_KEYADDR;
+ break;
default:
g_blData->blToHbData.version = BLTOHB_SIZE;
break;
@@ -147,15 +150,33 @@ namespace Bootloader{
// Set Bootloader preceived size of structure
g_blData->blToHbData.sizeOfStructure = sizeof(BlToHbData);
}
+ }
+
+ void setKeyAddrMapData(const void * i_pHbbSrc)
+ {
+ // Read SBE HB shared data.
+ const auto l_blConfigData = reinterpret_cast<BootloaderConfigData_t *>(
+ SBE_HB_COMM_ADDR);
+ // Set copy keyaddr stash data
+ // Ensure SBE to Bootloader structure has key addr stash info
+ if (l_blConfigData->version >= ADDR_STASH_SUPPORT_ADDED)
+ {
+ memcpy(&g_blData->blToHbData.keyAddrStashData,
+ &l_blConfigData->pair,
+ sizeof(keyAddrPair_t));
+ }
+ }
+
+ void copyBlToHbtoHbLocation()
+ {
// Place BlToHb into proper location for HB to find
memcpy(reinterpret_cast<void *>(BLTOHB_COMM_DATA_ADDR_LATEST |
IGNORE_HRMOR_MASK),
- &g_blData->blToHbData,
- sizeof(BlToHbData));
+ &g_blData->blToHbData,
+ sizeof(BlToHbData));
}
-
/**
* @brief Verify Container against system hash keys
*
@@ -366,6 +387,11 @@ namespace Bootloader{
// Get Secure Data from SBE HBBL communication area
setSecureData(l_src_addr);
+ // Get Key-Addr Mapping from SBE HBBL communication area
+ setKeyAddrMapData(l_src_addr);
+
+ copyBlToHbtoHbLocation();
+
// ROM verification of HBB image
verifyContainer(l_src_addr);
diff --git a/src/build/debug/Hostboot/BlData.pm b/src/build/debug/Hostboot/BlData.pm
index 76dc6875f..0a4b91329 100644
--- a/src/build/debug/Hostboot/BlData.pm
+++ b/src/build/debug/Hostboot/BlData.pm
@@ -208,7 +208,7 @@ sub main
my $blToHbAddr = $dataAddr + $dataOffset;
my $blToHbAddrStr = sprintf("0x%08X", $blToHbAddr);
- my $blToHbSize = 99;
+ my $blToHbSize = 171;
my $blToHb = ::readData($blToHbAddr,$blToHbSize);
my $blToHbData = formatData($blToHb);
$dataOffset += ::alignUp($blToHbSize, 16);
diff --git a/src/include/bootloader/bootloader_data.H b/src/include/bootloader/bootloader_data.H
index 0e65e6408..2e302c20a 100644
--- a/src/include/bootloader/bootloader_data.H
+++ b/src/include/bootloader/bootloader_data.H
@@ -91,7 +91,7 @@ namespace Bootloader{
// Object that will be stored where the SBE HB structure indicates
BlToHbData blToHbData;
uint8_t bl_reserved5[(512 - sizeof(BlToHbData)) % 16];
- static_assert( sizeof(BlToHbData) == 99, "BlToHbData "
+ static_assert( sizeof(BlToHbData) == 171, "BlToHbData "
"size changed. Check bootloader_data.H alignment. "
"Fix BlData.pm processing.");
} blData_t;
diff --git a/src/include/bootloader/bootloaderif.H b/src/include/bootloader/bootloaderif.H
index 82410235d..38b155230 100644
--- a/src/include/bootloader/bootloaderif.H
+++ b/src/include/bootloader/bootloaderif.H
@@ -43,6 +43,9 @@ namespace Bootloader{
// Size of PNOR partition without ECC, page algined down, minus 4K header
#define MAX_HBB_SIZE (904 * KILOBYTE)
+// Max Pairs
+#define MAX_ROW_COUNT 8
+
// Location of running copy of HBB
#ifdef BOOTLOADER
#define HBB_HRMOR (getHRMOR() - ( 2*MEGABYTE))
@@ -70,6 +73,7 @@ enum BlToHbDataVersion
BLTOHB_MMIOBARS = 0x0000000900000003,
BLTOHB_SECURE_OVERRIDES = 0x0000000900000004,
BLTOHB_SIZE = 0x0000000900000005,
+ BLTOHB_KEYADDR = 0x0000000900000006,
};
enum
@@ -79,6 +83,27 @@ enum
INITIAL_BLTOHB_PADDED_SIZE = 256
};
+
+//-----------------------------------------------------------------------------------
+// Structure definitions
+//-----------------------------------------------------------------------------------
+
+
+// To keep all the Stashed Keys & Addrs together within this struct
+struct keyAddrPair_t
+{
+ keyAddrPair_t(uint8_t initVal) {
+ for(uint8_t i=0; i < MAX_ROW_COUNT; i++)
+ {
+ key[i] = initVal;
+ addr[i] = initVal;
+ }
+ }
+ uint8_t key[MAX_ROW_COUNT];
+ uint64_t addr[MAX_ROW_COUNT];
+} __attribute__((packed));
+
+
/** @struct BlToHbData
* @brief Shared data between bootloader and Hostboot.
*
@@ -98,7 +123,7 @@ struct BlToHbData
xscomBAR(MMIO_GROUP0_CHIP0_XSCOM_BASE_ADDR),
lpcBAR(MMIO_GROUP0_CHIP0_LPC_BASE_ADDR),
securityOverride(0), allowAttrOverrides(0),
- sizeOfStructure(0) {}
+ sizeOfStructure(0), keyAddrStashData(0) {}
// Simple way to tell if data is valid
uint64_t eyeCatch;
@@ -130,6 +155,8 @@ struct BlToHbData
bool allowAttrOverrides;
// Size of this structure (Use for backwards compatibility)
size_t sizeOfStructure;
+ //keyAddr stash data
+ keyAddrPair_t keyAddrStashData;
} __attribute__((packed));
/**
diff --git a/src/include/kernel/bltohbdatamgr.H b/src/include/kernel/bltohbdatamgr.H
index 42ded91cc..cbbdb40d2 100644
--- a/src/include/kernel/bltohbdatamgr.H
+++ b/src/include/kernel/bltohbdatamgr.H
@@ -210,6 +210,13 @@ class BlToHbDataManager
* @return size_t BlToHbData size
*/
const size_t getBlToHbDataSize() const;
+
+ /*
+ * @brief Returns internal BlToHbData keyAddr pairs
+ *
+ * @return keyAddrPair_t Key Address Pairs Struct
+ */
+ const Bootloader::keyAddrPair_t getKeyAddrPairs() const;
};
// Extern global instance of the class
diff --git a/src/kernel/bltohbdatamgr.C b/src/kernel/bltohbdatamgr.C
index 537958214..3d33715b2 100644
--- a/src/kernel/bltohbdatamgr.C
+++ b/src/kernel/bltohbdatamgr.C
@@ -182,6 +182,13 @@ printk("lpc=%lX, xscom=%lX, iv_data=%p\n", iv_data.lpcBAR, iv_data.xscomBAR,
iv_data.sizeOfStructure = Bootloader::INITIAL_BLTOHB_PADDED_SIZE;
}
+ if(iv_data.version >= Bootloader::BLTOHB_KEYADDR)
+ {
+ memcpy(&iv_data.keyAddrStashData,
+ &i_data.keyAddrStashData,
+ sizeof(Bootloader::keyAddrPair_t));
+ }
+
// Size of data that needs to be preserved and pinned.
iv_preservedSize = ALIGN_PAGE(iv_data.secureRomSize +
iv_data.hwKeysHashSize +
@@ -346,6 +353,11 @@ const uint64_t BlToHbDataManager::getXscomBAR() const
return reinterpret_cast<uint64_t>(iv_data.xscomBAR);
}
+const Bootloader::keyAddrPair_t BlToHbDataManager::getKeyAddrPairs() const
+{
+ return iv_data.keyAddrStashData;
+}
+
const size_t BlToHbDataManager::getBlToHbDataSize() const
{
return iv_data.sizeOfStructure;
OpenPOWER on IntegriCloud