diff options
author | Louis Stermole <stermole@us.ibm.com> | 2018-10-10 16:24:30 -0500 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2018-10-18 11:12:01 -0500 |
commit | e5eb14043e5dee87618875f178c5af0c90f5166a (patch) | |
tree | 795cf6dd6aac256ade91fdd83f3384fbd7774d3c /src/import/chips/centaur | |
parent | a04dc7a75506e8668457b150e8a799f70105d843 (diff) | |
download | talos-hostboot-e5eb14043e5dee87618875f178c5af0c90f5166a.tar.gz talos-hostboot-e5eb14043e5dee87618875f178c5af0c90f5166a.zip |
Fix attribute access errors in p9c row_repair
Change-Id: Ibaaf1be76b716f529ce1c50a354735ceb68d35df
CQ:SW447633
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/67316
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/67327
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/chips/centaur')
-rw-r--r-- | src/import/chips/centaur/procedures/hwp/memory/p9c_mss_rowRepairFuncs.C | 102 | ||||
-rw-r--r-- | src/import/chips/centaur/procedures/hwp/memory/p9c_mss_row_repair.C | 14 |
2 files changed, 47 insertions, 69 deletions
diff --git a/src/import/chips/centaur/procedures/hwp/memory/p9c_mss_rowRepairFuncs.C b/src/import/chips/centaur/procedures/hwp/memory/p9c_mss_rowRepairFuncs.C index 3374ca723..65b95f894 100644 --- a/src/import/chips/centaur/procedures/hwp/memory/p9c_mss_rowRepairFuncs.C +++ b/src/import/chips/centaur/procedures/hwp/memory/p9c_mss_rowRepairFuncs.C @@ -23,91 +23,69 @@ /* */ /* IBM_PROLOG_END_TAG */ #include <p9c_mss_rowRepairFuncs.H> +#include <generic/memory/lib/utils/find.H> using namespace fapi2; extern "C" { - ReturnCode __getPairedDimm( + ReturnCode is_sPPR_supported( const Target<TARGET_TYPE_DIMM>& i_target, - Target<TARGET_TYPE_DIMM>& o_pairedDimm ) + bool& o_spprSupported ) { - std::vector<Target<TARGET_TYPE_DIMM>> l_dimms; - Target<TARGET_TYPE_MBA> l_mba; - uint8_t l_curPs = 0; - uint8_t l_curDs = 0; + const auto& l_mba = mss::find_target<fapi2::TARGET_TYPE_MBA>(i_target); + uint8_t l_my_dimm_index = 0; - // get port slct for our current target - FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_CEN_MBA_PORT, i_target, l_curPs) ); + o_spprSupported = true; - // get dimm slct for our current target - FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_CEN_MBA_DIMM, i_target, l_curDs) ); + ATTR_ROW_REPAIR_SUPPORTED_MRW_Type l_row_repair_supported_mrw + {ENUM_ATTR_ROW_REPAIR_SUPPORTED_MRW_SUPPORTED}; + FAPI_TRY ( FAPI_ATTR_GET( fapi2::ATTR_ROW_REPAIR_SUPPORTED_MRW, + Target<TARGET_TYPE_SYSTEM>(), + l_row_repair_supported_mrw ) ); - // get parent mba - l_mba = i_target.getParent<TARGET_TYPE_MBA>(); + // If sPPR isn't suppoerted per the MRW, we're done + if (l_row_repair_supported_mrw != ENUM_ATTR_ROW_REPAIR_SUPPORTED_MRW_SUPPORTED) + { + FAPI_INF("%s sPPR is not supported per ATTR_ROW_REPAIR_SUPPORTED_MRW", + mss::spd::c_str(i_target)); + o_spprSupported = false; + return fapi2::FAPI2_RC_SUCCESS; + } - // get connected dimms from mba - l_dimms = l_mba.getChildren<TARGET_TYPE_DIMM>(); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CEN_MBA_DIMM, i_target, l_my_dimm_index)); - // find the paired dimm (different port slct, same dimm slct) - for ( auto const& dimm : l_dimms ) + for (const auto& l_dimm : mss::find_targets<fapi2::TARGET_TYPE_DIMM>(l_mba)) { - uint8_t l_tmpPs = 0; - FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_CEN_MBA_PORT, dimm, l_tmpPs) ); + uint8_t l_dimm_index = 0; + + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CEN_MBA_DIMM, l_dimm, l_dimm_index)); - // DIMM on different port slct - if ( l_tmpPs != l_curPs ) + // If either of the DIMM pair (same DIMM select) doesn't support sPPR, neither can + if (l_dimm_index == l_my_dimm_index) { - uint8_t l_tmpDs = 0; - FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_CEN_MBA_DIMM, dimm, - l_tmpDs) ); + ATTR_ROW_REPAIR_SPPR_SUPPORTED_Type l_row_repair_supported_dimm + {ENUM_ATTR_ROW_REPAIR_SPPR_SUPPORTED_SUPPORTED}; + FAPI_TRY( FAPI_ATTR_GET( fapi2::ATTR_ROW_REPAIR_SPPR_SUPPORTED, + l_dimm, + l_row_repair_supported_dimm ) ); - // same DIMM select as the current DIMM - if ( l_tmpDs == l_curDs ) + if (l_row_repair_supported_dimm != ENUM_ATTR_ROW_REPAIR_SPPR_SUPPORTED_SUPPORTED) { - // found the paired DIMM - o_pairedDimm = dimm; - break; + FAPI_INF("%s sPPR is not supported per ATTR_ROW_REPAIR_SPPR_SUPPORTED", + mss::spd::c_str(l_dimm)); + o_spprSupported = false; + return fapi2::FAPI2_RC_SUCCESS; } } } - fapi_try_exit: - return fapi2::current_err; - } - - ReturnCode is_sPPR_supported( - const Target<TARGET_TYPE_DIMM>& i_target, - bool& o_spprSupported ) - { - ATTR_ROW_REPAIR_SUPPORTED_MRW_Type l_rr1; - FAPI_TRY ( FAPI_ATTR_GET( fapi2::ATTR_ROW_REPAIR_SUPPORTED_MRW, - Target<TARGET_TYPE_SYSTEM>(), l_rr1 ) ); - - ATTR_ROW_REPAIR_SPPR_SUPPORTED_Type l_rr2; - FAPI_TRY( FAPI_ATTR_GET( fapi2::ATTR_ROW_REPAIR_SPPR_SUPPORTED, - i_target, l_rr2 ) ); - - o_spprSupported = false; - - if ( ENUM_ATTR_ROW_REPAIR_SUPPORTED_MRW_SUPPORTED == l_rr1 && - ENUM_ATTR_ROW_REPAIR_SPPR_SUPPORTED_SUPPORTED == l_rr2 ) - { - // Check paired DIMM as well - Target<TARGET_TYPE_DIMM> l_pairedDimm; - FAPI_TRY( __getPairedDimm( i_target, l_pairedDimm ) ); - - ATTR_ROW_REPAIR_SPPR_SUPPORTED_Type l_rr3; - FAPI_TRY( FAPI_ATTR_GET( fapi2::ATTR_ROW_REPAIR_SPPR_SUPPORTED, - l_pairedDimm, l_rr3 ) ); - - if ( ENUM_ATTR_ROW_REPAIR_SPPR_SUPPORTED_SUPPORTED == l_rr3 ) - { - o_spprSupported = true; - } - } + // If we got here it means we've got sPPR support + return fapi2::FAPI2_RC_SUCCESS; fapi_try_exit: + // If we got here if means something failed, so return "no support" and the error code + o_spprSupported = false; return fapi2::current_err; } } diff --git a/src/import/chips/centaur/procedures/hwp/memory/p9c_mss_row_repair.C b/src/import/chips/centaur/procedures/hwp/memory/p9c_mss_row_repair.C index 64e67f33f..6b18508b7 100644 --- a/src/import/chips/centaur/procedures/hwp/memory/p9c_mss_row_repair.C +++ b/src/import/chips/centaur/procedures/hwp/memory/p9c_mss_row_repair.C @@ -329,7 +329,7 @@ extern "C" if (valid_row_repair_entry(l_row_repair_entry, l_dram, l_srank, l_bg, l_bank, l_row)) { FAPI_INF("Found valid row repair request in VPD for DIMM %s, DRAM %d, mrank %d, srank %d, bg %d, bank %d, row 0x%05x", - mss::c_str(i_target), l_dram, l_rank, l_srank, l_bg, l_bank, l_row); + mss::spd::c_str(i_target), l_dram, l_rank, l_srank, l_bg, l_bank, l_row); // Do some sanity checking here FAPI_ASSERT(l_dram < l_num_dram, @@ -342,7 +342,7 @@ extern "C" set_BANK(l_bank). set_ROW(l_row), "%s VPD contained out of bounds row repair entry: DRAM: %d mrank %d srank %d bg %d bank %d row 0x%05x", - mss::c_str(i_target), l_dram, l_rank, l_srank, l_bg, l_bank, l_row); + mss::spd::c_str(i_target), l_dram, l_rank, l_srank, l_bg, l_bank, l_row); // Add this rank to the total number of ranks this DRAM appears in ++io_dram_bad_in_ranks[l_dram]; @@ -411,7 +411,7 @@ extern "C" set_DIMM_TARGET(i_target). set_RANK(i_rank), "%s Row repair valid for rank %d but DRAM repairs are disabled in MNFG flags", - mss::c_str(i_target), i_rank); + mss::spd::c_str(i_target), i_rank); return fapi2::FAPI2_RC_SUCCESS; fapi_try_exit: @@ -593,13 +593,13 @@ extern "C" FAPI_TRY(l_dram_bitmap.setBit(DRAM_START_BIT + l_dram)); - FAPI_INF("Deploying row repair on DIMM %s, DRAM %d, mrank %d, srank %d, bg %d, bank %d, row 0x%05x", - mss::c_str(l_dimm), l_dram, l_rank, l_srank, l_bg, l_bank, l_row); + FAPI_INF("%s Deploying row repair on DRAM %d, mrank %d, srank %d, bg %d, bank %d, row 0x%05x", + mss::spd::c_str(l_dimm), l_dram, l_rank, l_srank, l_bg, l_bank, l_row); FAPI_TRY(p9c_mss_row_repair(i_target_mba, l_port, l_port_rank, l_srank, l_bg, l_bank, l_row, l_dram_bitmap)); // Clear bad DQ bits for this port, DIMM, rank that will be fixed by this row repair - FAPI_INF("Updating bad bits on DIMM %s, DRAM %d, mrank %d, srank %d, bg %d, bank %d, row 0x%05x", - mss::c_str(l_dimm), l_dram, l_rank, l_srank, l_bg, l_bank, l_row); + FAPI_INF("%s Updating bad bits on Port %d, DIMM %d, DRAM %d, mrank %d, srank %d, bg %d, bank %d, row 0x%05x", + mss::c_str(i_target_mba), l_port, l_dimm_index, l_dram, l_rank, l_srank, l_bg, l_bank, l_row); FAPI_TRY(dimmGetBadDqBitmap(i_target_mba, l_port, l_dimm_index, l_rank, l_bad_bits), "Error from dimmGetBadDqBitmap on %s.", mss::c_str(i_target_mba)); |