From 157d87dcea5a8679fcef352fb9200f0fbcaccdba Mon Sep 17 00:00:00 2001 From: Andre Marin Date: Mon, 27 Mar 2017 23:52:06 -0500 Subject: Change base decoder, add ddr4 namespace, and common API btw modules Change-Id: I67b3f7cb94d31b9f4e8438ec81794a7bfd66f64c Original-Change-Id: I78b8b929e3136e3edec646321e0d8bb32229911d Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/38506 Reviewed-by: STEPHEN GLANCY Tested-by: Jenkins Server Tested-by: Hostboot CI Reviewed-by: Brian R. Silver Reviewed-by: JACOB L. HARVEY Reviewed-by: Jennifer A. Stofer Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/54756 CI-Ready: Daniel M. Crowell Reviewed-by: Daniel M. Crowell Tested-by: Daniel M. Crowell --- .../memory/lib/spd/common/spd_decoder_base.H | 68 +++++++++++++++++++--- 1 file changed, 60 insertions(+), 8 deletions(-) (limited to 'src/import/generic/memory/lib/spd') diff --git a/src/import/generic/memory/lib/spd/common/spd_decoder_base.H b/src/import/generic/memory/lib/spd/common/spd_decoder_base.H index cef070dbe..af58d361d 100644 --- a/src/import/generic/memory/lib/spd/common/spd_decoder_base.H +++ b/src/import/generic/memory/lib/spd/common/spd_decoder_base.H @@ -48,11 +48,61 @@ namespace mss namespace spd { +/// +/// @brief Helper function to extract byte information +/// @tparam F the SPD field to extract +/// @param[in] i_target the dimm target +/// @param[in] i_spd_data the SPD data +/// @return extracted byte (right aligned) +/// +template< const field_t& F > +inline uint8_t extract_spd_field(const fapi2::Target& i_target, + const std::vector& i_spd_data) +{ + FAPI_INF("%s SPD data at Byte %d: 0x%llX.", + mss::c_str(i_target), + F.iv_byte, + i_spd_data[F.iv_byte]); + + fapi2::buffer l_buffer(i_spd_data[F.iv_byte]); + + // Extracting desired bits + uint8_t l_field_bits = 0; + l_buffer.extractToRight(l_field_bits); + + return l_field_bits; +} + +/// +/// @brief Helper function to extract byte information +/// @param[in] i_target the dimm target +/// @param[in] i_field the SPD field +/// @param[in] i_spd_data the SPD data +/// @return extracted byte (right aligned) +/// +inline uint8_t extract_spd_field(const fapi2::Target& i_target, + const field_t& i_field, + const std::vector& i_spd_data) +{ + FAPI_INF("%s SPD data at Byte %d: 0x%llX.", + mss::c_str(i_target), + i_field.iv_byte, + i_spd_data[i_field.iv_byte]); + + fapi2::buffer l_buffer(i_spd_data[i_field.iv_byte]); + + // Extracting desired bits + uint8_t l_field_bits = 0; + l_buffer.extractToRight( l_field_bits, i_field.iv_start, i_field.iv_length ); + + return l_field_bits; +} + /// /// @class decoder /// @brief Base SPD DRAM decoder /// -class base_decoder +class decoder { protected: @@ -84,8 +134,10 @@ class base_decoder std::vector iv_spd_data; rcw_settings iv_raw_card; - // Default constructor deleted - base_decoder() = delete; + /// + /// @brief default ctor + /// + decoder() = default; /// /// @brief ctor @@ -94,10 +146,10 @@ class base_decoder /// @param[in] i_module_decoder shared_ptr to dimm module decoder /// @param[in] i_raw_card raw pointer to rcd data /// - base_decoder(const fapi2::Target& i_target, - const std::vector& i_spd_data, - const std::shared_ptr& i_module_decoder, - const rcw_settings& i_raw_card) + decoder(const fapi2::Target& i_target, + const std::vector& i_spd_data, + const std::shared_ptr& i_module_decoder, + const rcw_settings& i_raw_card) : iv_target(i_target), iv_module_decoder(i_module_decoder), iv_spd_data(i_spd_data), @@ -107,7 +159,7 @@ class base_decoder /// /// @brief Default dtor /// - virtual ~base_decoder() = default; + virtual ~decoder() = default; ///////////////////////// // Member Methods -- cgit v1.2.1