diff options
author | Jacob Harvey <jlharvey@us.ibm.com> | 2017-05-31 17:34:17 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-06-11 14:39:37 -0400 |
commit | 987752d8494c4ac2f0dac41b72c21b5cbb0d0488 (patch) | |
tree | aea46cf8857adfe3f38061cb8125f9e7627388c0 /src/import/chips/p9/procedures/hwp | |
parent | 075b200958f391fab88a229d77f2566c8aa2e8e1 (diff) | |
download | talos-hostboot-987752d8494c4ac2f0dac41b72c21b5cbb0d0488.tar.gz talos-hostboot-987752d8494c4ac2f0dac41b72c21b5cbb0d0488.zip |
L3 RAS for draminit_training, eff_config, lib
Change-Id: I1981cd809b109f32869e4ec98c5cdfd7fb375af9
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/41204
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Louis Stermole <stermole@us.ibm.com>
Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/41277
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp')
10 files changed, 138 insertions, 117 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs.C b/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs.C index 8c207d992..fdb81388b 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs.C @@ -74,29 +74,40 @@ fapi_try_exit: /// /// @brief Determine the CCS failure type /// @tparam T the fapi2 target type of the target for this error -/// @param[in] i_target +/// @param[in] i_target MCBIST target /// @param[in] i_type the failure type +/// @param[in] i_mca The port the CCS instruction is training /// @return ReturnCode associated with the fail. /// @note FFDC is handled here, caller doesn't need to do it /// -template< fapi2::TargetType T > -fapi2::ReturnCode fail_type( const fapi2::Target<T>& i_target, const uint64_t& i_type ) +fapi2::ReturnCode fail_type( const fapi2::Target<TARGET_TYPE_MCBIST>& i_target, + const uint64_t& i_type, + const fapi2::Target<TARGET_TYPE_MCA>& i_mca ) { + // Including the MCA_TARGET here and below at CAL_TIMEOUT since these problems likely lie at the MCA level + // So we disable the PORT and hopefully that's it + // If the problem lies with the MCBIST, it'll just have to loop FAPI_ASSERT(STAT_READ_MISCOMPARE != i_type, - fapi2::MSS_CCS_READ_MISCOMPARE().set_TARGET_IN_ERROR(i_target), - "CCS FAIL Read Miscompare"); + fapi2::MSS_CCS_READ_MISCOMPARE() + .set_TARGET_IN_ERROR(i_target) + .set_MCA_TARGET(i_mca), + "%s CCS FAIL Read Miscompare", mss::c_str(i_mca)); + // This error is likely due to a bad CCS engine/ MCBIST FAPI_ASSERT(STAT_UE_SUE != i_type, fapi2::MSS_CCS_UE_SUE().set_TARGET_IN_ERROR(i_target), - "CCS FAIL UE or SUE Error"); + "%s CCS FAIL UE or SUE Error", mss::c_str(i_target)); FAPI_ASSERT(STAT_CAL_TIMEOUT != i_type, - fapi2::MSS_CCS_CAL_TIMEOUT().set_TARGET_IN_ERROR(i_target), - "CCS FAIL Calibration Operation Time Out"); + fapi2::MSS_CCS_CAL_TIMEOUT() + .set_TARGET_IN_ERROR(i_target) + .set_MCA_TARGET(i_mca), + "%s CCS FAIL Calibration Operation Time Out", mss::c_str(i_mca)); + // Problem with the CCS engine FAPI_ASSERT(STAT_HUNG != i_type, fapi2::MSS_CCS_HUNG().set_TARGET_IN_ERROR(i_target), - "CCS appears hung"); + "%s CCS appears hung", mss::c_str(i_target)); fapi_try_exit: return fapi2::current_err; } @@ -105,11 +116,13 @@ fapi_try_exit: /// @brief Execute the contents of the CCS array /// @param[in] i_target The MCBIST containing the array /// @param[in] i_program the MCBIST ccs program - to get the polling parameters +/// @param[in] i_port The port target that the array is for /// @return FAPI2_RC_SUCCESS iff success /// template<> fapi2::ReturnCode execute_inst_array(const fapi2::Target<TARGET_TYPE_MCBIST>& i_target, - ccs::program<TARGET_TYPE_MCBIST>& i_program) + ccs::program<TARGET_TYPE_MCBIST>& i_program, + const fapi2::Target<TARGET_TYPE_MCA>& i_port) { typedef ccsTraits<TARGET_TYPE_MCBIST> TT; @@ -135,7 +148,7 @@ fapi2::ReturnCode execute_inst_array(const fapi2::Target<TARGET_TYPE_MCBIST>& i_ // So we failed or we're still in progress. Mask off the fail bits // and run this through the FFDC generator. - FAPI_TRY( fail_type(i_target, status & 0x1C00000000000000) ); + FAPI_TRY( fail_type(i_target, status & 0x1C00000000000000, i_port) ); fapi_try_exit: return fapi2::current_err; @@ -243,7 +256,7 @@ fapi2::ReturnCode execute( const fapi2::Target<TARGET_TYPE_MCBIST>& i_target, { FAPI_INF("executing CCS array for port %d (%s)", mss::relative_pos<TARGET_TYPE_MCBIST>(p), mss::c_str(p)); FAPI_TRY( select_ports( i_target, mss::relative_pos<TARGET_TYPE_MCBIST>(p)) ); - FAPI_TRY( execute_inst_array(i_target, i_program) ); + FAPI_TRY( execute_inst_array(i_target, i_program, p) ); } } diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs.H b/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs.H index 4aad57ffb..c3a680790 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs.H +++ b/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs.H @@ -841,10 +841,11 @@ fapi2::ReturnCode execute( const fapi2::Target<T>& i_target, /// /// @brief Execute a set of CCS instructions - single port /// @tparam T the target type of the chiplet which executes the CCS instruction +/// @tparam P the target of the CCS instruction (the port) /// @tparam TT the CCS traits of the chiplet which executes the CCS instruction /// @param[in] i_target the target to effect /// @param[in] i_program the vector of instructions -/// @param[in] i_port the port +/// @param[in] i_port The target that's being programmed by the array /// @return FAPI2_RC_SUCCSS iff ok /// template< fapi2::TargetType T, fapi2::TargetType P, typename TT = ccsTraits<T> > @@ -860,13 +861,17 @@ fapi2::ReturnCode execute( const fapi2::Target<T>& i_target, /// /// @brief Execute a CCS array already loaded in to the engine /// @tparam T the target type of the chiplet which executes the CCS instruction +/// @tparam P the target of the CCS instruction (the port) /// @tparam TT the CCS traits of the chiplet which executes the CCS instruction /// @param[in] i_target the target to effect /// @param[in] i_program the MCBIST ccs program - to get the polling parameters +/// @param[in] i_port the port associated with the MCBIST array /// @return FAPI2_RC_SUCCSS iff ok /// -template< fapi2::TargetType T, typename TT = ccsTraits<T> > -fapi2::ReturnCode execute_inst_array(const fapi2::Target<T>& i_target, ccs::program<T>& i_program); +template< fapi2::TargetType T, fapi2::TargetType P, typename TT = ccsTraits<T> > +fapi2::ReturnCode execute_inst_array(const fapi2::Target<T>& i_target, + ccs::program<T>& i_program, + const fapi2::Target<P>& i_port); /// /// @brief Start or stop the CCS engine diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C index a9af406ca..06ee66044 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C @@ -389,7 +389,7 @@ fapi2::ReturnCode eff_dimm::dram_width() (l_decoder_val == fapi2::ENUM_ATTR_EFF_DRAM_WIDTH_X4), fapi2::MSS_INVALID_DRAM_WIDTH() .set_DRAM_WIDTH(l_decoder_val) - .set_TARGET(iv_dimm), + .set_DIMM_TARGET(iv_dimm), "Unsupported DRAM width with %d for target %s", l_decoder_val, mss::c_str(iv_dimm)); @@ -563,7 +563,7 @@ fapi2::ReturnCode eff_dimm::dimm_size() FAPI_ASSERT( l_sdram_density != 0, fapi2::MSS_BAD_SDRAM_DENSITY_DECODER() .set_DRAM_DENSITY(l_sdram_density) - .set_TARGET(iv_dimm), + .set_DIMM_TARGET(iv_dimm), "SPD decoder messed up and returned a 0. Should have been caught already %s", mss::c_str(iv_dimm)); @@ -574,11 +574,12 @@ fapi2::ReturnCode eff_dimm::dimm_size() FAPI_ASSERT( (std::binary_search(l_dimm_sizes.begin(), l_dimm_sizes.end(), l_dimm_size) == true), fapi2::MSS_INVALID_CALCULATED_DIMM_SIZE() + .set_CALCULATED_SIZE(l_dimm_size) .set_SDRAM_WIDTH(l_sdram_width) .set_BUS_WIDTH(l_bus_width) .set_DRAM_DENSITY(l_sdram_density) .set_LOGICAL_RANKS(l_logical_rank_per_dimm) - .set_TARGET(iv_dimm), + .set_DIMM_TARGET(iv_dimm), "Recieved an invalid dimm size (%d) for calculated DIMM_SIZE for target %s" "(l_sdram_density %d * l_bus_width %d * l_logical_rank_per_dimm %d) / (8 * l_sdram_width %d", l_dimm_size, @@ -916,7 +917,7 @@ fapi2::ReturnCode eff_dimm::dram_dqs_time() (l_dram_width == fapi2::ENUM_ATTR_EFF_DRAM_WIDTH_X4), fapi2::MSS_INVALID_DRAM_WIDTH() .set_DRAM_WIDTH(l_dram_width) - .set_TARGET(iv_dimm), + .set_DIMM_TARGET(iv_dimm), "Invalid DRAM width with %d for target %s", l_dram_width, mss::c_str(iv_dimm)); @@ -1250,7 +1251,7 @@ fapi2::ReturnCode eff_dimm::dimm_rc08() .set_NUM_SLAVE_RANKS(l_num_slave_ranks) .set_NUM_TOTAL_RANKS(l_total_ranks) .set_NUM_MASTER_RANKS(l_master_ranks) - .set_TARGET(iv_dimm), + .set_DIMM_TARGET(iv_dimm), "For target %s: Invalid total_ranks %d seen with %d master ranks", mss::c_str(iv_dimm), l_total_ranks, @@ -1269,7 +1270,7 @@ fapi2::ReturnCode eff_dimm::dimm_rc08() .set_NUM_SLAVE_RANKS(l_num_slave_ranks) .set_NUM_TOTAL_RANKS(l_total_ranks) .set_NUM_MASTER_RANKS(l_master_ranks) - .set_TARGET(iv_dimm), + .set_DIMM_TARGET(iv_dimm), "For target %s: Invalid number of slave ranks calculated (%d) from (total_ranks %d / master %d)", mss::c_str(iv_dimm), l_num_slave_ranks, @@ -1374,7 +1375,7 @@ fapi2::ReturnCode eff_dimm::dimm_rc0a() fapi2::MSS_INVALID_FREQ_RC() .set_FREQ(iv_freq) .set_RC_NUM(RC0A) - .set_TARGET(iv_dimm), + .set_DIMM_TARGET(iv_dimm), "Invalid frequency for rc0a encoding received: %d", iv_freq); break; } @@ -1607,7 +1608,7 @@ fapi2::ReturnCode eff_dimm::dimm_rc3x() fapi2::MSS_INVALID_FREQ_RC() .set_FREQ(iv_freq) .set_RC_NUM(RC3X) - .set_TARGET(iv_dimm), + .set_DIMM_TARGET(iv_dimm), "%s: Invalid frequency for RC_3X encoding received: %d", mss::c_str(iv_dimm), iv_freq); @@ -1942,7 +1943,8 @@ fapi2::ReturnCode eff_dimm::dram_cwl() FAPI_ASSERT( ((l_preamble == 0) || (l_preamble == 1)), fapi2::MSS_INVALID_VPD_MT_PREAMBLE() .set_VALUE(l_preamble) - .set_MCA_TARGET(iv_mca), + .set_DIMM_TARGET(iv_dimm) + .set_MCS_TARGET(iv_mcs), "Target %s VPD_MT_PREAMBLE is invalid (not 1 or 0), value is %d", mss::c_str(iv_dimm), l_preamble ); @@ -2128,7 +2130,8 @@ fapi2::ReturnCode eff_dimm::vref_dq_train_value() FAPI_ASSERT(l_train_value <= JEDEC_MAX_TRAIN_VALUE, fapi2::MSS_INVALID_VPD_VREF_DRAM_WR_RANGE() .set_MAX(JEDEC_MAX_TRAIN_VALUE) - .set_VALUE(l_train_value), + .set_VALUE(l_train_value) + .set_MCS_TARGET(iv_mcs), "%s VPD DRAM VREF value out of range max 0x%02x value 0x%02x", mss::c_str(iv_dimm), JEDEC_MAX_TRAIN_VALUE, l_train_value ); @@ -2441,7 +2444,8 @@ fapi2::ReturnCode eff_dimm::read_preamble() FAPI_ASSERT( ((l_preamble == 0) || (l_preamble == 1)), fapi2::MSS_INVALID_VPD_MT_PREAMBLE() .set_VALUE(l_preamble) - .set_MCA_TARGET(iv_mca), + .set_DIMM_TARGET(iv_mca) + .set_MCS_TARGET(iv_mcs), "Target %s VPD_MT_PREAMBLE is invalid (not 1 or 0), value is %d", mss::c_str(iv_dimm), l_preamble ); @@ -2475,7 +2479,8 @@ fapi2::ReturnCode eff_dimm::write_preamble() FAPI_ASSERT( ((l_preamble == 0) || (l_preamble == 1)), fapi2::MSS_INVALID_VPD_MT_PREAMBLE() .set_VALUE(l_preamble) - .set_MCA_TARGET(iv_mca), + .set_DIMM_TARGET(iv_mca) + .set_MCS_TARGET(iv_mcs), "Target %s VPD_MT_PREAMBLE is invalid (not 1 or 0), value is %d", mss::c_str(iv_dimm), l_preamble ); @@ -3497,7 +3502,8 @@ fapi2::ReturnCode eff_rdimm::dram_rtt_nom() fapi2::MSS_INVALID_RTT_NOM_CALCULATIONS() .set_RANK(l_rank) .set_RTT_NOM_INDEX(l_rtt_nom_index) - .set_RTT_NOM_FROM_VPD(l_rtt_nom[mss::index(l_rank)]), + .set_RTT_NOM_FROM_VPD(l_rtt_nom[mss::index(l_rank)]) + .set_DIMM_TARGET(iv_dimm), "Error calculating RTT_NOM for target %s rank %d, rtt_nom from vpd is %d, index is %d", mss::c_str(iv_dimm), l_rank, @@ -3749,7 +3755,8 @@ fapi2::ReturnCode eff_lrdimm::dimm_bc00() fapi2::MSS_INVALID_RTT_NOM_CALCULATIONS() .set_RANK(l_rank) .set_RTT_NOM_INDEX(l_rtt_nom_index) - .set_RTT_NOM_FROM_VPD(l_rtt_nom[mss::index(l_rank)]), + .set_RTT_NOM_FROM_VPD(l_rtt_nom[mss::index(l_rank)]) + .set_DIMM_TARGET(iv_dimm), "Error calculating RTT_NOM for target %s rank %d, rtt_nom from vpd is %d, index is %d", mss::c_str(iv_dimm), l_rank, @@ -4180,7 +4187,7 @@ fapi2::ReturnCode eff_lrdimm::dimm_bc0a() fapi2::MSS_INVALID_FREQ_BC() .set_FREQ(iv_freq) .set_BC_NUM(BC0A) - .set_TARGET(iv_dimm), + .set_DIMM_TARGET(iv_dimm), "unknown FREQ %d for %s in bc0a", iv_freq, mss::c_str(iv_dimm)); @@ -4476,16 +4483,7 @@ fapi2::ReturnCode eff_dimm::decode_vpd(const fapi2::Target<TARGET_TYPE_MCS>& i_t } // Log any error code from getVPD separately in case the error code is meaningful - fapi2::ReturnCode l_rc = fapi2::getVPD(i_target, l_vpd_info, &(l_mt_blob[0])); - - if (l_rc != fapi2::FAPI2_RC_SUCCESS) - { - fapi2::logError(l_rc); - FAPI_ASSERT( false, - fapi2::MSS_VPD_MT_LOAD_FAIL() - .set_MCA_TARGET(p), - "%s Failed to retrieve MT VPD", mss::c_str(p)); - } + FAPI_TRY( fapi2::getVPD(i_target, l_vpd_info, &(l_mt_blob[0])) ); } // Only get the MR blob if we have a freq. It's possible for Cronus to give us an MCS which @@ -4507,16 +4505,7 @@ fapi2::ReturnCode eff_dimm::decode_vpd(const fapi2::Target<TARGET_TYPE_MCS>& i_t } // Log any error code from getVPD separately in case the error code is meaningful - fapi2::ReturnCode l_rc = fapi2::getVPD(i_target, l_vpd_info, &(l_mr_blob[0])); - - if (l_rc != fapi2::FAPI2_RC_SUCCESS) - { - fapi2::logError(l_rc); - FAPI_ASSERT( false, - fapi2::MSS_VPD_MR_LOAD_FAIL() - .set_MCA_TARGET(p), - "%s Failed to retrieve MR VPD", mss::c_str(p)); - } + FAPI_TRY( fapi2::getVPD(i_target, l_vpd_info, &(l_mr_blob[0])) ); } }// mca diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/rank.C b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/rank.C index 7215bdec4..6d444c574 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/rank.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/rank.C @@ -191,11 +191,11 @@ fapi2::ReturnCode get_dimm_target_from_rank(const fapi2::Target<TARGET_TYPE_MCA> bool l_got_one = false; // Make sure we get a valid DIMM index. If not, this is a programming error. - FAPI_ASSERT( (l_dimm_idx < l_dimms.size()), + FAPI_ASSERT( (l_dimm_idx < l_dimms.size() ), fapi2::MSS_BAD_DIMM_INDEX_FOR_GIVEN_RANK() .set_RANK(i_rank) .set_DIMM_INDEX(l_dimm_idx) - .set_TARGET(i_target), + .set_MCA_TARGET(i_target), "Invalid DIMM index (%d) found for provided rank (%d) in get_dimm_target_from_rank: %s", l_dimm_idx, i_rank, @@ -221,7 +221,7 @@ fapi2::ReturnCode get_dimm_target_from_rank(const fapi2::Target<TARGET_TYPE_MCA> fapi2::MSS_NO_DIMM_FOR_GIVEN_DIMM_INDEX() .set_RANK(i_rank) .set_DIMM_INDEX(l_dimm_idx) - .set_TARGET(i_target), + .set_MCA_TARGET(i_target), "Couldn't find a DIMM to match given rank (%d) and DIMM position (%d): %s", i_rank, l_dimm_idx, diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/timing.C b/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/timing.C index 3e71c0ef3..e5ce97330 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/timing.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/timing.C @@ -181,7 +181,7 @@ fapi2::ReturnCode calc_trfc_dlr(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_ fapi2::MSS_FAILED_TO_FIND_TRFC() .set_SDRAM_DENSITY(i_density) .set_REFRESH_MODE(i_refresh_mode) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s: Unable to find tRFC (ps) from map with SDRAM density key %d with %d refresh mode", mss::c_str(i_target), i_density, diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/timing.H b/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/timing.H index b652e7393..fb8d09a50 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/timing.H +++ b/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/timing.H @@ -597,7 +597,7 @@ inline uint64_t tras(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target) fapi2::MSS_INVALID_FREQ_PASSED_IN() .set_FREQ(l_freq) .set_FUNCTION(TRAS) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s Invalid frequency %lu", mss::c_str(i_target), l_freq); @@ -668,7 +668,7 @@ static fapi2::ReturnCode tfaw_half_kb_page_helper(const fapi2::Target<T>& i_targ fapi2::MSS_INVALID_FREQ_PASSED_IN() .set_FREQ(l_freq) .set_FUNCTION(TFAW_HALF_KB_PAGE_HELPER) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s Invalid frequency %lu", mss::c_str(i_target), l_freq); @@ -722,7 +722,7 @@ static fapi2::ReturnCode tfaw_1kb_page_helper(const fapi2::Target<T>& i_target, fapi2::MSS_INVALID_FREQ_PASSED_IN() .set_FREQ(l_freq) .set_FUNCTION(TFAW_ONE_KB_PAGE_HELPER) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s Invalid frequency %lu", mss::c_str(i_target), l_freq); @@ -775,7 +775,7 @@ static fapi2::ReturnCode tfaw_2kb_page_helper(const fapi2::Target<T>& i_target, fapi2::MSS_INVALID_FREQ_PASSED_IN() .set_FREQ(l_freq) .set_FUNCTION(TFAW_TW_KB_PAGE_HELPER) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s Invalid frequency %lu", mss::c_str(i_target), l_freq); @@ -817,7 +817,7 @@ fapi2::ReturnCode tfaw( const fapi2::Target<T>& i_target, FAPI_ASSERT( false, fapi2::MSS_INVALID_DRAM_WIDTH() .set_DRAM_WIDTH(i_dram_width) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "Invalid DRAM width with %d for target %s", i_dram_width, mss::c_str(i_target)); @@ -896,7 +896,7 @@ static fapi2::ReturnCode trrd_l_half_and_1kb_page_helper(const fapi2::Target<T>& fapi2::MSS_INVALID_FREQ_PASSED_IN() .set_FREQ(l_freq) .set_FUNCTION(TRRD_L_HALF_AND_1KB_PAGE_HELPER) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s Invalid frequency %lu", mss::c_str(i_target), l_freq); @@ -982,7 +982,7 @@ fapi2::ReturnCode trrd_l( const fapi2::Target<T>& i_target, FAPI_ASSERT( false, fapi2::MSS_INVALID_PAGE_SIZE() .set_DRAM_WIDTH(i_dram_width) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s Recieved an invalid page size: %lu", mss::c_str(i_target), i_dram_width); @@ -1044,7 +1044,7 @@ static fapi2::ReturnCode trrd_s_half_and_1kb_page_helper(const fapi2::Target<T>& fapi2::MSS_INVALID_FREQ_PASSED_IN() .set_FREQ(l_freq) .set_FUNCTION(TRRD_S_HALF_AND_1KB_PAGE_HELPER) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s Invalid frequency %lu", mss::c_str(i_target), l_freq); @@ -1096,7 +1096,7 @@ static fapi2::ReturnCode trrd_s_2kb_page_helper(const fapi2::Target<T>& i_target fapi2::MSS_INVALID_FREQ_PASSED_IN() .set_FREQ(l_freq) .set_FUNCTION(TRRD_S_2KB_PAGE_HELPER) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s Invalid frequency %lu", mss::c_str(i_target), l_freq); @@ -1137,7 +1137,7 @@ fapi2::ReturnCode trrd_s( const fapi2::Target<T>& i_target, FAPI_ASSERT( false, fapi2::MSS_INVALID_PAGE_SIZE() .set_DRAM_WIDTH(i_dram_width) - .set_TARGET(i_target), + .set_DIMM_TARGET(i_target), "%s Recieved an invalid page size: %lu", mss::c_str(i_target), i_dram_width); diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C b/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C index 89e584c62..62d91f41e 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C @@ -402,17 +402,19 @@ fapi2::ReturnCode poll( const fapi2::Target<T>& i_target, const program<T>& i_pr fapi2::MSS_MCBIST_UNKNOWN_FAILURE() .set_TARGET_IN_ERROR(i_target) .set_STATUS_REGISTER(l_status), - "MCBIST reported a fail, but process_errors didn't find it 0x%016llx", l_status ); + "%s MCBIST reported a fail, but process_errors didn't find it 0x%016llx", + mss::c_str(i_target), l_status ); // And if we're here all is good with the world. return fapi2::current_err; } FAPI_ASSERT(false, - fapi2::MSS_MCBIST_MULTIPLE_FAIL_BITS() + fapi2::MSS_MCBIST_DATA_FAIL() .set_TARGET_IN_ERROR(i_target) .set_STATUS_REGISTER(l_status), - "MCBIST executed <shrug>. Something's not good 0x%016llx", l_status ); + "%s MCBIST executed but we got corrupted data in the control register 0x%016llx", + mss::c_str(i_target), l_status ); fapi_try_exit: return fapi2::current_err; diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/phy/ddr_phy.C b/src/import/chips/p9/procedures/hwp/memory/lib/phy/ddr_phy.C index f4591f18c..b275692e8 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/phy/ddr_phy.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/phy/ddr_phy.C @@ -586,8 +586,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC .set_FAILED_STEPS(uint64_t(l_err_data)) .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "multiple training steps", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -596,8 +596,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_WR_LVL_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "write leveling", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -606,8 +606,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_INITIAL_PAT_WRITE_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "initial pattern write", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -616,8 +616,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_DQS_ALIGNMENT_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "DQS alignment", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -626,8 +626,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_RD_CLK_SYS_CLK_ALIGNMENT_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "read clk alignment", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -636,8 +636,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_RD_CENTERING_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "read centering", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -646,8 +646,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_WR_CENTERING_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "write centering", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -656,8 +656,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_INITIAL_COARSE_WR_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "initial coarse write", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -666,8 +666,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_COARSE_RD_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "coarse read", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -676,8 +676,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_CUSTOM_PATTERN_RD_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "custom read", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -686,8 +686,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_CUSTOM_PATTERN_WR_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "custom write", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -696,8 +696,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_DIGITAL_EYE_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "digital eye", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); @@ -706,8 +706,8 @@ fapi2::ReturnCode process_initial_cal_errors( const fapi2::Target<TARGET_TYPE_MC fapi2::MSS_DRAMINIT_TRAINING_VREF_ERROR() .set_PORT_POSITION(mss::fapi_pos(i_target)) .set_RANKGROUP_POSITION(l_rank_pairs) - .set_TARGET_IN_ERROR(l_failed_dimm) - .set_TARGET_WITH_REGISTERS(i_target), + .set_DIMM_TARGET(l_failed_dimm) + .set_MCA_TARGET(i_target), "Initial CAL failed %s. dimm: %s, cal err: 0x%016llx", "VREF calibration", mss::c_str(l_failed_dimm), uint64_t(l_err_data) ); diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/phy/dp16.C b/src/import/chips/p9/procedures/hwp/memory/lib/phy/dp16.C index 0f6102caa..cfa8f6257 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/phy/dp16.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/phy/dp16.C @@ -1011,7 +1011,7 @@ static fapi2::ReturnCode clock_enable_helper( const fapi2::Target<TARGET_TYPE_MC FAPI_ASSERT( false, fapi2::MSS_INVALID_DRAM_WIDTH(). set_DRAM_WIDTH(l_sdram_width). - set_TARGET(d), + set_DIMM_TARGET(d), "Received in valid DRAM width: x%d for %s. " "Expected x8 or x4 configuration.", l_sdram_width, mss::c_str(d) ); @@ -2387,8 +2387,10 @@ fapi2::ReturnCode process_bad_bits( const fapi2::Target<TARGET_TYPE_MCA>& i_targ l_dq_bad_bit_count = mss::bit_count(uint64_t(v.first)); FAPI_INF("bad DQ count for port %d DP%d %d", l_which_port, l_which_dp, l_dq_bad_bit_count); FAPI_ASSERT(l_dq_bad_bit_count < MIN_BAD_BITS, - fapi2::MSS_DISABLED_BITS().set_TARGET_IN_ERROR(i_target), - "port %d DP%d too many bad DQ bits 0x%016lx", l_which_port, l_which_dp, v.first); + fapi2::MSS_DISABLED_BITS() + .set_MCA_TARGET(i_target) + .set_DIMM_TARGET(i_dimm), + "%s port %d DP%d too many bad DQ bits 0x%016lx", mss::c_str(i_dimm), l_which_port, l_which_dp, v.first); // // Find the DQS mask for this DP. @@ -2409,8 +2411,8 @@ fapi2::ReturnCode process_bad_bits( const fapi2::Target<TARGET_TYPE_MCA>& i_targ FAPI_INF("bad DQS count for port %d DP%d %d", l_which_port, l_which_dp, l_dqs_bad_bit_count); FAPI_ASSERT(l_dqs_bad_bit_count < ((l_width == fapi2::ENUM_ATTR_EFF_DRAM_WIDTH_X8) ? MIN_BAD_X8_DQS : MIN_BAD_X4_DQS), - fapi2::MSS_DISABLED_BITS().set_TARGET_IN_ERROR(i_target), - "port %d DP%d too many bad DQS bits 0x%016lx", l_which_port, l_which_dp, v.second); + fapi2::MSS_DISABLED_BITS().set_MCA_TARGET(i_target).set_DIMM_TARGET(i_dimm), + "%s port %d DP%d too many bad DQS bits 0x%016lx", mss::c_str(i_dimm), l_which_port, l_which_dp, v.second); // So there's no way to get here if we have a x8 config. Either we had no bad DQS, in which case // we didn't come down here at all, or we have at least one bad DQS. And for x8 that means we have @@ -2427,8 +2429,14 @@ fapi2::ReturnCode process_bad_bits( const fapi2::Target<TARGET_TYPE_MCA>& i_targ // We shift it over to mask off the nibble we're checking const uint16_t l_dqs_nibble_mask = 0b1100000000000000 >> (n * BITS_PER_DQS); - FAPI_INF("port %d DP%d nibble %d (%d) mask: 0x%x dqs: 0x%x", - l_which_port, l_which_dp, n, n + l_which_nibble, l_dqs_nibble_mask, v.second); + FAPI_INF("%s port %d DP%d nibble %d (%d) mask: 0x%x dqs: 0x%x", + mss::c_str(i_dimm), + l_which_port, + l_which_dp, + n, + n + l_which_nibble, + l_dqs_nibble_mask, + v.second); if ((l_dqs_nibble_mask & v.second) != 0) { @@ -2441,8 +2449,12 @@ fapi2::ReturnCode process_bad_bits( const fapi2::Target<TARGET_TYPE_MCA>& i_targ // Check to see if the DQ nibble processing found more than one bad nibble. If it did, // we're done. FAPI_ASSERT(l_bad_nibbles.size() <= MAX_BAD_NIBBLES, - fapi2::MSS_DISABLED_BITS().set_TARGET_IN_ERROR(i_target), - "port %d DP%d too many bad nibbles %d", l_which_port, l_which_nibble, l_bad_nibbles.size()); + fapi2::MSS_DISABLED_BITS().set_MCA_TARGET(i_target).set_DIMM_TARGET(i_dimm), + "%s port %d DP%d too many bad nibbles %d", + mss::c_str(i_dimm), + l_which_port, + l_which_nibble, + l_bad_nibbles.size()); } // @@ -2463,8 +2475,8 @@ fapi2::ReturnCode process_bad_bits( const fapi2::Target<TARGET_TYPE_MCA>& i_targ // we add this bit to the total of bad singleton bits. const uint64_t l_bit_count = mss::bit_count(l_dq_nibble_mask & v.first); - FAPI_INF("port %d DP%d nibble %d (%d) mask: 0x%x dq: 0x%x c: %d", - l_which_port, l_which_dp, n, n + l_which_nibble, l_dq_nibble_mask, v.first, l_bit_count); + FAPI_INF("%s port %d DP%d nibble %d (%d) mask: 0x%x dq: 0x%x c: %d", + mss::c_str(i_dimm), l_which_port, l_which_dp, n, n + l_which_nibble, l_dq_nibble_mask, v.first, l_bit_count); // If we don't have any set bits, we're good to go. If we have more than the max bad bits, @@ -2494,17 +2506,17 @@ fapi2::ReturnCode process_bad_bits( const fapi2::Target<TARGET_TYPE_MCA>& i_targ // counts as a bad nibble. // FAPI_ASSERT(l_bad_nibbles.size() <= MAX_BAD_NIBBLES, - fapi2::MSS_DISABLED_BITS().set_TARGET_IN_ERROR(i_target), - "port %d DP%d too many bad nibbles %d", - l_which_port, l_which_dp, l_bad_nibbles.size()); + fapi2::MSS_DISABLED_BITS().set_MCA_TARGET(i_target).set_DIMM_TARGET(i_dimm), + "%s port %d DP%d too many bad nibbles %d", + mss::c_str(i_dimm), l_which_port, l_which_dp, l_bad_nibbles.size()); // If we have one bad nibble, assert that we have one or fewer bad bits if (l_bad_nibbles.size() == MAX_BAD_NIBBLES) { FAPI_ASSERT(l_bad_bits <= MAX_BAD_BITS, - fapi2::MSS_DISABLED_BITS().set_TARGET_IN_ERROR(i_target), - "port %d DP%d bad nibbles %d + %d bad bits", - l_which_port, l_which_dp, l_bad_nibbles.size(), l_bad_bits); + fapi2::MSS_DISABLED_BITS().set_MCA_TARGET(i_target).set_DIMM_TARGET(i_dimm), + "%s port %d DP%d bad nibbles %d + %d bad bits", + mss::c_str(i_dimm), l_which_port, l_which_dp, l_bad_nibbles.size(), l_bad_bits); } // If we have no bad nibbles, assert we have 2 or fewer bad bits. This is a sly bad nibble @@ -2512,9 +2524,9 @@ fapi2::ReturnCode process_bad_bits( const fapi2::Target<TARGET_TYPE_MCA>& i_targ if (l_bad_nibbles.size() == 0) { FAPI_ASSERT(l_bad_bits <= SLY_BAD_BITS, - fapi2::MSS_DISABLED_BITS().set_TARGET_IN_ERROR(i_target), - "port %d DP%d %d bad bits", - l_which_port, l_which_dp, l_bad_bits); + fapi2::MSS_DISABLED_BITS().set_MCA_TARGET(i_target).set_DIMM_TARGET(i_dimm), + "%s port %d DP%d %d bad bits", + mss::c_str(i_dimm), l_which_port, l_which_dp, l_bad_bits); } // We're all done. Clear the bit @@ -2727,7 +2739,7 @@ fapi2::ReturnCode process_rdvref_cal_errors( const fapi2::Target<fapi2::TARGET_T // the errors and the disables there. FAPI_ASSERT_NOEXIT(v == 0, fapi2::MSS_FAILED_RDVREF_CAL() - .set_TARGET_IN_ERROR(i_target) + .set_DIMM_TARGET(i_target) .set_REGISTER(TT::RD_VREF_CAL_ERROR_REG[l_index]) .set_VALUE(v), "DP16 failed read vref calibration on %s. register 0x%016lx value 0x%016lx", @@ -2789,7 +2801,7 @@ fapi2::ReturnCode process_wrvref_cal_errors( const fapi2::Target<fapi2::TARGET_T // Now does bitwise anding to determine what's an actual error w/ the masking FAPI_ASSERT_NOEXIT(0 == (l_mask_compare & l_data_it->first), fapi2::MSS_FAILED_WRVREF_CAL() - .set_TARGET_IN_ERROR(i_target) + .set_DIMM_TARGET(i_target) .set_REGISTER(TT::WR_VREF_ERROR_REG[l_index].first) .set_VALUE(l_data_it->first) .set_MASK(l_mask_it->first), @@ -2802,7 +2814,7 @@ fapi2::ReturnCode process_wrvref_cal_errors( const fapi2::Target<fapi2::TARGET_T FAPI_ASSERT_NOEXIT(0 == (l_mask_compare & l_data_it->second), fapi2::MSS_FAILED_WRVREF_CAL() - .set_TARGET_IN_ERROR(i_target) + .set_DIMM_TARGET(i_target) .set_REGISTER(TT::WR_VREF_ERROR_REG[l_index].second) .set_VALUE(l_data_it->second) .set_MASK(l_mask_it->second), diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/utils/checker.H b/src/import/chips/p9/procedures/hwp/memory/lib/utils/checker.H index 7d2b243ed..a5cbd8012 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/utils/checker.H +++ b/src/import/chips/p9/procedures/hwp/memory/lib/utils/checker.H @@ -152,7 +152,7 @@ inline fapi2::ReturnCode fail_for_invalid_map(const fapi2::Target<fapi2::TARGET_ fapi2::MSS_INVALID_KEY(). set_KEY(i_key). set_DATA(i_data). - set_TARGET(i_target), + set_DIMM_TARGET(i_target), "%s. %s Could not find value from key %d. Returned data: %d.", c_str(i_target), i_err_str, |