From c9667ef21a6ff17b0248bb53482b905e6c74b237 Mon Sep 17 00:00:00 2001 From: Tsung Yeung Date: Thu, 6 Jun 2019 18:38:40 -0400 Subject: Add polling after STR entry to ensure port is in STR before asserting RESETn Change-Id: Ic28ca541a578daccc0b9df6d8ffa99622c9eda38 CQ:SW465520 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/78505 Tested-by: FSP CI Jenkins Tested-by: Jenkins Server Reviewed-by: STEPHEN GLANCY Tested-by: HWSV CI Tested-by: PPE CI Reviewed-by: Louis Stermole Tested-by: Hostboot CI Reviewed-by: Thi N. Tran Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/78869 Reviewed-by: RAJA DAS --- .../memory/lib/workarounds/nvdimm_workarounds.C | 56 +++++++++++++++++++++- .../xml/error_info/p9_memory_mss_lib.xml | 13 +++++ 2 files changed, 68 insertions(+), 1 deletion(-) (limited to 'src/import/chips/p9') diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/nvdimm_workarounds.C b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/nvdimm_workarounds.C index c401069f..9621e20b 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/nvdimm_workarounds.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/nvdimm_workarounds.C @@ -48,6 +48,7 @@ namespace workarounds namespace nvdimm { + // MBASTR0Q for each MCA // Note: Since the scoms are executed at the chip, it needs the dedicated // address for each MCA @@ -89,6 +90,19 @@ constexpr const uint64_t FARB5Q_REG[] = MCA_7_MBA_FARB5Q, }; +// FARB6Q for each MCA +constexpr const uint64_t FARB6Q_REG[] = +{ + MCA_0_MBA_FARB6Q, + MCA_1_MBA_FARB6Q, + MCA_2_MBA_FARB6Q, + MCA_3_MBA_FARB6Q, + MCA_4_MBA_FARB6Q, + MCA_5_MBA_FARB6Q, + MCA_6_MBA_FARB6Q, + MCA_7_MBA_FARB6Q, +}; + // MCB_CNTLQ constexpr const uint64_t MCB_CNTLQ_REG[] = { @@ -118,7 +132,10 @@ fapi2::ReturnCode self_refresh_entry( const fapi2::Target l_mbarpc0_data, l_mbastr0_data, l_mcbcntlq_data; + fapi2::buffer l_mbarpc0_data; + fapi2::buffer l_mbastr0_data; + fapi2::buffer l_mcbcntlq_data; + fapi2::buffer l_mcafarb6q_data; constexpr uint64_t ENABLE = 1; constexpr uint64_t DISABLE = 0; constexpr uint64_t MAXALL_MIN0 = 0b010; @@ -127,6 +144,15 @@ fapi2::ReturnCode self_refresh_entry( const fapi2::Target(STOP); @@ -149,6 +175,34 @@ fapi2::ReturnCode self_refresh_entry( const fapi2::Target(ENABLE); FAPI_TRY(fapi2::putScom(i_target, MBARPC0Q_REG[l_mca_pos], l_mbarpc0_data)); + +#ifndef __PPE__ + FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_IS_SIMULATION, fapi2::Target(), l_sim) ); +#endif + + if (!l_sim) + { + // Poll to make sure we are in STR before proceeding. + for (uint8_t i = 0; i < POLL_ITERATION; i++) + { + FAPI_TRY(fapi2::delay(DELAY_2MS_IN_NS, 0), "Error returned from fapi2::delay call"); + FAPI_TRY(fapi2::getScom(i_target, FARB6Q_REG[l_mca_pos], l_mcafarb6q_data)); + + if (l_mcafarb6q_data.getBit()) + { + l_in_str = true; + break; + } + } + + FAPI_ASSERT(l_in_str, + fapi2::MSS_STR_NOT_ENTERED(). + set_PROC_TARGET(i_target). + set_MCA_POS(l_mca_pos). + set_MCA_FARB6Q(l_mcafarb6q_data). + set_STR_STATE(l_in_str), + "STR not entered on port %u", l_mca_pos); + } } fapi_try_exit: diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_lib.xml b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_lib.xml index 62549b31..5e05a1b1 100644 --- a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_lib.xml +++ b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_lib.xml @@ -509,4 +509,17 @@ HIGH + + + RC_MSS_STR_NOT_ENTERED + Indicates a MCA has not entered STR within the allotted time + PROC_TARGET + MCA_POS + MCA_FARB6Q + STR_STATE + + CODE + HIGH + + -- cgit v1.2.1