summaryrefslogtreecommitdiffstats
path: root/src/usr/secureboot/base/header.C
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2013-03-26 11:23:47 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-06-14 09:09:09 -0500
commite89e72d2f8a2efe86acad95ed0769aa7a8fe64ae (patch)
tree5541b72a698f58757ab2fe36b1a264fff6bcb3a2 /src/usr/secureboot/base/header.C
parent92255af10842c672550a586d342c67ac1c7e11ca (diff)
downloadtalos-hostboot-e89e72d2f8a2efe86acad95ed0769aa7a8fe64ae.tar.gz
talos-hostboot-e89e72d2f8a2efe86acad95ed0769aa7a8fe64ae.zip
Secureboot memory layout support.
* Start kernel in 1/4 cache mode per Secureboot. * Copy Secureboot header for base image for later use. * Blind-purge bottom half of cache. * Add bottom of cache into memory maps for 1/2 cache mode. RTC: 64762 Change-Id: I1b45f30a2d45c9709d4fd486cfe0ca2ce86b051c Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3773 Reviewed-by: Michael Baiocchi <baiocchi@us.ibm.com> Tested-by: Jenkins Server Reviewed-by: ADAM R. MUHLE <armuhle@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/secureboot/base/header.C')
-rw-r--r--src/usr/secureboot/base/header.C57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/usr/secureboot/base/header.C b/src/usr/secureboot/base/header.C
new file mode 100644
index 000000000..00f808e1b
--- /dev/null
+++ b/src/usr/secureboot/base/header.C
@@ -0,0 +1,57 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/secureboot/base/header.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#include "header.H"
+#include <sys/mm.h>
+#include <sys/mmio.h>
+#include <kernel/console.H>
+
+namespace SECUREBOOT
+{
+ void Header::loadBaseHeader()
+ {
+ // Calculate original address of the secureboot header.
+ // Zero is purposefully not mapped into the VMM tables, so we
+ // can't use that for the virtual-to-real translation. Since
+ // this object is in the base image, EA = HRMOR | PA, so we can
+ // use PA - EA to find the HRMOR.
+ uint64_t addr = mm_virt_to_phys(this) -
+ reinterpret_cast<uint64_t>(this);
+ addr -= PAGESIZE;
+
+ // Map in the header.
+ void* origHeader = mm_block_map(reinterpret_cast<void*>(addr),
+ PAGESIZE);
+
+ // Copy header to a save area.
+ // In the future we might want to just extract pieces of the
+ // header. The header is important when we start updating
+ // the TPM PCRs.
+ iv_data = malloc(PAGESIZE);
+ memcpy(iv_data, origHeader, PAGESIZE);
+
+ // Unmap the header.
+ mm_block_unmap(origHeader);
+
+ return;
+ }
+}
OpenPOWER on IntegriCloud