From b814311a6dc122e761336881130eace63d3533e7 Mon Sep 17 00:00:00 2001 From: Dean Sanner Date: Tue, 16 Jul 2013 14:58:43 -0500 Subject: 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 --- src/kernel/intmsghandler.C | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/kernel') 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)); + } } } -- cgit v1.2.1