summaryrefslogtreecommitdiffstats
path: root/src/import/generic/memory/lib/spd
diff options
context:
space:
mode:
authorAndre Marin <aamarin@us.ibm.com>2018-09-05 14:51:17 -0500
committerChristian R. Geddes <crgeddes@us.ibm.com>2018-09-27 09:42:51 -0500
commit0fb82ef1a41044a7dce49adee8215e8fbf448d0e (patch)
tree732b18cf3c6636b5621f255317f7dc2acdc8101c /src/import/generic/memory/lib/spd
parentf43f978d59a36e17e6f55bd592f7ce5229a670b4 (diff)
downloadtalos-hostboot-0fb82ef1a41044a7dce49adee8215e8fbf448d0e.tar.gz
talos-hostboot-0fb82ef1a41044a7dce49adee8215e8fbf448d0e.zip
Initial mss_field endian modification
Change-Id: Ia64288c78b36dc77cd0440a83e859650631e3c06 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/65722 Reviewed-by: Louis Stermole <stermole@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/66552 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/generic/memory/lib/spd')
-rw-r--r--src/import/generic/memory/lib/spd/spd_factory_pattern.C3
-rw-r--r--src/import/generic/memory/lib/spd/spd_field.C18
-rw-r--r--src/import/generic/memory/lib/spd/spd_field.H12
-rw-r--r--src/import/generic/memory/lib/spd/spd_fields_ddr4.H336
-rw-r--r--src/import/generic/memory/lib/spd/spd_reader.H10
-rw-r--r--src/import/generic/memory/lib/spd/spd_traits.H2
-rw-r--r--src/import/generic/memory/lib/spd/spd_traits_ddr4.H2
7 files changed, 204 insertions, 179 deletions
diff --git a/src/import/generic/memory/lib/spd/spd_factory_pattern.C b/src/import/generic/memory/lib/spd/spd_factory_pattern.C
index dceb944fa..de873fe0d 100644
--- a/src/import/generic/memory/lib/spd/spd_factory_pattern.C
+++ b/src/import/generic/memory/lib/spd/spd_factory_pattern.C
@@ -232,7 +232,8 @@ factories::factories(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
"Failed to read DEVICE_TYPE field for %s", spd::c_str(i_target) );
FAPI_TRY( (reader<init_fields::HYBRID, spd::rev::GEN_SEC_MAX>(i_target, i_spd_data, iv_hybrid)),
"Failed to read HYBRID field for %s", spd::c_str(i_target) );
- FAPI_TRY( (reader<init_fields::HYBRID_MEDIA, spd::rev::GEN_SEC_MAX>(i_target, i_spd_data, iv_hybrid_media)),
+ FAPI_TRY( (reader<init_fields::HYBRID_MEDIA, spd::rev::GEN_SEC_MAX>(i_target, i_spd_data,
+ iv_hybrid_media)),
"Failed to read HYBRID_MEDIA field for %s", spd::c_str(i_target) );
o_rc = fapi2::FAPI2_RC_SUCCESS;
diff --git a/src/import/generic/memory/lib/spd/spd_field.C b/src/import/generic/memory/lib/spd/spd_field.C
index 20b7a2089..fa78ca8fb 100644
--- a/src/import/generic/memory/lib/spd/spd_field.C
+++ b/src/import/generic/memory/lib/spd/spd_field.C
@@ -22,3 +22,21 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
+#include <generic/memory/lib/spd/spd_field.H>
+
+namespace mss
+{
+namespace spd
+{
+
+// If a constexpr static data member (since C++11) is odr-used,
+// a definition at namespace scope is still required, but it cannot have an initializer.
+constexpr mss::field_t<mss::endian::LITTLE> init_fields::REVISION;
+constexpr mss::field_t<mss::endian::LITTLE> init_fields::DEVICE_TYPE;
+constexpr mss::field_t<mss::endian::LITTLE> init_fields::BASE_MODULE;
+constexpr mss::field_t<mss::endian::LITTLE> init_fields::HYBRID;
+constexpr mss::field_t<mss::endian::LITTLE> init_fields::HYBRID_MEDIA;
+constexpr mss::field_t<mss::endian::LITTLE> init_fields::REF_RAW_CARD;
+
+}// spd
+}// mss
diff --git a/src/import/generic/memory/lib/spd/spd_field.H b/src/import/generic/memory/lib/spd/spd_field.H
index 03c1da7b1..a0b759ace 100644
--- a/src/import/generic/memory/lib/spd/spd_field.H
+++ b/src/import/generic/memory/lib/spd/spd_field.H
@@ -84,12 +84,12 @@ class init_fields
// 1st field: Byte number
// 2nd field: Start bit
// 3rd field: Bit length
- static constexpr mss::field_t REVISION{1, REVISION_START, REVISION_LEN};
- static constexpr mss::field_t DEVICE_TYPE{2, DEVICE_TYPE_START, DEVICE_TYPE_LEN};
- static constexpr mss::field_t BASE_MODULE{3, BASE_MODULE_START, BASE_MODULE_LEN};
- static constexpr mss::field_t HYBRID{3, HYBRID_START, HYBRID_LEN};
- static constexpr mss::field_t HYBRID_MEDIA{3, HYBRID_MEDIA_START, HYBRID_MEDIA_LEN};
- static constexpr mss::field_t REF_RAW_CARD{130, REF_RAW_CARD_START, REF_RAW_CARD_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> REVISION{1, REVISION_START, REVISION_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DEVICE_TYPE{2, DEVICE_TYPE_START, DEVICE_TYPE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BASE_MODULE{3, BASE_MODULE_START, BASE_MODULE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> HYBRID{3, HYBRID_START, HYBRID_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> HYBRID_MEDIA{3, HYBRID_MEDIA_START, HYBRID_MEDIA_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> REF_RAW_CARD{130, REF_RAW_CARD_START, REF_RAW_CARD_LEN};
};
///
diff --git a/src/import/generic/memory/lib/spd/spd_fields_ddr4.H b/src/import/generic/memory/lib/spd/spd_fields_ddr4.H
index 8abadf9eb..ccabc14ce 100644
--- a/src/import/generic/memory/lib/spd/spd_fields_ddr4.H
+++ b/src/import/generic/memory/lib/spd/spd_fields_ddr4.H
@@ -53,9 +53,11 @@ namespace spd
/// they need have external linkage. Currently C++11 can achieve this
/// by making them static constexpr member variables.
///
-template<>
+template <>
class fields<DDR4, BASE_CNFG>
{
+ private:
+
enum
{
// Byte 0
@@ -385,94 +387,94 @@ class fields<DDR4, BASE_CNFG>
// 1st field: Byte number
// 2nd field: Start bit
// 3rd field: Bit length
- static constexpr mss::field_t BYTES_USED{0, BYTES_USED_START, BYTES_USED_LEN};
- static constexpr mss::field_t TOTAL_BYTES{0, BYTES_TOTAL_START, BYTES_TOTAL_LEN};
- static constexpr mss::field_t REVISION{1, REVISION_START, REVISION_LEN};
- static constexpr mss::field_t DEVICE_TYPE{2, DEVICE_TYPE_START, DEVICE_TYPE_LEN};
- static constexpr mss::field_t BASE_MODULE{3, BASE_MODULE_START, BASE_MODULE_LEN};
- static constexpr mss::field_t HYBRID{3, HYBRID_START, HYBRID_LEN};
- static constexpr mss::field_t HYBRID_MEDIA{3, HYBRID_MEDIA_START, HYBRID_MEDIA_LEN};
- static constexpr mss::field_t SDRAM_CAPACITY{4, SDRAM_CAPACITY_START, SDRAM_CAPACITY_LEN};
- static constexpr mss::field_t BANKS_ADDR_BITS{4, SDRAM_BANKS_START, SDRAM_BANKS_LEN};
- static constexpr mss::field_t BANK_GROUP_BITS{4, BANK_GROUP_START, BANK_GROUP_LEN};
- static constexpr mss::field_t COL_ADDR_BITS{5, COL_ADDRESS_START, COL_ADDRESS_LEN};
- static constexpr mss::field_t ROW_ADDR_BITS{5, ROW_ADDRESS_START, ROW_ADDRESS_LEN};
- static constexpr mss::field_t PRIM_SIGNAL_LOADING{6, PRIM_SIGNAL_LOAD_START, PRIM_SIGNAL_LOAD_LEN};
- static constexpr mss::field_t PRIM_DIE_COUNT{6, PRIM_DIE_COUNT_START, PRIM_DIE_COUNT_LEN};
- static constexpr mss::field_t PRIM_PACKAGE_TYPE{6, PRIM_PACKAGE_TYPE_START, PRIM_PACKAGE_TYPE_LEN};
- static constexpr mss::field_t MAC{7, MAC_START, MAC_LEN};
- static constexpr mss::field_t TMAW{7, TMAW_START, TMAW_LEN};
- static constexpr mss::field_t PPR{9, PPR_START, PPR_LEN};
- static constexpr mss::field_t SOFT_PPR{9, SOFT_PPR_START, SOFT_PPR_LEN};
- static constexpr mss::field_t SEC_SIGNAL_LOADING{10, SEC_SIGNAL_LOAD_START, SEC_SIGNAL_LOAD_LEN};
- static constexpr mss::field_t SEC_DENSITY_RATIO{10, DENSITY_RATIO_START, DENSITY_RATIO_LEN};
- static constexpr mss::field_t SEC_DIE_COUNT{10, SEC_DIE_COUNT_START, SEC_DIE_COUNT_LEN};
- static constexpr mss::field_t SEC_PACKAGE_TYPE{10, SEC_PACKAGE_TYPE_START, SEC_PACKAGE_TYPE_LEN};
- static constexpr mss::field_t OPERABLE_FLD{11, OPERABLE_START, OPERABLE_LEN};
- static constexpr mss::field_t ENDURANT_FLD{11, ENDURANT_START, ENDURANT_LEN};
- static constexpr mss::field_t SDRAM_WIDTH{12, SDRAM_WIDTH_START, SDRAM_WIDTH_LEN};
- static constexpr mss::field_t RANK_MIX{12, RANK_MIX_START, RANK_MIX_LEN};
- static constexpr mss::field_t PACKAGE_RANKS{12, PACKAGE_RANKS_START, PACKAGE_RANKS_LEN};
- static constexpr mss::field_t BUS_WIDTH{13, BUS_WIDTH_START, BUS_WIDTH_LEN};
- static constexpr mss::field_t BUS_EXT_WIDTH{13, BUS_EXT_WIDTH_START, BUS_EXT_WIDTH_LEN};
- static constexpr mss::field_t THERM_SENSOR{14, THERM_SENSOR_START, THERM_SENSOR_LEN};
- static constexpr mss::field_t EXTENDED_MODULE_TYPE{15, EXT_MOD_TYPE_START, EXT_MOD_TYPE_LEN};
- static constexpr mss::field_t FINE_TIMEBASE{17, FINE_TIMEBASE_START, FINE_TIMEBASE_LEN};
- static constexpr mss::field_t MEDIUM_TIMEBASE{17, MED_TIMEBASE_START, MED_TIMEBASE_LEN};
- static constexpr mss::field_t TCK_MIN{18, TCK_MIN_START, TCK_MIN_LEN};
- static constexpr mss::field_t TCK_MAX{19, TCK_MAX_START, TCK_MAX_LEN};
- static constexpr mss::field_t CL_FIRST_BYTE{20, CAS_BYTE_1_START, CAS_BYTE_1_LEN};
- static constexpr mss::field_t CL_SECOND_BYTE{21, CAS_BYTE_2_START, CAS_BYTE_2_LEN};
- static constexpr mss::field_t CL_THIRD_BYTE{22, CAS_BYTE_3_START, CAS_BYTE_3_LEN};
- static constexpr mss::field_t CL_FOURTH_BYTE{23, CAS_BYTE_4_START, CAS_BYTE_4_LEN};
- static constexpr mss::field_t TAA_MIN{24, TAA_MIN_START, TAA_MIN_LEN};
- static constexpr mss::field_t TRCD_MIN{25, TRCD_MIN_START, TRCD_MIN_LEN};
- static constexpr mss::field_t TRP_MIN{26, TRP_MIN_START, TRP_MIN_LEN};
- static constexpr mss::field_t TRASMIN_MSN{27, TRASMIN_MSN_START, TRASMIN_MSN_LEN};
- static constexpr mss::field_t TRASMIN_LSB{28, TRASMIN_LSB_START, TRASMIN_LSB_LEN};
- static constexpr mss::field_t TRCMIN_MSN{27, TRCMIN_MSN_START, TRCMIN_MSN_LEN};
- static constexpr mss::field_t TRCMIN_LSB{29, TRCMIN_LSB_START, TRCMIN_LSB_LEN};
- static constexpr mss::field_t TRFC1MIN_LSB{30, TRFC1MIN_LSB_START, TRFC1MIN_LSB_LEN};
- static constexpr mss::field_t TRFC1MIN_MSB{31, TRFC1MIN_MSB_START, TRFC1MIN_MSB_LEN};
- static constexpr mss::field_t TRFC2MIN_LSB{32, TRFC2MIN_LSB_START, TRFC2MIN_LSB_LEN};
- static constexpr mss::field_t TRFC2MIN_MSB{33, TRFC2MIN_MSB_START, TRFC2MIN_MSB_LEN};
- static constexpr mss::field_t TRFC4MIN_LSB{34, TRFC4MIN_LSB_START, TRFC4MIN_LSB_LEN};
- static constexpr mss::field_t TRFC4MIN_MSB{35, TRFC4MIN_MSB_START, TRFC4MIN_MSB_LEN};
- static constexpr mss::field_t TFAWMIN_MSN{36, TFAWMIN_MSN_START, TFAWMIN_MSN_LEN};
- static constexpr mss::field_t TFAWMIN_LSB{37, TFAWMIN_LSB_START, TFAWMIN_LSB_LEN};
- static constexpr mss::field_t TRRD_S_MIN{38, TRRD_S_MIN_START, TRRD_S_MIN_LEN};
- static constexpr mss::field_t TRRD_L_MIN{39, TRRD_L_MIN_START, TRRD_L_MIN_LEN};
- static constexpr mss::field_t TCCD_L_MIN{39, TCCD_L_MIN_START, TCCD_L_MIN_LEN};
- static constexpr mss::field_t TWRMIN_MSN{41, TWRMIN_MSN_START, TWRMIN_MSN_LEN};
- static constexpr mss::field_t TWRMIN_LSB{42, TWRMIN_LSB_START, TWRMIN_LSB_LEN};
- static constexpr mss::field_t TWTRMIN_S_MSN{43, TWTRMIN_S_MSN_START, TWTRMIN_S_MSN_LEN};
- static constexpr mss::field_t TWTRMIN_S_LSB{44, TWTRMIN_S_LSB_START, TWTRMIN_S_LSB_LEN};
- static constexpr mss::field_t TWTRMIN_L_MSN{43, TWTRMIN_L_MSN_START, TWTRMIN_L_MSN_LEN};
- static constexpr mss::field_t TWTRMIN_L_LSB{45, TWTRMIN_L_LSB_START, TWTRMIN_L_LSB_LEN};
- static constexpr mss::field_t OFFSET_TCCD_L_MIN{117, OFFSET_TCCD_L_MIN_START, OFFSET_TCCD_L_MIN_LEN};
- static constexpr mss::field_t OFFSET_TRRD_L_MIN{118, OFFSET_TRRD_L_MIN_START, OFFSET_TRRD_L_MIN_LEN};
- static constexpr mss::field_t OFFSET_TRRD_S_MIN{119, OFFSET_TRRD_S_MIN_START, OFFSET_TRRD_S_MIN_LEN};
- static constexpr mss::field_t OFFSET_TRC_MIN{120, OFFSET_TRC_MIN_START, OFFSET_TRC_MIN_LEN};
- static constexpr mss::field_t OFFSET_TRP_MIN{121, OFFSET_TRP_MIN_START, OFFSET_TRP_MIN_LEN};
- static constexpr mss::field_t OFFSET_TRCD_MIN{122, OFFSET_TRCD_MIN_START, OFFSET_TRCD_MIN_LEN};
- static constexpr mss::field_t OFFSET_TAA_MIN{123, OFFSET_TAA_MIN_START, OFFSET_TAA_MIN_LEN};
- static constexpr mss::field_t OFFSET_TCK_MAX{124, OFFSET_TCK_MAX_START, OFFSET_TCK_MAX_LEN};
- static constexpr mss::field_t OFFSET_TCK_MIN{125, OFFSET_TCK_MIN_START, OFFSET_TCK_MIN_LEN};
- static constexpr mss::field_t CRC_LSB{126, CRC_LSB_START, CRC_LSB_LEN};
- static constexpr mss::field_t CRC_MSB{127, CRC_MSB_START, CRC_MSB_LEN};
- static constexpr mss::field_t CONTINUATION_CODES{320, CONTINUATION_CODES_START, CONTINUATION_CODES_LEN};
- static constexpr mss::field_t LAST_NON_ZERO_BYTE{321, LAST_NON_ZERO_BYTE_START, LAST_NON_ZERO_BYTE_LEN};
- static constexpr mss::field_t MODULE_MFG_LOCATION{322, MODULE_MFG_LOC_START, MODULE_MFG_LOC_LEN};
- static constexpr mss::field_t MODULE_MFG_DATE_LSB{323, MODULE_MFG_DATE_START, MODULE_MFG_DATE_LEN};
- static constexpr mss::field_t MODULE_MFG_DATE_MSB{324, MODULE_MFG_DATE_START, MODULE_MFG_DATE_LEN};
- static constexpr mss::field_t MODULE_SERIAL_NUM_BYTE1{325, MODULE_SERIAL_NUM_START, MODULE_SERIAL_NUM_LEN};
- static constexpr mss::field_t MODULE_SERIAL_NUM_BYTE2{326, MODULE_SERIAL_NUM_START, MODULE_SERIAL_NUM_LEN};
- static constexpr mss::field_t MODULE_SERIAL_NUM_BYTE3{327, MODULE_SERIAL_NUM_START, MODULE_SERIAL_NUM_LEN};
- static constexpr mss::field_t MODULE_SERIAL_NUM_BYTE4{328, MODULE_SERIAL_NUM_START, MODULE_SERIAL_NUM_LEN};
- static constexpr mss::field_t MODULE_REV_CODE{349, MODULE_REV_CODE_START, MODULE_REV_CODE_LEN};
- static constexpr mss::field_t DRAM_MFR_ID_CODE_LSB{350, DRAM_MFR_ID_CODE_START, DRAM_MFR_ID_CODE_LEN};
- static constexpr mss::field_t DRAM_MFR_ID_CODE_MSB{351, DRAM_MFR_ID_CODE_START, DRAM_MFR_ID_CODE_LEN};
- static constexpr mss::field_t DRAM_STEPPING{352, DRAM_STEPPING_START, DRAM_STEPPING_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BYTES_USED{0, BYTES_USED_START, BYTES_USED_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TOTAL_BYTES{0, BYTES_TOTAL_START, BYTES_TOTAL_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> REVISION{1, REVISION_START, REVISION_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DEVICE_TYPE{2, DEVICE_TYPE_START, DEVICE_TYPE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BASE_MODULE{3, BASE_MODULE_START, BASE_MODULE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> HYBRID{3, HYBRID_START, HYBRID_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> HYBRID_MEDIA{3, HYBRID_MEDIA_START, HYBRID_MEDIA_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> SDRAM_CAPACITY{4, SDRAM_CAPACITY_START, SDRAM_CAPACITY_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BANKS_ADDR_BITS{4, SDRAM_BANKS_START, SDRAM_BANKS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BANK_GROUP_BITS{4, BANK_GROUP_START, BANK_GROUP_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> COL_ADDR_BITS{5, COL_ADDRESS_START, COL_ADDRESS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> ROW_ADDR_BITS{5, ROW_ADDRESS_START, ROW_ADDRESS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> PRIM_SIGNAL_LOADING{6, PRIM_SIGNAL_LOAD_START, PRIM_SIGNAL_LOAD_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> PRIM_DIE_COUNT{6, PRIM_DIE_COUNT_START, PRIM_DIE_COUNT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> PRIM_PACKAGE_TYPE{6, PRIM_PACKAGE_TYPE_START, PRIM_PACKAGE_TYPE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MAC{7, MAC_START, MAC_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TMAW{7, TMAW_START, TMAW_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> PPR{9, PPR_START, PPR_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> SOFT_PPR{9, SOFT_PPR_START, SOFT_PPR_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> SEC_SIGNAL_LOADING{10, SEC_SIGNAL_LOAD_START, SEC_SIGNAL_LOAD_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> SEC_DENSITY_RATIO{10, DENSITY_RATIO_START, DENSITY_RATIO_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> SEC_DIE_COUNT{10, SEC_DIE_COUNT_START, SEC_DIE_COUNT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> SEC_PACKAGE_TYPE{10, SEC_PACKAGE_TYPE_START, SEC_PACKAGE_TYPE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OPERABLE_FLD{11, OPERABLE_START, OPERABLE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> ENDURANT_FLD{11, ENDURANT_START, ENDURANT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> SDRAM_WIDTH{12, SDRAM_WIDTH_START, SDRAM_WIDTH_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> RANK_MIX{12, RANK_MIX_START, RANK_MIX_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> PACKAGE_RANKS{12, PACKAGE_RANKS_START, PACKAGE_RANKS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BUS_WIDTH{13, BUS_WIDTH_START, BUS_WIDTH_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BUS_EXT_WIDTH{13, BUS_EXT_WIDTH_START, BUS_EXT_WIDTH_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> THERM_SENSOR{14, THERM_SENSOR_START, THERM_SENSOR_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> EXTENDED_MODULE_TYPE{15, EXT_MOD_TYPE_START, EXT_MOD_TYPE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> FINE_TIMEBASE{17, FINE_TIMEBASE_START, FINE_TIMEBASE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MEDIUM_TIMEBASE{17, MED_TIMEBASE_START, MED_TIMEBASE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TCK_MIN{18, TCK_MIN_START, TCK_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TCK_MAX{19, TCK_MAX_START, TCK_MAX_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CL_FIRST_BYTE{20, CAS_BYTE_1_START, CAS_BYTE_1_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CL_SECOND_BYTE{21, CAS_BYTE_2_START, CAS_BYTE_2_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CL_THIRD_BYTE{22, CAS_BYTE_3_START, CAS_BYTE_3_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CL_FOURTH_BYTE{23, CAS_BYTE_4_START, CAS_BYTE_4_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TAA_MIN{24, TAA_MIN_START, TAA_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRCD_MIN{25, TRCD_MIN_START, TRCD_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRP_MIN{26, TRP_MIN_START, TRP_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRASMIN_MSN{27, TRASMIN_MSN_START, TRASMIN_MSN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRASMIN_LSB{28, TRASMIN_LSB_START, TRASMIN_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRCMIN_MSN{27, TRCMIN_MSN_START, TRCMIN_MSN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRCMIN_LSB{29, TRCMIN_LSB_START, TRCMIN_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRFC1MIN_LSB{30, TRFC1MIN_LSB_START, TRFC1MIN_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRFC1MIN_MSB{31, TRFC1MIN_MSB_START, TRFC1MIN_MSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRFC2MIN_LSB{32, TRFC2MIN_LSB_START, TRFC2MIN_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRFC2MIN_MSB{33, TRFC2MIN_MSB_START, TRFC2MIN_MSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRFC4MIN_LSB{34, TRFC4MIN_LSB_START, TRFC4MIN_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRFC4MIN_MSB{35, TRFC4MIN_MSB_START, TRFC4MIN_MSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TFAWMIN_MSN{36, TFAWMIN_MSN_START, TFAWMIN_MSN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TFAWMIN_LSB{37, TFAWMIN_LSB_START, TFAWMIN_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRRD_S_MIN{38, TRRD_S_MIN_START, TRRD_S_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TRRD_L_MIN{39, TRRD_L_MIN_START, TRRD_L_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TCCD_L_MIN{39, TCCD_L_MIN_START, TCCD_L_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TWRMIN_MSN{41, TWRMIN_MSN_START, TWRMIN_MSN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TWRMIN_LSB{42, TWRMIN_LSB_START, TWRMIN_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TWTRMIN_S_MSN{43, TWTRMIN_S_MSN_START, TWTRMIN_S_MSN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TWTRMIN_S_LSB{44, TWTRMIN_S_LSB_START, TWTRMIN_S_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TWTRMIN_L_MSN{43, TWTRMIN_L_MSN_START, TWTRMIN_L_MSN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> TWTRMIN_L_LSB{45, TWTRMIN_L_LSB_START, TWTRMIN_L_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OFFSET_TCCD_L_MIN{117, OFFSET_TCCD_L_MIN_START, OFFSET_TCCD_L_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OFFSET_TRRD_L_MIN{118, OFFSET_TRRD_L_MIN_START, OFFSET_TRRD_L_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OFFSET_TRRD_S_MIN{119, OFFSET_TRRD_S_MIN_START, OFFSET_TRRD_S_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OFFSET_TRC_MIN{120, OFFSET_TRC_MIN_START, OFFSET_TRC_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OFFSET_TRP_MIN{121, OFFSET_TRP_MIN_START, OFFSET_TRP_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OFFSET_TRCD_MIN{122, OFFSET_TRCD_MIN_START, OFFSET_TRCD_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OFFSET_TAA_MIN{123, OFFSET_TAA_MIN_START, OFFSET_TAA_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OFFSET_TCK_MAX{124, OFFSET_TCK_MAX_START, OFFSET_TCK_MAX_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> OFFSET_TCK_MIN{125, OFFSET_TCK_MIN_START, OFFSET_TCK_MIN_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CRC_LSB{126, CRC_LSB_START, CRC_LSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CRC_MSB{127, CRC_MSB_START, CRC_MSB_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CONTINUATION_CODES{320, CONTINUATION_CODES_START, CONTINUATION_CODES_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> LAST_NON_ZERO_BYTE{321, LAST_NON_ZERO_BYTE_START, LAST_NON_ZERO_BYTE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_MFG_LOCATION{322, MODULE_MFG_LOC_START, MODULE_MFG_LOC_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_MFG_DATE_LSB{323, MODULE_MFG_DATE_START, MODULE_MFG_DATE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_MFG_DATE_MSB{324, MODULE_MFG_DATE_START, MODULE_MFG_DATE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_SERIAL_NUM_BYTE1{325, MODULE_SERIAL_NUM_START, MODULE_SERIAL_NUM_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_SERIAL_NUM_BYTE2{326, MODULE_SERIAL_NUM_START, MODULE_SERIAL_NUM_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_SERIAL_NUM_BYTE3{327, MODULE_SERIAL_NUM_START, MODULE_SERIAL_NUM_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_SERIAL_NUM_BYTE4{328, MODULE_SERIAL_NUM_START, MODULE_SERIAL_NUM_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_REV_CODE{349, MODULE_REV_CODE_START, MODULE_REV_CODE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_MFR_ID_CODE_LSB{350, DRAM_MFR_ID_CODE_START, DRAM_MFR_ID_CODE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_MFR_ID_CODE_MSB{351, DRAM_MFR_ID_CODE_START, DRAM_MFR_ID_CODE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_STEPPING{352, DRAM_STEPPING_START, DRAM_STEPPING_LEN};
};
///
@@ -480,9 +482,11 @@ class fields<DDR4, BASE_CNFG>
/// @brief DDR4 RDIMM module SPD parameters
/// @note DDR4, RDIMM_MODULE specialization
///
-template<>
+template <>
class fields<DDR4, RDIMM_MODULE>
{
+ private:
+
enum
{
// Byte 128
@@ -553,26 +557,26 @@ class fields<DDR4, RDIMM_MODULE>
// First field - SPD byte
// Second field - start bit
// Third field - bit length
- static constexpr mss::field_t MODULE_NOMINAL_HEIGHT{128, MODULE_NOM_HEIGHT_START, MODULE_NOM_HEIGHT_LEN};
- static constexpr mss::field_t RAW_CARD_EXTENSION{128, RAW_CARD_EXT_START, RAW_CARD_EXT_LEN};
- static constexpr mss::field_t FRONT_MODULE_THICKNESS{129, FRONT_MODULE_THICKNESS_START, FRONT_MODULE_THICKNESS_LEN};
- static constexpr mss::field_t BACK_MODULE_THICKNESS{129, BACK_MODULE_THICKNESS_START, BACK_MODULE_THICKNESS_LEN};
- static constexpr mss::field_t REF_RAW_CARD{130, REF_RAW_CARD_START, REF_RAW_CARD_LEN};
- static constexpr mss::field_t NUM_REGS_USED{131, REGS_USED_START, REGS_USED_LEN};
- static constexpr mss::field_t ROWS_OF_DRAMS{131, ROWS_OF_DRAMS_START, ROWS_OF_DRAMS_LEN};
- static constexpr mss::field_t REGISTER_TYPE{131, REGISTER_TYPE_START, REGISTER_TYPE_LEN};
- static constexpr mss::field_t HEAT_SPREADER_CHAR{132, HEAT_SPREADER_CHAR_START, HEAT_SPREADER_CHAR_LEN};
- static constexpr mss::field_t HEAT_SPREADER_SOL{132, HEAT_SPREADER_SOL_START, HEAT_SPREADER_SOL_LEN};
- static constexpr mss::field_t CONTINUATION_CODES{133, CONTINUATION_CODES_START, CONTINUATION_CODES_LEN};
- static constexpr mss::field_t LAST_NON_ZERO_BYTE{134, LAST_NON_ZERO_BYTE_START, LAST_NON_ZERO_BYTE_LEN};
- static constexpr mss::field_t REGISTER_REV{135, REGISTER_REV_START, REGISTER_REV_LEN};
- static constexpr mss::field_t ADDR_MAP_REG_TO_DRAM{136, ADDR_MAPPING_START, ADDR_MAPPING_LEN};
- static constexpr mss::field_t CKE_DRIVER{137, CKE_DRIVER_START, CKE_DRIVER_LEN};
- static constexpr mss::field_t ODT_DRIVER{137, ODT_DRIVER_START, ODT_DRIVER_LEN};
- static constexpr mss::field_t CA_DRIVER{137, CA_DRIVER_START, CA_DRIVER_LEN};
- static constexpr mss::field_t CS_DRIVER{137, CS_DRIVER_START, CS_DRIVER_LEN};
- static constexpr mss::field_t YO_Y2_DRIVER{138, YO_Y2_DRIVER_START, YO_Y2_DRIVER_LEN};
- static constexpr mss::field_t Y1_Y3_DRIVER{138, Y1_Y3_DRIVER_START, Y1_Y3_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_NOMINAL_HEIGHT{128, MODULE_NOM_HEIGHT_START, MODULE_NOM_HEIGHT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> RAW_CARD_EXTENSION{128, RAW_CARD_EXT_START, RAW_CARD_EXT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> FRONT_MODULE_THICKNESS{129, FRONT_MODULE_THICKNESS_START, FRONT_MODULE_THICKNESS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BACK_MODULE_THICKNESS{129, BACK_MODULE_THICKNESS_START, BACK_MODULE_THICKNESS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> REF_RAW_CARD{130, REF_RAW_CARD_START, REF_RAW_CARD_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> NUM_REGS_USED{131, REGS_USED_START, REGS_USED_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> ROWS_OF_DRAMS{131, ROWS_OF_DRAMS_START, ROWS_OF_DRAMS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> REGISTER_TYPE{131, REGISTER_TYPE_START, REGISTER_TYPE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> HEAT_SPREADER_CHAR{132, HEAT_SPREADER_CHAR_START, HEAT_SPREADER_CHAR_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> HEAT_SPREADER_SOL{132, HEAT_SPREADER_SOL_START, HEAT_SPREADER_SOL_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CONTINUATION_CODES{133, CONTINUATION_CODES_START, CONTINUATION_CODES_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> LAST_NON_ZERO_BYTE{134, LAST_NON_ZERO_BYTE_START, LAST_NON_ZERO_BYTE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> REGISTER_REV{135, REGISTER_REV_START, REGISTER_REV_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> ADDR_MAP_REG_TO_DRAM{136, ADDR_MAPPING_START, ADDR_MAPPING_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CKE_DRIVER{137, CKE_DRIVER_START, CKE_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> ODT_DRIVER{137, ODT_DRIVER_START, ODT_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CA_DRIVER{137, CA_DRIVER_START, CA_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CS_DRIVER{137, CS_DRIVER_START, CS_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> YO_Y2_DRIVER{138, YO_Y2_DRIVER_START, YO_Y2_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> Y1_Y3_DRIVER{138, Y1_Y3_DRIVER_START, Y1_Y3_DRIVER_LEN};
};
///
@@ -580,9 +584,11 @@ class fields<DDR4, RDIMM_MODULE>
/// @brief DDR4 LRDIMM module SPD parameters
/// @note DDR4, LRDIMM_MODULE specialization
///
-template<>
+template <>
class fields<DDR4, LRDIMM_MODULE>
{
+ private:
+
enum
{
// Byte 128
@@ -720,60 +726,60 @@ class fields<DDR4, LRDIMM_MODULE>
// First field - SPD byte
// Second field - start bit
// Third field - bit length
- static constexpr mss::field_t MODULE_NOMINAL_HEIGHT{128, MODULE_NOM_HEIGHT_START, MODULE_NOM_HEIGHT_LEN};
- static constexpr mss::field_t RAW_CARD_EXT{128, RAW_CARD_EXT_START, RAW_CARD_EXT_LEN};
- static constexpr mss::field_t FRONT_MODULE_THICKNESS{129, FRONT_MODULE_THICKNESS_START, FRONT_MODULE_THICKNESS_LEN};
- static constexpr mss::field_t BACK_MODULE_THICKNESS{129, BACK_MODULE_THICKNESS_START, BACK_MODULE_THICKNESS_LEN};
- static constexpr mss::field_t REF_RAW_CARD{130, REF_RAW_CARD_START, REF_RAW_CARD_LEN};
- static constexpr mss::field_t NUM_REGS_USED{131, REGS_USED_START, REGS_USED_LEN};
- static constexpr mss::field_t ROWS_OF_DRAMS{131, ROWS_OF_DRAMS_START, ROWS_OF_DRAMS_LEN};
- static constexpr mss::field_t REGISTER_TYPE{131, REGISTER_TYPE_START, REGISTER_TYPE_LEN};
- static constexpr mss::field_t HEAT_SPREADER_CHAR{132, HEAT_SPREADER_CHAR_START, HEAT_SPREADER_CHAR_LEN};
- static constexpr mss::field_t HEAT_SPREADER_SOL{132, HEAT_SPREADER_SOL_START, HEAT_SPREADER_SOL_LEN};
- static constexpr mss::field_t CONTINUATION_CODES{133, CONTINUATION_CODES_START, CONTINUATION_CODES_LEN};
- static constexpr mss::field_t LAST_NON_ZERO_BYTE{134, LAST_NON_ZERO_BYTE_START, LAST_NON_ZERO_BYTE_LEN};
- static constexpr mss::field_t REGISTER_REV{135, REGISTER_REV_START, REGISTER_REV_LEN};
- static constexpr mss::field_t ADDR_MAP_REG_TO_DRAM{136, ADDR_MAPPING_START, ADDR_MAPPING_LEN};
- static constexpr mss::field_t CKE_DRIVER{137, CKE_DRIVER_START, CKE_DRIVER_LEN};
- static constexpr mss::field_t ODT_DRIVER{137, ODT_DRIVER_START, ODT_DRIVER_LEN};
- static constexpr mss::field_t CA_DRIVER{137, CA_DRIVER_START, CA_DRIVER_LEN};
- static constexpr mss::field_t CS_DRIVER{137, CS_DRIVER_START, CS_DRIVER_LEN};
- static constexpr mss::field_t YO_Y2_DRIVER{138, YO_Y2_DRIVER_START, YO_Y2_DRIVER_LEN};
- static constexpr mss::field_t Y1_Y3_DRIVER{138, Y1_Y3_DRIVER_START, Y1_Y3_DRIVER_LEN};
- static constexpr mss::field_t DATA_BUFFER_REV{139, DB_REV_START, DB_REV_LEN};
- static constexpr mss::field_t BCOM_BODT_BCKE_DRIVER{138, BCOM_BODT_BCKE_DRIVER_START, BCOM_BODT_BCKE_DRIVER_LEN};
- static constexpr mss::field_t BCK_DRIVER{138, BCK_DRIVER_START, BCK_DRIVER_LEN};
- static constexpr mss::field_t RCD_SLEW_CNTRL{138, RCD_SLEW_CNTRL_START, RCD_SLEW_CNTRL_LEN };
- static constexpr mss::field_t VREF_DQ_RANK0{140, VREF_DQ_RANK0_START, VREF_DQ_RANK0_LEN};
- static constexpr mss::field_t VREF_DQ_RANK1{141, VREF_DQ_RANK1_START, VREF_DQ_RANK1_LEN};
- static constexpr mss::field_t VREF_DQ_RANK2{142, VREF_DQ_RANK2_START, VREF_DQ_RANK2_LEN};
- static constexpr mss::field_t VREF_DQ_RANK3{143, VREF_DQ_RANK3_START, VREF_DQ_RANK3_LEN};
- static constexpr mss::field_t DATA_BUFFER_VREF_DQ{144, DB_VREF_DQ_START, DB_VREF_DQ_LEN};
- static constexpr mss::field_t DB_MDQ_LTE_1866{145, DB_MDQ_START, DB_MDQ_LEN};
- static constexpr mss::field_t DB_MDQ_LTE_2400{146, DB_MDQ_START, DB_MDQ_LEN};
- static constexpr mss::field_t DB_MDQ_LTE_3200{147, DB_MDQ_START, DB_MDQ_LEN};
- static constexpr mss::field_t DB_MDQ_RTT_LTE_1866{145, DB_MDQ_RTT_START, DB_MDQ_RTT_LEN};
- static constexpr mss::field_t DB_MDQ_RTT_LTE_2400{146, DB_MDQ_RTT_START, DB_MDQ_RTT_LEN};
- static constexpr mss::field_t DB_MDQ_RTT_LTE_3200{147, DB_MDQ_RTT_START, DB_MDQ_RTT_LEN};
- static constexpr mss::field_t DRAM_DRIVE_STRENGTH_LTE_1866{148, DRAM_DRIVE_1866_START, DRAM_DRIVE_LEN};
- static constexpr mss::field_t DRAM_DRIVE_STRENGTH_LTE_2400{148, DRAM_DRIVE_2400_START, DRAM_DRIVE_LEN};
- static constexpr mss::field_t DRAM_DRIVE_STRENGTH_LTE_3200{148, DRAM_DRIVE_3200_START, DRAM_DRIVE_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_NOM_LTE_1866{149, DRAM_ODT_RTT_NOM_START, DRAM_ODT_RTT_NOM_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_WR_LTE_1866{149, DRAM_ODT_RTT_WR_START, DRAM_ODT_RTT_WR_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_NOM_LTE_2400{150, DRAM_ODT_RTT_NOM_START, DRAM_ODT_RTT_NOM_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_WR_LTE_2400{150, DRAM_ODT_RTT_WR_START, DRAM_ODT_RTT_WR_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_NOM_LTE_3200{151, DRAM_ODT_RTT_NOM_START, DRAM_ODT_RTT_NOM_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_WR_LTE_3200{151, DRAM_ODT_RTT_WR_START, DRAM_ODT_RTT_WR_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_PARK_R01_LTE_1866{152, DRAM_ODT_RTT_PARK_R01_START, DRAM_ODT_RTT_PARK_R01_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_PARK_R23_LTE_1866{152, DRAM_ODT_RTT_PARK_R23_START, DRAM_ODT_RTT_PARK_R23_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_PARK_R01_LTE_2400{153, DRAM_ODT_RTT_PARK_R01_START, DRAM_ODT_RTT_PARK_R01_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_PARK_R23_LTE_2400{153, DRAM_ODT_RTT_PARK_R23_START, DRAM_ODT_RTT_PARK_R23_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_PARK_R01_LTE_3200{154, DRAM_ODT_RTT_PARK_R01_START, DRAM_ODT_RTT_PARK_R01_LEN};
- static constexpr mss::field_t DRAM_ODT_RTT_PARK_R23_LTE_3200{154, DRAM_ODT_RTT_PARK_R23_START, DRAM_ODT_RTT_PARK_R23_LEN};
- static constexpr mss::field_t DRAM_VREF_DQ_RANGE{155, DRAM_VREF_DQ_RANGE_START, DRAM_VREF_DQ_RANGE_LEN};
- static constexpr mss::field_t DATA_BUFFER_VREF_DQ_RANGE{155, DB_VREF_DQ_RANGE_START, DB_VREF_DQ_RANGE_LEN};
- static constexpr mss::field_t DATA_BUFFER_GAIN_ADJUST{156, DB_GAIN_ADJUST_START, DB_GAIN_ADJUST_LEN};
- static constexpr mss::field_t DATA_BUFFER_DFE{156, DB_DFE_START, DB_DFE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> MODULE_NOMINAL_HEIGHT{128, MODULE_NOM_HEIGHT_START, MODULE_NOM_HEIGHT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> RAW_CARD_EXT{128, RAW_CARD_EXT_START, RAW_CARD_EXT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> FRONT_MODULE_THICKNESS{129, FRONT_MODULE_THICKNESS_START, FRONT_MODULE_THICKNESS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BACK_MODULE_THICKNESS{129, BACK_MODULE_THICKNESS_START, BACK_MODULE_THICKNESS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> REF_RAW_CARD{130, REF_RAW_CARD_START, REF_RAW_CARD_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> NUM_REGS_USED{131, REGS_USED_START, REGS_USED_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> ROWS_OF_DRAMS{131, ROWS_OF_DRAMS_START, ROWS_OF_DRAMS_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> REGISTER_TYPE{131, REGISTER_TYPE_START, REGISTER_TYPE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> HEAT_SPREADER_CHAR{132, HEAT_SPREADER_CHAR_START, HEAT_SPREADER_CHAR_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> HEAT_SPREADER_SOL{132, HEAT_SPREADER_SOL_START, HEAT_SPREADER_SOL_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CONTINUATION_CODES{133, CONTINUATION_CODES_START, CONTINUATION_CODES_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> LAST_NON_ZERO_BYTE{134, LAST_NON_ZERO_BYTE_START, LAST_NON_ZERO_BYTE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> REGISTER_REV{135, REGISTER_REV_START, REGISTER_REV_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> ADDR_MAP_REG_TO_DRAM{136, ADDR_MAPPING_START, ADDR_MAPPING_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CKE_DRIVER{137, CKE_DRIVER_START, CKE_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> ODT_DRIVER{137, ODT_DRIVER_START, ODT_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CA_DRIVER{137, CA_DRIVER_START, CA_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> CS_DRIVER{137, CS_DRIVER_START, CS_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> YO_Y2_DRIVER{138, YO_Y2_DRIVER_START, YO_Y2_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> Y1_Y3_DRIVER{138, Y1_Y3_DRIVER_START, Y1_Y3_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DATA_BUFFER_REV{139, DB_REV_START, DB_REV_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BCOM_BODT_BCKE_DRIVER{138, BCOM_BODT_BCKE_DRIVER_START, BCOM_BODT_BCKE_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> BCK_DRIVER{138, BCK_DRIVER_START, BCK_DRIVER_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> RCD_SLEW_CNTRL{138, RCD_SLEW_CNTRL_START, RCD_SLEW_CNTRL_LEN };
+ static constexpr mss::field_t<mss::endian::LITTLE> VREF_DQ_RANK0{140, VREF_DQ_RANK0_START, VREF_DQ_RANK0_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> VREF_DQ_RANK1{141, VREF_DQ_RANK1_START, VREF_DQ_RANK1_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> VREF_DQ_RANK2{142, VREF_DQ_RANK2_START, VREF_DQ_RANK2_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> VREF_DQ_RANK3{143, VREF_DQ_RANK3_START, VREF_DQ_RANK3_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DATA_BUFFER_VREF_DQ{144, DB_VREF_DQ_START, DB_VREF_DQ_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DB_MDQ_LTE_1866{145, DB_MDQ_START, DB_MDQ_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DB_MDQ_LTE_2400{146, DB_MDQ_START, DB_MDQ_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DB_MDQ_LTE_3200{147, DB_MDQ_START, DB_MDQ_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DB_MDQ_RTT_LTE_1866{145, DB_MDQ_RTT_START, DB_MDQ_RTT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DB_MDQ_RTT_LTE_2400{146, DB_MDQ_RTT_START, DB_MDQ_RTT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DB_MDQ_RTT_LTE_3200{147, DB_MDQ_RTT_START, DB_MDQ_RTT_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_DRIVE_STRENGTH_LTE_1866{148, DRAM_DRIVE_1866_START, DRAM_DRIVE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_DRIVE_STRENGTH_LTE_2400{148, DRAM_DRIVE_2400_START, DRAM_DRIVE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_DRIVE_STRENGTH_LTE_3200{148, DRAM_DRIVE_3200_START, DRAM_DRIVE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_NOM_LTE_1866{149, DRAM_ODT_RTT_NOM_START, DRAM_ODT_RTT_NOM_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_WR_LTE_1866{149, DRAM_ODT_RTT_WR_START, DRAM_ODT_RTT_WR_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_NOM_LTE_2400{150, DRAM_ODT_RTT_NOM_START, DRAM_ODT_RTT_NOM_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_WR_LTE_2400{150, DRAM_ODT_RTT_WR_START, DRAM_ODT_RTT_WR_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_NOM_LTE_3200{151, DRAM_ODT_RTT_NOM_START, DRAM_ODT_RTT_NOM_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_WR_LTE_3200{151, DRAM_ODT_RTT_WR_START, DRAM_ODT_RTT_WR_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_PARK_R01_LTE_1866{152, DRAM_ODT_RTT_PARK_R01_START, DRAM_ODT_RTT_PARK_R01_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_PARK_R23_LTE_1866{152, DRAM_ODT_RTT_PARK_R23_START, DRAM_ODT_RTT_PARK_R23_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_PARK_R01_LTE_2400{153, DRAM_ODT_RTT_PARK_R01_START, DRAM_ODT_RTT_PARK_R01_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_PARK_R23_LTE_2400{153, DRAM_ODT_RTT_PARK_R23_START, DRAM_ODT_RTT_PARK_R23_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_PARK_R01_LTE_3200{154, DRAM_ODT_RTT_PARK_R01_START, DRAM_ODT_RTT_PARK_R01_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_ODT_RTT_PARK_R23_LTE_3200{154, DRAM_ODT_RTT_PARK_R23_START, DRAM_ODT_RTT_PARK_R23_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DRAM_VREF_DQ_RANGE{155, DRAM_VREF_DQ_RANGE_START, DRAM_VREF_DQ_RANGE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DATA_BUFFER_VREF_DQ_RANGE{155, DB_VREF_DQ_RANGE_START, DB_VREF_DQ_RANGE_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DATA_BUFFER_GAIN_ADJUST{156, DB_GAIN_ADJUST_START, DB_GAIN_ADJUST_LEN};
+ static constexpr mss::field_t<mss::endian::LITTLE> DATA_BUFFER_DFE{156, DB_DFE_START, DB_DFE_LEN};
};
}// spd
diff --git a/src/import/generic/memory/lib/spd/spd_reader.H b/src/import/generic/memory/lib/spd/spd_reader.H
index 049d4171a..3e1300c1c 100644
--- a/src/import/generic/memory/lib/spd/spd_reader.H
+++ b/src/import/generic/memory/lib/spd/spd_reader.H
@@ -60,17 +60,17 @@ namespace spd
/// @param[out] o_value raw value for this SPD field
/// @return FAPI2_RC_SUCCESS iff okay
///
-template< const field_t& F,
+template< const field_t<endian::LITTLE>& F,
rev R,
typename IT,
typename OT,
typename TT = readerTraits<F, R> >
-fapi2::ReturnCode reader( const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
- const std::vector<IT>& i_spd_data,
- OT& o_value)
+inline fapi2::ReturnCode reader( const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
+ const std::vector<IT>& i_spd_data,
+ OT& o_value)
{
- FAPI_TRY( (mss::get_field<F, TT>(i_target, i_spd_data, mss::READ_SPD_FIELD, o_value)),
+ FAPI_TRY( (mss::get_field<endian::LITTLE, F, TT>(i_target, i_spd_data, mss::READ_SPD_FIELD, o_value)),
"Failed read_field() for %s", spd::c_str(i_target) );
fapi_try_exit:
diff --git a/src/import/generic/memory/lib/spd/spd_traits.H b/src/import/generic/memory/lib/spd/spd_traits.H
index fe3f91440..c824c5c69 100644
--- a/src/import/generic/memory/lib/spd/spd_traits.H
+++ b/src/import/generic/memory/lib/spd/spd_traits.H
@@ -51,7 +51,7 @@ namespace spd
/// @tparam F holds SPD field info
/// @tparam R the revision of the SPD field
///
-template< const field_t& F, rev R >
+template< const field_t<endian::LITTLE>& F, rev R >
class readerTraits;
///
diff --git a/src/import/generic/memory/lib/spd/spd_traits_ddr4.H b/src/import/generic/memory/lib/spd/spd_traits_ddr4.H
index e9bda39ea..3670a8f89 100644
--- a/src/import/generic/memory/lib/spd/spd_traits_ddr4.H
+++ b/src/import/generic/memory/lib/spd/spd_traits_ddr4.H
@@ -54,7 +54,7 @@ namespace spd
/// @note valid for all revisions
///
template<rev R>
-class readerTraits < fields<DDR4, BASE_CNFG>::BYTES_USED, R>
+class readerTraits < fields<DDR4, BASE_CNFG>::BYTES_USED, R >
{
public:
OpenPOWER on IntegriCloud