diff options
author | Christian Geddes <crgeddes@us.ibm.com> | 2019-11-20 15:50:32 -0600 |
---|---|---|
committer | William G Hoffa <wghoffa@us.ibm.com> | 2019-12-03 16:48:31 -0600 |
commit | 7cb71794b276a25ec3df8ae8b4844ff1be42234a (patch) | |
tree | 437ea92f08a159a5a5ea7d590124ab6485e5a549 /src/kernel | |
parent | 2f808f21c2976c94688843b7a6b32fbcd88f5e38 (diff) | |
download | blackbird-hostboot-7cb71794b276a25ec3df8ae8b4844ff1be42234a.tar.gz blackbird-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.C | 11 |
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 { |