summaryrefslogtreecommitdiffstats
path: root/src/usr/intr
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/intr')
-rw-r--r--src/usr/intr/intrrp.C22
-rw-r--r--src/usr/intr/intrrp.H10
2 files changed, 23 insertions, 9 deletions
diff --git a/src/usr/intr/intrrp.C b/src/usr/intr/intrrp.C
index 5a89ba378..d198610af 100644
--- a/src/usr/intr/intrrp.C
+++ b/src/usr/intr/intrrp.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2011,2018 */
+/* Contributors Listed Below - COPYRIGHT 2011,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -234,8 +234,8 @@ errlHndl_t IntrRp::resetIntpForMpipl()
{
if (*targ_itr != iv_masterHdlr)
{
- TRACDCOMP(g_trac_intr, "IntrRp::resetIntpForMpipl() Setting up Slave Proc Interrupt Routing for proc %lx", get_huid((*targ_itr)->proc));
- enableSlaveProcInterruptRouting(*targ_itr);
+ TRACDCOMP(g_trac_intr, "IntrRp::resetIntpForMpipl() Setting up LSI Interrupt Routing for proc %lx", get_huid((*targ_itr)->proc));
+ routeLSIInterrupts(*targ_itr);
}
}
@@ -528,6 +528,11 @@ errlHndl_t IntrRp::_init()
break;
}
+ //Route LSI interrupt events over PSIHB instead of local wire
+ // This is a HW Bug Workaround for slaves using the PSIHB and
+ // the master using the local wire
+ routeLSIInterrupts(l_procIntrHdlr);
+
enableLsiInterrupts();
}
else
@@ -542,6 +547,11 @@ errlHndl_t IntrRp::_init()
break;
}
+ //Route LSI interrupt events over PSIHB instead of local wire
+ // This is a HW Bug Workaround for slaves using the PSIHB and
+ // the master using the local wire
+ routeLSIInterrupts(l_procIntrHdlr);
+
enableLsiInterrupts();
TRACFCOMP(g_trac_intr, "IntrRp::_init() Enabling PSIHB Interrupts");
@@ -987,7 +997,7 @@ errlHndl_t IntrRp::enableInterrupts(intr_hdlr_t *i_proc)
return err;
}
-void IntrRp::enableSlaveProcInterruptRouting(intr_hdlr_t *i_proc)
+void IntrRp::routeLSIInterrupts(intr_hdlr_t *i_proc)
{
PSIHB_SW_INTERFACES_t * l_psihb_ptr = i_proc->psiHbBaseAddr;
@@ -3562,9 +3572,9 @@ errlHndl_t INTR::IntrRp::enableSlaveProcInterrupts(TARGETING::Target * i_target)
break;
}
- //Setup the PSIHB interrupt routing to route interrupts from nom-master
+ //Setup the PSIHB interrupt routing to route interrupts from non-master
// proc back to master proc
- enableSlaveProcInterruptRouting(l_procIntrHdlr);
+ routeLSIInterrupts(l_procIntrHdlr);
} while(0);
diff --git a/src/usr/intr/intrrp.H b/src/usr/intr/intrrp.H
index c749c1433..d838c4d6b 100644
--- a/src/usr/intr/intrrp.H
+++ b/src/usr/intr/intrrp.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2011,2018 */
+/* Contributors Listed Below - COPYRIGHT 2011,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -739,11 +739,15 @@ namespace INTR
/**
* Set correct PSIHB Regs to route + enable LSI interrupts from
- * non-master proc to correct address on master proc
+ * any proc to correct address on master proc.
+ *
+ * This is used on the master proc as a workaround for a HW bug
+ * involving lsi triggers on the local wire. This forces the lsi
+ * trigger over the PSIHB working around the HW issue
* @param[in] i_proc, the proc intrp handler
* @return void
*/
- void enableSlaveProcInterruptRouting(intr_hdlr_t* i_proc);
+ void routeLSIInterrupts(intr_hdlr_t* i_proc);
/**
* Initialize the IRSCReg to enable PSI to present interrupts
OpenPOWER on IntegriCloud