summaryrefslogtreecommitdiffstats
path: root/src/kernel
diff options
context:
space:
mode:
authorDean Sanner <dsanner@us.ibm.com>2013-07-16 14:58:43 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-08-21 15:38:53 -0500
commitb814311a6dc122e761336881130eace63d3533e7 (patch)
tree1330190b59abbe6fc094de1b5afda87abacc100b /src/kernel
parenta6f46d0a9461b96781bc85c9fd82c24d14b5ce42 (diff)
downloadtalos-hostboot-b814311a6dc122e761336881130eace63d3533e7.tar.gz
talos-hostboot-b814311a6dc122e761336881130eace63d3533e7.zip
Handle interrupts on MPIPL
Change-Id: I315d5c802819bf6f16cd6adbffe77530bd42699a Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5427 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/intmsghandler.C14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/kernel/intmsghandler.C b/src/kernel/intmsghandler.C
index 4a9ae26e7..03b8996d3 100644
--- a/src/kernel/intmsghandler.C
+++ b/src/kernel/intmsghandler.C
@@ -139,6 +139,20 @@ void InterruptMsgHdlr::handleInterrupt()
// by writing the xirr back with the value read.
printk("XIRR @ %lx = %x\n",xirrAddress,xirr);
+
+ //If this is an IPI -- clean it up
+ if((xirr & 0x00FFFFFF) == INTERPROC_XISR)
+ {
+ uint64_t mfrrAddress =
+ cv_ipc_base_address + mmio_offset(pir) + MFRR_ADDR_OFFSET;
+
+ // Ignore HRMOR setting
+ mfrrAddress |= 0x8000000000000000ul;
+ uint8_t mfrr = 0xFF;
+
+ asm volatile("stbcix %0,0,%1" :: "r" (mfrr) , "r" (mfrrAddress));
+ asm volatile("stwcix %0,0,%1" :: "r" (xirr) , "r" (xirrAddress));
+ }
}
}
OpenPOWER on IntegriCloud