diff options
| author | Jacob Harvey <jlharvey@us.ibm.com> | 2017-02-09 15:19:14 -0600 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-02-27 11:43:58 -0500 |
| commit | e96dafcc304c86c03efcfd4ce82ed502f0e8acaa (patch) | |
| tree | cc05c7e2143c7d0c9aeafb2d1e15df3cb11755c7 | |
| parent | 0dbc28685354c5c8849d077797c345c3ca4ee162 (diff) | |
| download | talos-hostboot-e96dafcc304c86c03efcfd4ce82ed502f0e8acaa.tar.gz talos-hostboot-e96dafcc304c86c03efcfd4ce82ed502f0e8acaa.zip | |
Adding in register_type to RDIMM decoder
Change-Id: I5ceafb44c9a528fc476b0e6f2858d48712f52744
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/36245
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Brian R. Silver <bsilver@us.ibm.com>
Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/36470
Reviewed-by: Hostboot Team <hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
| -rw-r--r-- | src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder.H | 15 | ||||
| -rw-r--r-- | src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder_v1_1.C | 47 |
2 files changed, 56 insertions, 6 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder.H b/src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder.H index 63a87f93c..ac208e53c 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder.H +++ b/src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2016 */ +/* Contributors Listed Below - COPYRIGHT 2016,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -78,6 +78,8 @@ class rdimm_decoder_v1_0 : public dimm_module_decoder 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, @@ -356,6 +358,17 @@ class rdimm_decoder_v1_1 : public rdimm_decoder_v1_0 virtual ~rdimm_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) 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 diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder_v1_1.C b/src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder_v1_1.C index 39f6529e3..3c0802403 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder_v1_1.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder_v1_1.C @@ -53,6 +53,43 @@ namespace spd ///////////////////////// /// +/// @brief Decodes register type +/// @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 +/// +fapi2::ReturnCode rdimm_decoder_v1_1::register_and_buffer_type(uint8_t& o_output) +{ + constexpr size_t BYTE = 131; + // Extracting desired bits + uint8_t l_field_bits = extract_spd_field<BYTE, REGISTER_TYPE_START, REGISTER_TYPE_LEN>(iv_target, iv_spd_data); + FAPI_INF("Field Bits value: %d", l_field_bits); + + // This checks my extracting params returns a value within bound + constexpr size_t RESERVED = 2; + + FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target, + (l_field_bits < RESERVED), // extract sanity check + BYTE, + l_field_bits, + "Failed bounds check for Register and Data Buffer Types") ); + + // Update output only if check passes + o_output = l_field_bits; + + FAPI_INF("%s. Register Types: %d", + mss::c_str(iv_target), + o_output); + +fapi_try_exit: + return fapi2::current_err; + +} + +/// /// @brief Decodes register output drive strength for CKE signal /// @param[out] o_output drive strength encoding from SPD /// @return FAPI2_RC_SUCCESS if okay @@ -73,7 +110,7 @@ fapi2::ReturnCode rdimm_decoder_v1_1::cke_signal_output_driver(uint8_t& o_output constexpr size_t MAX_VALID_VALUE = 0b11; FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target, - l_field_bits <= MAX_VALID_VALUE, // extract sanity check + (l_field_bits <= MAX_VALID_VALUE), // extract sanity check BYTE, l_field_bits, "Failed bounds check for Register Output Driver for CKE") ); @@ -109,7 +146,7 @@ fapi2::ReturnCode rdimm_decoder_v1_1::odt_signal_output_driver(uint8_t& o_output constexpr size_t MAX_VALID_VALUE = 0b11; FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target, - l_field_bits <= MAX_VALID_VALUE, // extract sanity check + (l_field_bits <= MAX_VALID_VALUE), // extract sanity check BYTE, l_field_bits, "Failed bounds check for Register Output Driver for ODT") ); @@ -145,7 +182,7 @@ fapi2::ReturnCode rdimm_decoder_v1_1::cs_signal_output_driver(uint8_t& o_output) constexpr size_t MAX_VALID_VALUE = 0b11; FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target, - l_field_bits <= MAX_VALID_VALUE, // extract sanity check + (l_field_bits <= MAX_VALID_VALUE), // extract sanity check BYTE, l_field_bits, "Failed bounds check for Register Output Driver for chip select") ); @@ -181,7 +218,7 @@ fapi2::ReturnCode rdimm_decoder_v1_1::b_side_clk_output_driver(uint8_t& o_output constexpr size_t MAX_VALID_VAL = 2; FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target, - l_field_bits <= MAX_VALID_VAL, // extract sanity check + (l_field_bits <= MAX_VALID_VAL), // extract sanity check BYTE, l_field_bits, "Failed bounds check for Register Output Driver for clock (Y0,Y2)") ); @@ -217,7 +254,7 @@ fapi2::ReturnCode rdimm_decoder_v1_1::a_side_clk_output_driver(uint8_t& o_output constexpr size_t MAX_VALID_VAL = 2; FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target, - l_field_bits <= MAX_VALID_VAL, // extract sanity check + (l_field_bits <= MAX_VALID_VAL), // extract sanity check BYTE, l_field_bits, "Failed bounds check for Register Output Driver for clock (Y1,Y3)") ); |

