summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/core_activate/core_activate.C
diff options
context:
space:
mode:
authorDean Sanner <dsanner@us.ibm.com>2014-09-08 07:29:52 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-09-11 10:44:50 -0500
commitda34aa986965077bf901eb7d3ff7f7804d80020f (patch)
tree209a5ed8600aceb1c21be968a022dde2b13aaebe /src/usr/hwpf/hwp/core_activate/core_activate.C
parentc8b129aa555e27b5be7fb3f296e8f15f9a3348f1 (diff)
downloadtalos-hostboot-da34aa986965077bf901eb7d3ff7f7804d80020f.tar.gz
talos-hostboot-da34aa986965077bf901eb7d3ff7f7804d80020f.zip
Workaround SBE interupt injection bug on multi-node
Change-Id: Ib17ae25542100c88fd5e85add362876582ea4449 CQ: SW274682 Backport: release-fips820 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/13224 Tested-by: Jenkins Server Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com> Reviewed-by: Thi N. Tran <thi@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/core_activate/core_activate.C')
-rw-r--r--src/usr/hwpf/hwp/core_activate/core_activate.C25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/usr/hwpf/hwp/core_activate/core_activate.C b/src/usr/hwpf/hwp/core_activate/core_activate.C
index 7e37a4609..934345ef3 100644
--- a/src/usr/hwpf/hwp/core_activate/core_activate.C
+++ b/src/usr/hwpf/hwp/core_activate/core_activate.C
@@ -160,6 +160,22 @@ void* call_host_activate_master( void *io_pArgs )
"proc_prep_master_winkle SUCCESS" );
}
+ //Because of a bug in how the SBE injects the IPI used to wake
+ //up the master core, need to ensure no mailbox traffic
+ //or even an interrupt in the interrupt presenter
+ // 1) suspend the mailbox with interrupt disable
+ // 2) ensure that interrupt presenter is drained
+ l_errl = MBOX::suspend(true, true);
+ if (l_errl)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "call_host_activate_master ERROR : MBOX::suspend");
+ break;
+ }
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "drainging interrupt Q");
+ INTR::drainQueue();
+
// Call p8_block_wakeup_intr to prevent stray interrupts from
// popping core out of winkle before SBE sees it.
@@ -254,6 +270,15 @@ void* call_host_activate_master( void *io_pArgs )
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"Returned from Winkle." );
+ //Re-enable the mailbox
+ l_errl = MBOX::resume();
+ if (l_errl)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "call_host_activate_master ERROR : MBOX::resume");
+ break;
+ }
+
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"Call proc_stop_deadman_timer. Target %.8X",
TARGETING::get_huid(l_cpu_target) );
OpenPOWER on IntegriCloud