summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/memory
diff options
context:
space:
mode:
authorMatthew Hickman <Matthew.Hickman@ibm.com>2018-02-13 12:08:35 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-03-16 13:36:42 -0400
commit90ef1f6dbd592ac13e07eaf2effc6757f8d70a16 (patch)
tree4f20c0f2feabc1fb9899bed5d09e6909726e9996 /src/import/chips/p9/procedures/hwp/memory
parent945553cc05cf2ab168a6dc435e8160997402be10 (diff)
downloadtalos-hostboot-90ef1f6dbd592ac13e07eaf2effc6757f8d70a16.tar.gz
talos-hostboot-90ef1f6dbd592ac13e07eaf2effc6757f8d70a16.zip
Fixed unmasking of BRODCAST_OUT_OF_SYNC fir after memdiags handling
Change-Id: Iee1f9d215907a19cd9b71f617b5d0d03cd180f5d CQ: SW417146 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53955 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: ANDRE A. MARIN <aamarin@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53986 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory')
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mcbist_workarounds.C38
1 files changed, 22 insertions, 16 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mcbist_workarounds.C b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mcbist_workarounds.C
index 784d047ec..1a6f53670 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mcbist_workarounds.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mcbist_workarounds.C
@@ -179,32 +179,38 @@ fapi_try_exit:
fapi2::ReturnCode broadcast_out_of_sync( const fapi2::Target<fapi2::TARGET_TYPE_MCBIST>& i_target,
const mss::states i_value )
{
- fapi2::ReturnCode l_rc;
- fapi2::buffer<uint64_t> recr_buffer;
-
- fir::reg<MCBIST_MCBISTFIRQ> l_mcbist_fir_reg(i_target, l_rc);
- FAPI_TRY(l_rc, "unable to create fir::reg for %d", MCBIST_MCBISTFIRQ);
-
- // Check for enabled (post memdiag) or disbaled (pre memdiag) workaround
- if ( i_value )
+ // Check for enabled (post memdiag) or disabled (pre memdiag) workaround
+ if ( i_value == mss::ON )
{
- // Initialize Broadcast of out sync to checkstop post workaround
- l_mcbist_fir_reg.checkstop<MCBIST_MCBISTFIRQ_MCBIST_BRODCAST_OUT_OF_SYNC>();
+ fapi2::buffer<uint64_t> l_mcbist_action_buffer;
+
+ // Change Broadcast of out sync to checkstop post workaround
+ // Current FIR register API resets FIR mask registers when setting up FIR
+ // This can result in FIRs being incorrectly unmasked after being handled in memdiags
+ // The scoms below set the mask to checkstop while preserving the current mask state
+ FAPI_TRY( mss::getScom(i_target, MCBIST_MCBISTFIRACT1, l_mcbist_action_buffer) );
+ l_mcbist_action_buffer.clearBit<MCBIST_MCBISTFIRQ_MCBIST_BRODCAST_OUT_OF_SYNC>();
+ FAPI_TRY( mss::putScom(i_target, MCBIST_MCBISTFIRACT1, l_mcbist_action_buffer) );
}
else
{
- // Initialize Broadcast of out sync to recoverable pre workaround
+ fapi2::ReturnCode l_rc;
+ fir::reg<MCBIST_MCBISTFIRQ> l_mcbist_fir_reg(i_target, l_rc);
+ FAPI_TRY(l_rc, "unable to create fir::reg for %d", MCBIST_MCBISTFIRQ);
+
+ // Initialize Broadcast out of sync to recoverable pre workaround
l_mcbist_fir_reg.recoverable_error<MCBIST_MCBISTFIRQ_MCBIST_BRODCAST_OUT_OF_SYNC>();
+ FAPI_TRY(l_mcbist_fir_reg.write(), "unable to write fir::reg %d", MCBIST_MCBISTFIRQ);
}
- FAPI_TRY(l_mcbist_fir_reg.write(), "unable to write fir::reg %d", MCBIST_MCBISTFIRQ);
-
for (const auto& p : mss::find_targets<fapi2::TARGET_TYPE_MCA>(i_target))
{
+ fapi2::buffer<uint64_t> l_recr_buffer;
+
// Set UE noise window for workaround
- mss::read_recr_register(p, recr_buffer);
- mss::set_enable_ue_noise_window(recr_buffer, i_value);
- mss::write_recr_register(p, recr_buffer);
+ mss::read_recr_register(p, l_recr_buffer);
+ mss::set_enable_ue_noise_window(l_recr_buffer, i_value);
+ mss::write_recr_register(p, l_recr_buffer);
}
fapi_try_exit:
OpenPOWER on IntegriCloud