diff options
author | Dean Sanner <dsanner@us.ibm.com> | 2013-07-16 14:58:43 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-08-21 15:38:53 -0500 |
commit | b814311a6dc122e761336881130eace63d3533e7 (patch) | |
tree | 1330190b59abbe6fc094de1b5afda87abacc100b /src/kernel | |
parent | a6f46d0a9461b96781bc85c9fd82c24d14b5ce42 (diff) | |
download | talos-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.C | 14 |
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)); + } } } |