summaryrefslogtreecommitdiffstats
path: root/src/kernel/misc.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/kernel/misc.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/kernel/misc.C')
-rw-r--r--src/kernel/misc.C47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/kernel/misc.C b/src/kernel/misc.C
index e280a1527..6d7e866f6 100644
--- a/src/kernel/misc.C
+++ b/src/kernel/misc.C
@@ -314,6 +314,51 @@ namespace KernelMisc
kassert(false);
}
+ int expand_half_cache()
+ {
+ static bool executed = false;
+
+ if (executed) // Why are we being called a second time?
+ {
+ return -EFAULT;
+ }
+
+ uint64_t startAddr = 512*KILOBYTE;
+ uint64_t endAddr = 1*MEGABYTE;
+
+ size_t cache_columns = 0;
+
+ switch(CpuID::getCpuType())
+ {
+ case CORE_POWER8_MURANO:
+ case CORE_POWER8_VENICE:
+ cache_columns = 4;
+ break;
+
+ default:
+ kassert(false);
+ break;
+ }
+
+ for (size_t i = 0; i < cache_columns; i++)
+ {
+ size_t offset = i * MEGABYTE;
+ populate_cache_lines(
+ reinterpret_cast<uint64_t*>(startAddr + offset),
+ reinterpret_cast<uint64_t*>(endAddr + offset));
+
+ PageManager::addMemory(startAddr + offset,
+ (512*KILOBYTE)/PAGESIZE);
+ }
+
+ executed = true;
+
+ KernelMemState::setMemScratchReg(KernelMemState::MEM_CONTAINED_L3,
+ KernelMemState::HALF_CACHE);
+
+ return 0;
+ }
+
int expand_full_cache()
{
static bool executed = false;
@@ -334,8 +379,10 @@ namespace KernelMisc
( VmmManager::INITIAL_MEM_SIZE ) ;
endAddr =
reinterpret_cast<uint64_t*>(8 * MEGABYTE);
+ break;
default:
+ kassert(false);
break;
}
OpenPOWER on IntegriCloud