summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/memory/lib/spd
diff options
context:
space:
mode:
authorJacob Harvey <jlharvey@us.ibm.com>2017-10-12 14:35:34 -0500
committerChristian R. Geddes <crgeddes@us.ibm.com>2017-11-14 12:22:24 -0500
commitf7dfd17dfc996414b5989aa464817dd595b5623b (patch)
treec0503431fe6a9f6efc8da89c1ac48c0af7be12b4 /src/import/chips/p9/procedures/hwp/memory/lib/spd
parentd6c5b55b7f06dde471f63c0c275fe16b67418405 (diff)
downloadtalos-hostboot-f7dfd17dfc996414b5989aa464817dd595b5623b.tar.gz
talos-hostboot-f7dfd17dfc996414b5989aa464817dd595b5623b.zip
Fix RCW structure and make a default option
Change-Id: I7b0a2c66e78a6d05aa213cd2a51f637c808c857e Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48323 Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Louis Stermole <stermole@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Dev-Ready: JACOB L. HARVEY <jlharvey@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48528 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory/lib/spd')
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C66
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.H15
2 files changed, 63 insertions, 18 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C b/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C
index 87effa9d6..92a3402cf 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C
@@ -816,29 +816,22 @@ fapi2::ReturnCode raw_card_factory(const fapi2::Target<TARGET_TYPE_DIMM>& i_targ
(l_hybrid_type == fapi2::ENUM_ATTR_EFF_HYBRID_MEMORY_TYPE_NVDIMM))
{
l_ref_raw_card_rev = mss::rdimm::raw_card_rev::NVDIMM;
- FAPI_INF("%s is an NVDIMM, overwrote l_ref_raw_card_rev to be 0x%02x", mss::c_str(i_target), l_ref_raw_card_rev);
+ FAPI_INF("%s is an NVDIMM, overwrote l_ref_raw_card_rev to be 0x%02x",
+ mss::c_str(i_target),
+ l_ref_raw_card_rev);
}
- FAPI_ASSERT( find_value_from_key( mss::rdimm::RAW_CARDS, l_ref_raw_card_rev, o_raw_card),
- fapi2::MSS_INVALID_RAW_CARD()
- .set_DIMM_TYPE(l_dimm_type)
- .set_RAW_CARD_REV(l_ref_raw_card_rev)
- .set_DIMM_TARGET(i_target),
- "Invalid reference raw card received for RDIMM: %d for %s",
- l_ref_raw_card_rev,
- mss::c_str(i_target) );
+ o_raw_card = find_raw_card( i_target,
+ fapi2::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM,
+ l_ref_raw_card_rev,
+ mss::rdimm::RAW_CARDS);
break;
case fapi2::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM:
-
- FAPI_ASSERT( find_value_from_key( mss::lrdimm::RAW_CARDS, l_ref_raw_card_rev, o_raw_card),
- fapi2::MSS_INVALID_RAW_CARD()
- .set_DIMM_TYPE(l_dimm_type)
- .set_RAW_CARD_REV(l_ref_raw_card_rev)
- .set_DIMM_TARGET(i_target),
- "Invalid reference raw card received for LRDIMM: %d for %s",
- l_ref_raw_card_rev,
- mss::c_str(i_target));
+ o_raw_card = find_raw_card( i_target,
+ fapi2::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM,
+ l_ref_raw_card_rev,
+ mss::lrdimm::RAW_CARDS);
break;
default:
@@ -950,6 +943,43 @@ fapi_try_exit:
}
///
+/// @brief Wrapper function for finding the raw card
+/// @param[in] i_target the dimm target
+/// @param[in] i_dimm_type
+/// @param[in] i_ref_raw_card_rev for FFDC
+/// @param[in] i_map raw card map
+/// @return rcw_settings vector of rcw settings
+/// @note This specialization is suited for creating a cache with custom
+/// SPD data (e.g. testing custom SPD).
+///
+rcw_settings find_raw_card( const fapi2::Target<TARGET_TYPE_DIMM>& i_target,
+ const uint64_t i_dimm_type,
+ const uint8_t i_ref_raw_card_rev,
+ const std::vector<std::pair<uint8_t, rcw_settings> > i_map)
+{
+ rcw_settings l_raw_card;
+
+ FAPI_ASSERT( find_value_from_key( i_map, i_ref_raw_card_rev, l_raw_card),
+ fapi2::MSS_INVALID_RAW_CARD()
+ .set_DIMM_TYPE(i_dimm_type)
+ .set_RAW_CARD_REV(i_ref_raw_card_rev)
+ .set_DIMM_TARGET(i_target),
+ "Invalid reference raw card received for %s: %d for %s",
+ (i_dimm_type == fapi2::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) ? "RDIMM" : "LRDIMM",
+ i_ref_raw_card_rev,
+ mss::c_str(i_target) );
+
+ return l_raw_card;
+
+// If we got here there was a raw card we don't have values for, so putting the default
+fapi_try_exit:
+ fapi2::logError(fapi2::current_err, fapi2::FAPI2_ERRL_SEV_RECOVERED);
+ fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
+ return (i_dimm_type == fapi2::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) ?
+ rdimm_rc_default : lrdimm_rc_default;
+}
+
+///
/// @brief Creates factory object & SPD data caches
/// @param[in] i_target the dimm target
/// @param[out] o_factory_caches vector of factory objects
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.H b/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.H
index 85eafa8e0..281916d0b 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.H
@@ -141,6 +141,21 @@ fapi2::ReturnCode dram_device_type(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>&
uint8_t& o_value);
///
+/// @brief Wrapper function for finding the raw card
+/// @param[in] i_target the dimm target
+/// @param[in] i_dimm_type
+/// @param[in] i_ref_raw_card_rev for FFDC
+/// @param[in] i_map raw card map
+/// @return rcw_settings vector of rcw settings
+/// @note This specialization is suited for creating a cache with custom
+/// SPD data (e.g. testing custom SPD).
+///
+rcw_settings find_raw_card( const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
+ const uint64_t i_dimm_type,
+ const uint8_t i_ref_raw_card_rev,
+ const std::vector<std::pair<uint8_t, rcw_settings> > i_map);
+
+///
/// @brief Decodes reference raw card
/// @param[in] i_target dimm target
/// @param[in] i_spd_data SPD data
OpenPOWER on IntegriCloud