summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Harvey <jlharvey@us.ibm.com>2017-02-09 15:19:14 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-02-27 11:43:58 -0500
commite96dafcc304c86c03efcfd4ce82ed502f0e8acaa (patch)
treecc05c7e2143c7d0c9aeafb2d1e15df3cb11755c7
parent0dbc28685354c5c8849d077797c345c3ca4ee162 (diff)
downloadtalos-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.H15
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder_v1_1.C47
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)") );
OpenPOWER on IntegriCloud