summaryrefslogtreecommitdiffstats
path: root/src/kernel/misc.C
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2011-08-01 11:58:16 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2011-08-10 13:59:31 -0500
commit35f739456cefd1540e0aa4a42722a73a56a6b661 (patch)
tree99a7272d36b8933b1d100d7edef62756f1aecedd /src/kernel/misc.C
parent791725b105cb8e61c9f93af844a80af12d07aad8 (diff)
downloadblackbird-hostboot-35f739456cefd1540e0aa4a42722a73a56a6b661.tar.gz
blackbird-hostboot-35f739456cefd1540e0aa4a42722a73a56a6b661.zip
Update scratch SPR #s for P8.
Change-Id: Ia063a66b705b3272b7578ece420c84ac9c4c3d26 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/224 Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Tested-by: Jenkins Server
Diffstat (limited to 'src/kernel/misc.C')
-rw-r--r--src/kernel/misc.C43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/kernel/misc.C b/src/kernel/misc.C
new file mode 100644
index 000000000..56f5f563c
--- /dev/null
+++ b/src/kernel/misc.C
@@ -0,0 +1,43 @@
+#include <kernel/misc.H>
+#include <kernel/cpumgr.H>
+#include <kernel/cpuid.H>
+#include <kernel/console.H>
+
+namespace KernelMisc
+{
+ void shutdown()
+ {
+ // Update scratch SPR for shutdown status.
+ cpu_t* c = CpuManager::getCurrentCPU();
+ if (c->master)
+ {
+ register uint64_t status = CpuManager::getShutdownStatus();
+ printk("Shutdown Requested. Status = 0x%lx\n", status);
+
+ register uint64_t scratch_address = 0; // Values from PervSpec
+ switch(CpuID::getCpuType())
+ {
+ case CORE_POWER8_SALERNO:
+ case CORE_POWER8_VENICE:
+ scratch_address = 0x40;
+ break;
+
+ case CORE_POWER7:
+ case CORE_POWER7_PLUS:
+ default:
+ scratch_address = 0x20;
+ break;
+ }
+
+ asm volatile("mtspr 276, %0\n"
+ "isync\n"
+ "mtspr 277, %1"
+ :: "r" (scratch_address), "r" (status));
+ }
+
+ while(1)
+ {
+ doze();
+ }
+ }
+};
OpenPOWER on IntegriCloud