diff options
author | Jacob Harvey <jlharvey@us.ibm.com> | 2017-10-12 14:35:34 -0500 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2017-11-14 12:22:24 -0500 |
commit | f7dfd17dfc996414b5989aa464817dd595b5623b (patch) | |
tree | c0503431fe6a9f6efc8da89c1ac48c0af7be12b4 /src/import/chips/p9/procedures/hwp/memory/lib/spd | |
parent | d6c5b55b7f06dde471f63c0c275fe16b67418405 (diff) | |
download | talos-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.C | 66 | ||||
-rw-r--r-- | src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.H | 15 |
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 |