summaryrefslogtreecommitdiffstats
path: root/src/import/generic/memory/lib/spd/rdimm/ddr4/rdimm_decoder_ddr4.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/generic/memory/lib/spd/rdimm/ddr4/rdimm_decoder_ddr4.H')
-rw-r--r--src/import/generic/memory/lib/spd/rdimm/ddr4/rdimm_decoder_ddr4.H436
1 files changed, 209 insertions, 227 deletions
diff --git a/src/import/generic/memory/lib/spd/rdimm/ddr4/rdimm_decoder_ddr4.H b/src/import/generic/memory/lib/spd/rdimm/ddr4/rdimm_decoder_ddr4.H
index 0ec15c90e..96290460b 100644
--- a/src/import/generic/memory/lib/spd/rdimm/ddr4/rdimm_decoder_ddr4.H
+++ b/src/import/generic/memory/lib/spd/rdimm/ddr4/rdimm_decoder_ddr4.H
@@ -38,137 +38,79 @@
#include <fapi2.H>
#include <generic/memory/lib/spd/common/dimm_module_decoder.H>
+#include <generic/memory/lib/spd/spd_decoder_def.H>
+#include <generic/memory/lib/spd/spd_traits_ddr4.H>
+#include <generic/memory/lib/spd/spd_reader.H>
namespace mss
{
namespace spd
{
-namespace ddr4
-{
-namespace rdimm
-{
///
/// @class decoder
-/// @brief RDIMM module SPD DRAM decoder for rev 1.0
+/// @tparam R SPD revision - partial specialization
+/// @brief RDIMM module SPD DRAM decoder
///
-class decoder_v1_0 : public dimm_module_decoder
+template < rev R >
+class decoder<DDR4, RDIMM_MODULE, R > : public dimm_module_decoder
{
- protected:
+ private:
- enum
- {
- // Byte 128
- MODULE_NOM_HEIGHT_START = 3,
- MODULE_NOM_HEIGHT_LEN = 5,
- RAW_CARD_EXT_START = 0,
- RAW_CARD_EXT_LEN = 3,
-
- // Byte 129
- FRONT_MODULE_THICKNESS_START = 4,
- FRONT_MODULE_THICKNESS_LEN = 4,
- BACK_MODULE_THICKNESS_START = 0,
- BACK_MODULE_THICKNESS_LEN = 4,
-
- // Byte 130
- REF_RAW_CARD_START = 3,
- REF_RAW_CARD_LEN = 5,
- REF_RAW_CARD_REV_START = 1,
- REF_RAW_CARD_REV_LEN = 2,
- REF_RAW_CARD_EXT_START = 0,
- REF_RAW_CARD_EXT_LEN = 1,
-
- // Byte 131
- REGS_USED_START = 6,
- REGS_USED_LEN = 2,
- ROWS_OF_DRAMS_START = 4,
- ROWS_OF_DRAMS_LEN = 2,
- REGISTER_TYPE_START = 0,
- REGISTER_TYPE_LEN = 4,
-
- // Byte 132
- HEAT_SPREADER_CHAR_START = 1,
- HEAT_SPREADER_CHAR_LEN = 7,
- HEAT_SPREADER_SOL_START = 0,
- HEAT_SPREADER_SOL_LEN = 1,
-
- // Byte 133
- CONTINUATION_CODES_START = 1,
- CONTINUATION_CODES_LEN = 7,
-
- // Byte 134 - whole byte taken
- // Byte 135 - whole byte taken
-
- // Byte 136
- ADDR_MAPPING_START = 7,
- ADDR_MAPPING_LEN = 1,
-
- // Byte 137
- CKE_DRIVER_START = 6,
- CKE_DRIVER_LEN = 2,
- ODT_DRIVER_START = 4,
- ODT_DRIVER_LEN = 2,
- CA_DRIVER_START = 2,
- CA_DRIVER_LEN = 2,
- CS_DRIVER_START = 0,
- CS_DRIVER_LEN = 2,
-
- // Byte 138
- YO_Y2_DRIVER_START = 6,
- YO_Y2_DRIVER_LEN = 2,
- Y1_Y3_DRIVER_START = 4,
- Y1_Y3_DRIVER_LEN = 2,
- };
-
- enum addr_mapping
- {
- STANDARD = 0,
- MIRRORED = 1,
- };
+ using fields_t = fields<DDR4, RDIMM_MODULE>;
+ fapi2::Target<fapi2::TARGET_TYPE_DIMM> iv_target;
+ std::vector<uint8_t> iv_data;
public:
- // First field - SPD byte
- // Second field - start bit
- // Third field - bit length
- static constexpr field_t MODULE_NOMINAL_HEIGHT{128, MODULE_NOM_HEIGHT_START, MODULE_NOM_HEIGHT_LEN};
- static constexpr field_t RAW_CARD_EXTENSION{128, RAW_CARD_EXT_START, RAW_CARD_EXT_LEN};
- static constexpr field_t FRONT_MODULE_THICKNESS{129, FRONT_MODULE_THICKNESS_START, FRONT_MODULE_THICKNESS_LEN};
- static constexpr field_t BACK_MODULE_THICKNESS{129, BACK_MODULE_THICKNESS_START, BACK_MODULE_THICKNESS_LEN};
- static constexpr field_t REF_RAW_CARD{130, REF_RAW_CARD_START, REF_RAW_CARD_LEN};
- static constexpr field_t REF_RAW_CARD_REV{130, REF_RAW_CARD_REV_START, REF_RAW_CARD_REV_LEN};
- static constexpr field_t REF_RAW_CARD_EXT{130, REF_RAW_CARD_EXT_START, REF_RAW_CARD_EXT_LEN};
- static constexpr field_t NUM_REGS_USED{131, REGS_USED_START, REGS_USED_LEN};
- static constexpr field_t ROWS_OF_DRAMS{131, ROWS_OF_DRAMS_START, ROWS_OF_DRAMS_LEN};
- static constexpr field_t REGISTER_TYPE{131, REGISTER_TYPE_START, REGISTER_TYPE_LEN};
- static constexpr field_t HEAT_SPREADER_CHAR{132, HEAT_SPREADER_CHAR_START, HEAT_SPREADER_CHAR_LEN};
- static constexpr field_t HEAT_SPREADER_SOL{132, HEAT_SPREADER_SOL_START, HEAT_SPREADER_SOL_LEN};
- static constexpr field_t CONTINUATION_CODES{133, CONTINUATION_CODES_START, CONTINUATION_CODES_LEN};
- static constexpr field_t ADDR_MAPPING{136, ADDR_MAPPING_START, ADDR_MAPPING_LEN};
- static constexpr field_t CKE_DRIVER{137, CKE_DRIVER_START, CKE_DRIVER_LEN};
- static constexpr field_t ODT_DRIVER{137, ODT_DRIVER_START, ODT_DRIVER_LEN};
- static constexpr field_t CA_DRIVER{137, CA_DRIVER_START, CA_DRIVER_LEN};
- static constexpr field_t CS_DRIVER{137, CS_DRIVER_START, CS_DRIVER_LEN};
- static constexpr field_t YO_Y2_DRIVER{138, YO_Y2_DRIVER_START, YO_Y2_DRIVER_LEN};
- static constexpr field_t Y1_Y3_DRIVER{138, Y1_Y3_DRIVER_START, Y1_Y3_DRIVER_LEN};
-
// deleted default ctor
- decoder_v1_0() = delete;
+ decoder() = delete;
///
/// @brief ctor
/// @param[in] i_target dimm target
/// @param[in] i_spd_data vector DIMM SPD data
///
- decoder_v1_0(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
- const std::vector<uint8_t>& i_spd_data):
- dimm_module_decoder(i_target, i_spd_data)
- {}
+ decoder(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
+ const std::vector<uint8_t>& i_spd_data):
+ dimm_module_decoder(i_target, i_spd_data),
+ iv_target(i_target),
+ iv_data(i_spd_data)
+ {
+ static_assert( R <= rev::RDIMM_MAX, " R > rev::RDIMM_MAX");
+ }
///
/// @brief default dtor
///
- virtual ~decoder_v1_0() = default;
+ virtual ~decoder() = default;
+
+ ///
+ /// @brief Gets decoder target
+ /// @return fapi2::Target<fapi2::TARGET_TYPE_DIMM>
+ ///
+ virtual fapi2::Target<fapi2::TARGET_TYPE_DIMM> get_dimm_target() const
+ {
+ return iv_target;
+ }
+
+ ///
+ /// @brief Gets decoder SPD data
+ /// @return std::vector<uint8_t>
+ ///
+ virtual std::vector<uint8_t> get_data() const
+ {
+ return iv_data;
+ }
+
+ ///
+ /// @brief Sets decoder SPD data
+ /// @param[in] i_spd_data SPD data in a vector reference
+ ///
+ virtual void set_data(const std::vector<uint8_t>& i_spd_data)
+ {
+ iv_data = i_spd_data;
+ }
///
/// @brief Decodes module nominal height max, in mm
@@ -179,7 +121,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 48
///
- virtual fapi2::ReturnCode max_module_nominal_height(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode max_module_nominal_height(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::MODULE_NOMINAL_HEIGHT, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes front module maximum thickness max, in mm
@@ -190,7 +138,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 48
///
- virtual fapi2::ReturnCode front_module_max_thickness(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode front_module_max_thickness(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::FRONT_MODULE_THICKNESS, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes back module maximum thickness max, in mm
@@ -201,7 +155,30 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 48
///
- virtual fapi2::ReturnCode back_module_max_thickness(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode back_module_max_thickness(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::BACK_MODULE_THICKNESS, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
+
+ ///
+ /// @brief Decodes reference raw card used
+ /// @param[out] o_output encoding from SPD
+ /// @return FAPI2_RC_SUCCESS if okay
+ /// @note SPD Byte 130 (Bits 7~0)
+ /// @note Item JEDEC Standard No. 21-C
+ /// @note DDR4 SPD Document Release 2
+ /// @note Page 4.1.2.12 - 48
+ ///
+ virtual fapi2::ReturnCode reference_raw_card(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::REF_RAW_CARD, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes number of registers used on RDIMM
@@ -212,7 +189,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 50
///
- virtual fapi2::ReturnCode num_registers_used(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode num_registers_used(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::NUM_REGS_USED, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes number of rows of DRAMs on RDIMM
@@ -223,7 +206,31 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 50
///
- virtual fapi2::ReturnCode num_rows_of_drams(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode num_rows_of_drams(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::ROWS_OF_DRAMS, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+
+ }
+
+ ///
+ /// @brief Decodes register types
+ /// @param[out] o_output encoding from SPD
+ /// @return FAPI2_RC_SUCCESS if okay
+ /// @note SPD Byte 131 (Bits 7~4)
+ /// @note Item JEDEC Standard No. 21-C
+ /// @note DDR4 SPD Document Release 3
+ /// @note Page 4.1.2.12.3 - 63
+ ///
+ virtual fapi2::ReturnCode register_and_buffer_type(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::REGISTER_TYPE, R>(iv_target, iv_data, o_output)) );
+ fapi_try_exit:
+ return fapi2::current_err;
+
+ }
///
/// @brief Decodes heat spreader thermal characteristics
@@ -234,7 +241,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 51
///
- virtual fapi2::ReturnCode heat_spreader_thermal_char(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode heat_spreader_thermal_char(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::HEAT_SPREADER_CHAR, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes heat spreader solution
@@ -245,18 +258,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 51
///
- virtual fapi2::ReturnCode heat_spreader_solution(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode heat_spreader_solution(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::HEAT_SPREADER_SOL, R>(iv_target, iv_data, o_output)) );
- ///
- /// @brief Decodes number of continuation codes
- /// @param[out] o_output drive strength encoding from SPD
- /// @return FAPI2_RC_SUCCESS if okay
- /// @note SPD Byte 133 (bit 6~0)
- /// @note Item JEDEC Standard No. 21-C
- /// @note DDR4 SPD Document Release 2
- /// @note Page 4.1.2.12 - 51
- ///
- virtual fapi2::ReturnCode num_continuation_codes(uint8_t& o_output) const override;
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes register manufacturer ID code
@@ -267,7 +275,28 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 51
///
- virtual fapi2::ReturnCode reg_manufacturer_id_code(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode reg_manufacturer_id_code(uint16_t& o_output) const override
+ {
+ uint8_t l_cont_codes = 0;
+ uint8_t l_last_nonzero_byte = 0;
+
+ FAPI_TRY( (mss::spd::reader<fields_t::CONTINUATION_CODES, R>(iv_target, iv_data, l_cont_codes)) );
+ FAPI_TRY( (mss::spd::reader<fields_t::LAST_NON_ZERO_BYTE, R>(iv_target, iv_data, l_last_nonzero_byte)) );
+
+ {
+ fapi2::buffer<uint16_t> l_buffer;
+ rightAlignedInsert(l_buffer, l_last_nonzero_byte, l_cont_codes);
+
+ o_output = l_buffer;
+
+ FAPI_INF("%s. Register Manufacturer ID Code: 0x%04x",
+ spd::c_str(iv_target),
+ o_output);
+ }
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes register revision number
@@ -278,7 +307,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 51
///
- virtual fapi2::ReturnCode register_rev_num(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode register_rev_num(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::REGISTER_REV, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes address mapping from register to dram
@@ -289,7 +324,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 52
///
- virtual fapi2::ReturnCode register_to_dram_addr_mapping(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode register_to_dram_addr_mapping(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::ADDR_MAP_REG_TO_DRAM, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes register output drive strength for CKE signal
@@ -300,7 +341,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 53
///
- virtual fapi2::ReturnCode cke_signal_output_driver(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode cke_signal_output_driver(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::CKE_DRIVER, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes register output drive strength for ODT signal
@@ -311,7 +358,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 53
///
- virtual fapi2::ReturnCode odt_signal_output_driver(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode odt_signal_output_driver(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::ODT_DRIVER, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes register output drive strength for command/address (CA) signal
@@ -322,7 +375,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 53
///
- virtual fapi2::ReturnCode ca_signal_output_driver(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode ca_signal_output_driver(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::CA_DRIVER, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes register output drive strength for control signal (CS) signal
@@ -333,7 +392,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 53
///
- virtual fapi2::ReturnCode cs_signal_output_driver(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode cs_signal_output_driver(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::CS_DRIVER, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes register output drive strength for clock (B side)
@@ -344,7 +409,13 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 53
///
- virtual fapi2::ReturnCode b_side_clk_output_driver(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode b_side_clk_output_driver(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::YO_Y2_DRIVER, R>(iv_target, iv_data, o_output)) );
+
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
///
/// @brief Decodes register output drive strength for clock (A side)
@@ -355,106 +426,17 @@ class decoder_v1_0 : public dimm_module_decoder
/// @note DDR4 SPD Document Release 2
/// @note Page 4.1.2.12 - 53
///
- virtual fapi2::ReturnCode a_side_clk_output_driver(uint8_t& o_output) const override;
-
-};// decoder_v1_0
-
-///
-/// @class decoder
-/// @brief RDIMM module SPD DRAM decoder for rev 1.1
-///
-class decoder_v1_1 : public decoder_v1_0
-{
- public:
-
- // deleted default ctor
- decoder_v1_1() = delete;
-
- ///
- /// @brief ctor
- /// @param[in] i_target dimm target
- /// @param[in] i_spd_data vector DIMM SPD data
- ///
- decoder_v1_1(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
- const std::vector<uint8_t>& i_spd_data):
- decoder_v1_0(i_target, i_spd_data)
- {}
-
- ///
- /// @brief default dtor
- ///
- virtual ~decoder_v1_1() = default;
-
- ///
- /// @brief Decodes register types
- /// @param[out] o_output encoding from SPD
- /// @return FAPI2_RC_SUCCESS if okay
- /// @note SPD Byte 131 (Bits 7~4)
- /// @note Item JEDEC Standard No. 21-C
- /// @note DDR4 SPD Document Release 3
- /// @note Page 4.1.2.12.3 - 63
- ///
- virtual fapi2::ReturnCode register_and_buffer_type(uint8_t& o_output) const override;
-
- ///
- /// @brief Decodes register output drive strength for CKE signal
- /// @param[out] o_output drive strength encoding from SPD
- /// @return FAPI2_RC_SUCCESS if okay
- /// @note SPD Byte 137 (bit 1~0)
- /// @note Item JC-45-2220.01x
- /// @note Page 76
- /// @note DDR4 SPD Document Release 4
- ///
- virtual fapi2::ReturnCode cke_signal_output_driver(uint8_t& o_output) const override;
-
- ///
- /// @brief Decodes register output drive strength for ODT signal
- /// @param[out] o_output drive strength encoding from SPD
- /// @return FAPI2_RC_SUCCESS if okay
- /// @note SPD Byte 137 (bit 3~2)
- /// @note Item JC-45-2220.01x
- /// @note Page 76
- /// @note DDR4 SPD Document Release 4
- ///
- virtual fapi2::ReturnCode odt_signal_output_driver(uint8_t& o_output) const override;
-
- ///
- /// @brief Decodes register output drive strength for control signal (CS) signal
- /// @param[out] o_output drive strength encoding from SPD
- /// @return FAPI2_RC_SUCCESS if okay
- /// @note SPD Byte 137 (bit 6~7)
- /// @note Item JC-45-2220.01x
- /// @note Page 76
- /// @note DDR4 SPD Document Release 4
- ///
- virtual fapi2::ReturnCode cs_signal_output_driver(uint8_t& o_output) const override;
+ virtual fapi2::ReturnCode a_side_clk_output_driver(uint8_t& o_output) const override
+ {
+ FAPI_TRY( (mss::spd::reader<fields_t::Y1_Y3_DRIVER, R>(iv_target, iv_data, o_output)) );
- ///
- /// @brief Decodes register output drive strength for clock (B side)
- /// @param[out] o_output drive strength encoding from SPD
- /// @return FAPI2_RC_SUCCESS if okay
- /// @note SPD Byte 138 (bit 1~0)
- /// @note Item JC-45-2220.01x
- /// @note Page 76
- /// @note DDR4 SPD Document Release 4
- ///
- virtual fapi2::ReturnCode b_side_clk_output_driver(uint8_t& o_output) const override;
+ fapi_try_exit:
+ return fapi2::current_err;
+ }
- ///
- /// @brief Decodes register output drive strength for clock (A side)
- /// @param[out] o_output drive strength encoding from SPD
- /// @return FAPI2_RC_SUCCESS if okay
- /// @note SPD Byte 138 (bit 3~2)
- /// @note Item JC-45-2220.01x
- /// @note Page 76
- /// @note DDR4 SPD Document Release 4
- ///
- virtual fapi2::ReturnCode a_side_clk_output_driver(uint8_t& o_output) const override;
-};//decoder_v1_1
+};// decoder
-}// rdimm
-}// ddr4
}// spd
}// mss
OpenPOWER on IntegriCloud