Skip to content

Commit e96dafc

Browse files
JacobHarveydcrowell77
authored andcommitted
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>
1 parent 0dbc286 commit e96dafc

File tree

2 files changed

+56
-6
lines changed

2 files changed

+56
-6
lines changed

src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder.H

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
/* */
66
/* OpenPOWER HostBoot Project */
77
/* */
8-
/* Contributors Listed Below - COPYRIGHT 2016 */
8+
/* Contributors Listed Below - COPYRIGHT 2016,2017 */
99
/* [+] International Business Machines Corp. */
1010
/* */
1111
/* */
@@ -78,6 +78,8 @@ class rdimm_decoder_v1_0 : public dimm_module_decoder
7878
REGS_USED_LEN = 2,
7979
ROWS_OF_DRAMS_START = 4,
8080
ROWS_OF_DRAMS_LEN = 2,
81+
REGISTER_TYPE_START = 0,
82+
REGISTER_TYPE_LEN = 4,
8183

8284
// Byte 132
8385
HEAT_SPREADER_CHAR_START = 1,
@@ -355,6 +357,17 @@ class rdimm_decoder_v1_1 : public rdimm_decoder_v1_0
355357
///
356358
virtual ~rdimm_decoder_v1_1() = default;
357359

360+
///
361+
/// @brief Decodes register types
362+
/// @param[out] o_output encoding from SPD
363+
/// @return FAPI2_RC_SUCCESS if okay
364+
/// @note SPD Byte 131 (Bits 7~4)
365+
/// @note Item JEDEC Standard No. 21-C
366+
/// @note DDR4 SPD Document Release 3
367+
/// @note Page 4.1.2.12.3 - 63
368+
///
369+
virtual fapi2::ReturnCode register_and_buffer_type(uint8_t& o_output) override;
370+
358371
///
359372
/// @brief Decodes register output drive strength for CKE signal
360373
/// @param[out] o_output drive strength encoding from SPD

src/import/chips/p9/procedures/hwp/memory/lib/spd/rdimm/rdimm_decoder_v1_1.C

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,43 @@ namespace spd
5252
// For RDIMM module rev 1.1
5353
/////////////////////////
5454

55+
///
56+
/// @brief Decodes register type
57+
/// @param[out] o_output encoding from SPD
58+
/// @return FAPI2_RC_SUCCESS if okay
59+
/// @note SPD Byte 131 (Bits 7~4)
60+
/// @note Item JEDEC Standard No. 21-C
61+
/// @note DDR4 SPD Document Release 3
62+
/// @note Page 4.1.2.12.3 - 63
63+
///
64+
fapi2::ReturnCode rdimm_decoder_v1_1::register_and_buffer_type(uint8_t& o_output)
65+
{
66+
constexpr size_t BYTE = 131;
67+
// Extracting desired bits
68+
uint8_t l_field_bits = extract_spd_field<BYTE, REGISTER_TYPE_START, REGISTER_TYPE_LEN>(iv_target, iv_spd_data);
69+
FAPI_INF("Field Bits value: %d", l_field_bits);
70+
71+
// This checks my extracting params returns a value within bound
72+
constexpr size_t RESERVED = 2;
73+
74+
FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target,
75+
(l_field_bits < RESERVED), // extract sanity check
76+
BYTE,
77+
l_field_bits,
78+
"Failed bounds check for Register and Data Buffer Types") );
79+
80+
// Update output only if check passes
81+
o_output = l_field_bits;
82+
83+
FAPI_INF("%s. Register Types: %d",
84+
mss::c_str(iv_target),
85+
o_output);
86+
87+
fapi_try_exit:
88+
return fapi2::current_err;
89+
90+
}
91+
5592
///
5693
/// @brief Decodes register output drive strength for CKE signal
5794
/// @param[out] o_output drive strength encoding from SPD
@@ -73,7 +110,7 @@ fapi2::ReturnCode rdimm_decoder_v1_1::cke_signal_output_driver(uint8_t& o_output
73110
constexpr size_t MAX_VALID_VALUE = 0b11;
74111

75112
FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target,
76-
l_field_bits <= MAX_VALID_VALUE, // extract sanity check
113+
(l_field_bits <= MAX_VALID_VALUE), // extract sanity check
77114
BYTE,
78115
l_field_bits,
79116
"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
109146
constexpr size_t MAX_VALID_VALUE = 0b11;
110147

111148
FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target,
112-
l_field_bits <= MAX_VALID_VALUE, // extract sanity check
149+
(l_field_bits <= MAX_VALID_VALUE), // extract sanity check
113150
BYTE,
114151
l_field_bits,
115152
"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)
145182
constexpr size_t MAX_VALID_VALUE = 0b11;
146183

147184
FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target,
148-
l_field_bits <= MAX_VALID_VALUE, // extract sanity check
185+
(l_field_bits <= MAX_VALID_VALUE), // extract sanity check
149186
BYTE,
150187
l_field_bits,
151188
"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
181218
constexpr size_t MAX_VALID_VAL = 2;
182219

183220
FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target,
184-
l_field_bits <= MAX_VALID_VAL, // extract sanity check
221+
(l_field_bits <= MAX_VALID_VAL), // extract sanity check
185222
BYTE,
186223
l_field_bits,
187224
"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
217254
constexpr size_t MAX_VALID_VAL = 2;
218255

219256
FAPI_TRY( mss::check::spd::fail_for_invalid_value(iv_target,
220-
l_field_bits <= MAX_VALID_VAL, // extract sanity check
257+
(l_field_bits <= MAX_VALID_VAL), // extract sanity check
221258
BYTE,
222259
l_field_bits,
223260
"Failed bounds check for Register Output Driver for clock (Y1,Y3)") );

0 commit comments

Comments
 (0)