diff options
author | Dean Sanner <dsanner@us.ibm.com> | 2014-09-08 07:29:52 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-09-11 10:44:50 -0500 |
commit | da34aa986965077bf901eb7d3ff7f7804d80020f (patch) | |
tree | 209a5ed8600aceb1c21be968a022dde2b13aaebe /src/usr/hwpf/hwp/core_activate/core_activate.C | |
parent | c8b129aa555e27b5be7fb3f296e8f15f9a3348f1 (diff) | |
download | talos-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.C | 25 |
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) ); |