From 90ef1f6dbd592ac13e07eaf2effc6757f8d70a16 Mon Sep 17 00:00:00 2001 From: Matthew Hickman Date: Tue, 13 Feb 2018 12:08:35 -0600 Subject: 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 Reviewed-by: ANDRE A. MARIN Reviewed-by: STEPHEN GLANCY Tested-by: Jenkins Server Tested-by: Hostboot CI Reviewed-by: Jennifer A. Stofer Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53986 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Reviewed-by: Daniel M. Crowell --- .../memory/lib/workarounds/mcbist_workarounds.C | 38 +++++++++++++--------- 1 file changed, 22 insertions(+), 16 deletions(-) (limited to 'src/import/chips/p9/procedures/hwp/memory') 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& i_target, const mss::states i_value ) { - fapi2::ReturnCode l_rc; - fapi2::buffer recr_buffer; - - fir::reg 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(); + fapi2::buffer 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(); + 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 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(); + 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(i_target)) { + fapi2::buffer 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: -- cgit v1.2.1