Skip to content

Commit

Permalink
Adding in register_type to RDIMM decoder
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
JacobHarvey authored and dcrowell77 committed Feb 27, 2017
1 parent 0dbc286 commit e96dafc
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 6 deletions.
Expand Up @@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2016 */
/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -355,6 +357,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
Expand Down
Expand Up @@ -52,6 +52,43 @@ namespace spd
// For RDIMM module rev 1.1
/////////////////////////

///
/// @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
Expand All @@ -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") );
Expand Down Expand Up @@ -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") );
Expand Down Expand Up @@ -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") );
Expand Down Expand Up @@ -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)") );
Expand Down Expand Up @@ -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)") );
Expand Down

0 comments on commit e96dafc

Please sign in to comment.