summaryrefslogtreecommitdiffstats
path: root/src/import/chips/centaur
diff options
context:
space:
mode:
authorLouis Stermole <stermole@us.ibm.com>2018-10-10 16:24:30 -0500
committerChristian R. Geddes <crgeddes@us.ibm.com>2018-10-18 11:12:01 -0500
commite5eb14043e5dee87618875f178c5af0c90f5166a (patch)
tree795cf6dd6aac256ade91fdd83f3384fbd7774d3c /src/import/chips/centaur
parenta04dc7a75506e8668457b150e8a799f70105d843 (diff)
downloadtalos-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.C102
-rw-r--r--src/import/chips/centaur/procedures/hwp/memory/p9c_mss_row_repair.C14
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));
OpenPOWER on IntegriCloud