summaryrefslogtreecommitdiffstats
path: root/src/kernel
diff options
context:
space:
mode:
authorChristian Geddes <crgeddes@us.ibm.com>2019-11-20 15:50:32 -0600
committerWilliam G Hoffa <wghoffa@us.ibm.com>2019-12-03 16:48:31 -0600
commit7cb71794b276a25ec3df8ae8b4844ff1be42234a (patch)
tree437ea92f08a159a5a5ea7d590124ab6485e5a549 /src/kernel
parent2f808f21c2976c94688843b7a6b32fbcd88f5e38 (diff)
downloadtalos-hostboot-7cb71794b276a25ec3df8ae8b4844ff1be42234a.tar.gz
talos-hostboot-7cb71794b276a25ec3df8ae8b4844ff1be42234a.zip
Correct ptr math and force CI i/o in kernal for machchk escalation
When we take machine checks in hostboot we will escalate them to a checkstop by setting bit 31 in the PB Fir reg 0x5012000. This is done via xscom in some kernel code. There were 2 bugs found in this path. The first was in how we were calculating the MMIO addressed used to perform the xscom. The other issue was that we were not forcing the kernel code to perform a cache-inhibited store. This commit addressed both of these problems. Change-Id: I41871fa754cbedf4cdb913711ce02a00f0213334 CQ: SW481030 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/87539 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com> Reviewed-by: Nicholas E Bofferding <bofferdn@us.ibm.com> Reviewed-by: William G Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/machchk.C11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/kernel/machchk.C b/src/kernel/machchk.C
index d17c1ff90..73f5831b6 100644
--- a/src/kernel/machchk.C
+++ b/src/kernel/machchk.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2018 */
+/* Contributors Listed Below - COPYRIGHT 2013,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -180,7 +180,14 @@ void forceCheckstop()
{
printk( "Forcing a xstop with %p = %.16lX\n",
g_xstopRegPtr, g_xstopRegValue );
- *g_xstopRegPtr = g_xstopRegValue;
+
+ // Per PowerPC ISA :
+ // Store Doubleword Caching Inhibited Indexed
+ // stdcix RS,RA,RB
+ // let the effective address (EA) be the sum(RA|0)+ (RB).
+ // (RS) is stored into the doubleword in storage addressed by EA
+ asm volatile("stdcix %0,0,%1"
+ :: "r" (g_xstopRegValue) , "r" (reinterpret_cast <uint64_t>(g_xstopRegPtr)));
}
else
{
OpenPOWER on IntegriCloud