From 6bdf34b9fe0aa514f5568124b04bace00116216b Mon Sep 17 00:00:00 2001 From: Louis Stermole Date: Thu, 3 Jan 2019 16:43:12 -0500 Subject: Add workaround for Nimbus symbol mark performance hw bug This is the HWP portion of the fix for HW474117. When a symbol mark is placed, it activates the WAT bit to force exit-0 bypass disable in the ecc checker. It also masks the FIR attention bit for the WAT. Change-Id: I0516e19a623880d9ed659b2e7e0a89c6facb95cc CQ:SW453101 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/70081 Tested-by: FSP CI Jenkins Tested-by: HWSV CI Tested-by: PPE CI Tested-by: Jenkins Server Tested-by: Hostboot CI Reviewed-by: STEPHEN GLANCY Reviewed-by: Mark Pizzutillo Reviewed-by: ANDRE A. MARIN Reviewed-by: Jennifer A. Stofer Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/70083 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Reviewed-by: Christian R. Geddes --- .../chips/p9/procedures/hwp/memory/lib/mc/port.C | 4 ++++ .../hwp/memory/lib/workarounds/mca_workarounds.C | 19 +++++++++++++++++++ .../hwp/memory/lib/workarounds/mca_workarounds.H | 7 +++++++ .../hwp/memory/lib/workarounds/mcbist_workarounds.C | 15 +++++---------- 4 files changed, 35 insertions(+), 10 deletions(-) (limited to 'src/import/chips') diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/mc/port.C b/src/import/chips/p9/procedures/hwp/memory/lib/mc/port.C index 5c1433bbe..939f1b029 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/mc/port.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/mc/port.C @@ -38,6 +38,7 @@ #include #include #include +#include namespace mss { @@ -358,6 +359,9 @@ fapi2::ReturnCode place_symbol_mark(const fapi2::Target FAPI_TRY( mss::ecc::set_fwms(l_mca, i_rank, l_galois, mss::ecc::fwms::mark_type::SYMBOL, mss::ecc::fwms::mark_region::MRANK, l_addr) ); + // Apply workaround for HW474117 if we place a symbol mark + FAPI_TRY( mss::workarounds::disable_bypass(l_mca) ); + fapi_try_exit: return fapi2::current_err; } diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mca_workarounds.C b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mca_workarounds.C index 37d03bb9b..a2d219148 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mca_workarounds.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mca_workarounds.C @@ -176,6 +176,25 @@ fapi_try_exit: return fapi2::current_err; } +/// +/// @brief Disable bypass on port with symbol mark placed +/// @param[in] i_target the fapi2 target of the port +/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok +/// @note The workaround for HW474117 applies to all EC versions, so no switch is necessary +/// +fapi2::ReturnCode disable_bypass( const fapi2::Target& i_target ) +{ + fapi2::buffer l_mca_dbgr_buffer; + + // Trigger WAT logic to 'disable bypass' for the given port: set DBGR[8] + FAPI_TRY( mss::getScom(i_target, MCA_DBGR, l_mca_dbgr_buffer) ); + l_mca_dbgr_buffer.setBit(); + FAPI_TRY( mss::putScom(i_target, MCA_DBGR, l_mca_dbgr_buffer) ); + +fapi_try_exit: + return fapi2::current_err; +} + } // ns workarounds } // ns mss diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mca_workarounds.H b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mca_workarounds.H index 56e98e72c..3d91bae0d 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mca_workarounds.H +++ b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/mca_workarounds.H @@ -71,6 +71,13 @@ fapi2::ReturnCode disable_cid_parity(const fapi2::Target /// fapi2::ReturnCode str_non_tsv_parity(const fapi2::Target& i_target); +/// +/// @brief Disable bypass on port with symbol mark placed +/// @param[in] i_target the fapi2 target of the port +/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok +/// +fapi2::ReturnCode disable_bypass( const fapi2::Target& i_target ); + } // ns workarounds } // ns mss 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 1e3e8b7b5..e71ee2b29 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 @@ -147,28 +147,23 @@ fapi2::ReturnCode end_of_rank( const fapi2::Target& i_target /// /// @brief WAT debug attention /// For Nimbus DD1 the MCBIST engine uses the WAT debug bit as a workaround +/// For Nimbus DD2 the WAT debug bit is used for a different workaround /// @param[in] i_target the fapi2 target of the mcbist /// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok /// fapi2::ReturnCode wat_debug_attention( const fapi2::Target& i_target ) { // MCBIST attentions are already special attention - if (mss::chip_ec_feature_mss_wat_debug_attn(i_target)) - { - fapi2::ReturnCode l_rc; - fir::reg mcbist_fir_register(i_target, l_rc); - FAPI_TRY(l_rc, "unable to create fir::reg for %d", MCBIST_MCBISTFIRQ); + fapi2::ReturnCode l_rc; + fir::reg mcbist_fir_register(i_target, l_rc); + FAPI_TRY(l_rc, "unable to create fir::reg for %d", MCBIST_MCBISTFIRQ); - FAPI_TRY(mcbist_fir_register.attention().write()); - } - - return fapi2::FAPI2_RC_SUCCESS; + FAPI_TRY(mcbist_fir_register.attention().write()); fapi_try_exit: return fapi2::current_err; } - /// /// @brief BROADCAST OUT OF SYNC workaround /// A UE noise window is triggered by UE/AUEs causing an out of sync error -- cgit v1.2.1