summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJacob Harvey <jlharvey@us.ibm.com>2017-06-19 18:40:43 -0500
committerDean Sanner <dsanner@us.ibm.com>2017-07-11 06:29:39 -0400
commitf353e9afcfff4de5bec4b646bc435cee252458aa (patch)
tree3ebe335125796535019c24406ff07450fe139300 /src
parentad62efb318aebf528b12a2ec934b9f86c33e1572 (diff)
downloadtalos-hostboot-f353e9afcfff4de5bec4b646bc435cee252458aa.tar.gz
talos-hostboot-f353e9afcfff4de5bec4b646bc435cee252458aa.zip
Add in RCD attributes for DD2 debug
Change-Id: Ibd8e3bf3d75982fd14584fbd47b74979d515ea39 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42090 Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Reviewed-by: Louis Stermole <stermole@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: Brent Wieman <bwieman@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42133 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Dean Sanner <dsanner@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C109
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.H19
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H252
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/p9_mss_eff_config.C6
-rwxr-xr-xsrc/import/chips/p9/procedures/xml/attribute_info/memory_spd_attributes.xml50
-rw-r--r--src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H23
-rw-r--r--src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4_v1_0.C63
-rw-r--r--src/import/generic/memory/lib/spd/common/spd_decoder_base.H22
-rw-r--r--src/import/hwpf/fapi2/xml/attribute_info/hb_temp_defaults.xml15
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types.xml61
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/target_types.xml7
11 files changed, 618 insertions, 9 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
index f3d7e761f..76e167e35 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
@@ -368,10 +368,93 @@ fapi_try_exit:
return fapi2::current_err;
}
+///
+/// @brief Determines & sets effective config for eff_rcd_mfg_id from SPD
+/// @return fapi2::FAPI2_RC_SUCCESS if okay
+///
+fapi2::ReturnCode eff_dimm::rcd_mfg_id()
+{
+ uint16_t l_decoder_val = 0;
+ uint16_t l_mcs_attrs[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {};
-/////////////////////////
-// Member Method implementation
-/////////////////////////
+ // Get & update MCS attribute
+ FAPI_TRY( eff_rcd_mfg_id(iv_mcs, &l_mcs_attrs[0][0]), "Failed accessing ATTR_MSS_EFF_RCD_MFG_ID" );
+ FAPI_TRY( iv_pDecoder->reg_manufacturer_id_code(l_decoder_val), "Failed getting rcd id code from SPD %s",
+ mss::c_str(iv_dimm) );
+
+ switch (l_decoder_val)
+ {
+ case fapi2::ENUM_ATTR_EFF_RCD_MFG_ID_IDT:
+ FAPI_INF("%s Register Manufacturer is %s", mss::c_str(iv_dimm), "IDT");
+ break;
+
+ case fapi2::ENUM_ATTR_EFF_RCD_MFG_ID_INPHI:
+ FAPI_INF("%s Register Manufacturer is %s", mss::c_str(iv_dimm), "INPHI");
+ break;
+
+ case fapi2::ENUM_ATTR_EFF_RCD_MFG_ID_MONTAGE:
+ FAPI_INF("%s Register Manufacturer is %s", mss::c_str(iv_dimm), "MONTAGE");
+ break;
+
+ default:
+ FAPI_INF("%s Register Manufacturer is 0x%04x", mss::c_str(iv_dimm), l_decoder_val);
+ break;
+ }
+
+ l_mcs_attrs[iv_port_index][iv_dimm_index] = l_decoder_val;
+ FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_RCD_MFG_ID, iv_mcs, l_mcs_attrs), "Failed to set ATTR_EFF_RCD_MFG_ID" );
+
+fapi_try_exit:
+ return fapi2::current_err;
+
+}
+
+///
+/// @brief Determines & sets effective config for eff_register_type from SPD
+/// @return fapi2::FAPI2_RC_SUCCESS if okay
+///
+fapi2::ReturnCode eff_dimm::register_type()
+{
+ uint8_t l_decoder_val = 0;
+ uint8_t l_mcs_attrs[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {};
+
+ // Get & update MCS attribute
+ FAPI_TRY( eff_register_type(iv_mcs, &l_mcs_attrs[0][0]), "Failed accessing ATTR_MSS_REGISTER_TYPE" );
+ FAPI_TRY( iv_pDecoder->iv_module_decoder->register_and_buffer_type(l_decoder_val),
+ "Failed getting register_type code from SPD %s",
+ mss::c_str(iv_dimm) );
+
+ FAPI_INF("%s Register type is %s", mss::c_str(iv_dimm), l_decoder_val ? "RCD01" : "RCD02");
+
+ l_mcs_attrs[iv_port_index][iv_dimm_index] = l_decoder_val;
+ FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_REGISTER_TYPE, iv_mcs, l_mcs_attrs), "Failed to set ATTR_EFF_REGISTER_TYPE" );
+
+fapi_try_exit:
+ return fapi2::current_err;
+}
+
+///
+/// @brief Determines & sets effective config for eff_register_rev type from SPD
+/// @return fapi2::FAPI2_RC_SUCCESS if okay
+///
+fapi2::ReturnCode eff_dimm::register_rev()
+{
+ uint8_t l_decoder_val = 0;
+ uint8_t l_mcs_attrs[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {};
+
+ // Get & update MCS attribute
+ FAPI_TRY( eff_register_rev(iv_mcs, &l_mcs_attrs[0][0]), "Failed accessing ATTR_MSS_REGISTER_REV" );
+ FAPI_TRY( iv_pDecoder->register_rev_num(l_decoder_val), "Failed getting register_rev code from SPD %s",
+ mss::c_str(iv_dimm) );
+
+ FAPI_INF("%s Register rev is 0x%02x", mss::c_str(iv_dimm), l_decoder_val);
+ l_mcs_attrs[iv_port_index][iv_dimm_index] = l_decoder_val;
+ FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_REGISTER_REV, iv_mcs, l_mcs_attrs), "Failed to set ATTR_EFF_REGISTER_REV" );
+
+fapi_try_exit:
+ return fapi2::current_err;
+
+}
///
/// @brief Determines & sets effective config for eff_dram_mfg_id type from SPD
@@ -387,6 +470,25 @@ fapi2::ReturnCode eff_dimm::dram_mfg_id()
FAPI_TRY( iv_pDecoder->dram_manufacturer_id_code(l_decoder_val), "Failed getting dram id code from SPD %s",
mss::c_str(iv_dimm) );
+ switch (l_decoder_val)
+ {
+ case fapi2::ENUM_ATTR_EFF_DRAM_MFG_ID_MICRON:
+ FAPI_INF("%s Dram Manufacturer is %s", mss::c_str(iv_dimm), "MICRON");
+ break;
+
+ case fapi2::ENUM_ATTR_EFF_DRAM_MFG_ID_HYNIX:
+ FAPI_INF("%s Dram Manufacturer is %s", mss::c_str(iv_dimm), "HYNIX");
+ break;
+
+ case fapi2::ENUM_ATTR_EFF_DRAM_MFG_ID_SAMSUNG:
+ FAPI_INF("%s Dram Manufacturer is %s", mss::c_str(iv_dimm), "SAMSUNG");
+ break;
+
+ default:
+ FAPI_INF("%s Dram Manufacturer is 0x%04x", mss::c_str(iv_dimm), l_decoder_val);
+ break;
+ }
+
l_mcs_attrs[iv_port_index][iv_dimm_index] = l_decoder_val;
FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DRAM_MFG_ID, iv_mcs, l_mcs_attrs), "Failed to set ATTR_EFF_DRAM_MFG_ID" );
@@ -423,7 +525,6 @@ fapi2::ReturnCode eff_dimm::dram_width()
fapi_try_exit:
return fapi2::current_err;
-
}
///
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.H b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.H
index 4e047e540..7daa12437 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.H
@@ -154,6 +154,24 @@ class eff_dimm
fapi2::ReturnCode dram_mfg_id();
///
+ /// @brief Determines & sets effective config for eff_rcd_mfg_id type from SPD
+ /// @return fapi2::FAPI2_RC_SUCCESS if okay
+ ///
+ fapi2::ReturnCode rcd_mfg_id();
+
+ ///
+ /// @brief Determines & sets effective config for eff_register_type from SPD
+ /// @return fapi2::FAPI2_RC_SUCCESS if okay
+ ///
+ fapi2::ReturnCode register_type();
+
+ ///
+ /// @brief Determines & sets effective config for eff_register_rev type from SPD
+ /// @return fapi2::FAPI2_RC_SUCCESS if okay
+ ///
+ fapi2::ReturnCode register_rev();
+
+ ///
/// @brief Determines & sets effective config for primary stack type
/// @return fapi2::FAPI2_RC_SUCCESS if okay
///
@@ -190,7 +208,6 @@ class eff_dimm
fapi2::ReturnCode dram_density();
///
-
/// @brief Determines & sets effective config for dram width
/// @return fapi2::FAPI2_RC_SUCCESS if okay
///
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H b/src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H
index 2378ccbd7..cfda1ab5f 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H
@@ -19714,6 +19714,90 @@ fapi_try_exit:
}
///
+/// @brief ATTR_EFF_REGISTER_TYPE getter
+/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_DIMM>
+/// @param[out] ref to the value uint8_t
+/// @note Generated by gen_accessors.pl generateParameters (F)
+/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
+/// @note Register Type Decodes SPD Byte 131 creator: mss_eff_cnfg consumer:
+/// eff_dimm
+///
+inline fapi2::ReturnCode eff_register_type(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target, uint8_t& o_value)
+{
+ uint8_t l_value[2][2];
+ auto l_mca = i_target.getParent<fapi2::TARGET_TYPE_MCA>();
+ auto l_mcs = l_mca.getParent<fapi2::TARGET_TYPE_MCS>();
+
+ FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_EFF_REGISTER_TYPE, l_mcs, l_value) );
+ o_value = l_value[mss::index(l_mca)][mss::index(i_target)];
+ return fapi2::current_err;
+
+fapi_try_exit:
+ FAPI_ERR("failed accessing ATTR_EFF_REGISTER_TYPE: 0x%lx (target: %s)",
+ uint64_t(fapi2::current_err), mss::c_str(i_target));
+ return fapi2::current_err;
+}
+
+///
+/// @brief ATTR_EFF_REGISTER_TYPE getter
+/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_MCA>
+/// @param[out] uint8_t* memory to store the value
+/// @note Generated by gen_accessors.pl generateParameters (G)
+/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
+/// @note Register Type Decodes SPD Byte 131 creator: mss_eff_cnfg consumer:
+/// eff_dimm
+///
+inline fapi2::ReturnCode eff_register_type(const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target, uint8_t* o_array)
+{
+ if (o_array == nullptr)
+ {
+ FAPI_ERR("nullptr passed to attribute accessor %s", __func__);
+ return fapi2::FAPI2_RC_INVALID_PARAMETER;
+ }
+
+ uint8_t l_value[2][2];
+ auto l_mcs = i_target.getParent<fapi2::TARGET_TYPE_MCS>();
+
+ FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_EFF_REGISTER_TYPE, l_mcs, l_value) );
+ memcpy(o_array, &(l_value[mss::index(i_target)][0]), 2);
+ return fapi2::current_err;
+
+fapi_try_exit:
+ FAPI_ERR("failed accessing ATTR_EFF_REGISTER_TYPE: 0x%lx (target: %s)",
+ uint64_t(fapi2::current_err), mss::c_str(i_target));
+ return fapi2::current_err;
+}
+
+///
+/// @brief ATTR_EFF_REGISTER_TYPE getter
+/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_MCS>
+/// @param[out] uint8_t* memory to store the value
+/// @note Generated by gen_accessors.pl generateParameters (H)
+/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
+/// @note Register Type Decodes SPD Byte 131 creator: mss_eff_cnfg consumer:
+/// eff_dimm
+///
+inline fapi2::ReturnCode eff_register_type(const fapi2::Target<fapi2::TARGET_TYPE_MCS>& i_target, uint8_t* o_array)
+{
+ if (o_array == nullptr)
+ {
+ FAPI_ERR("nullptr passed to attribute accessor %s", __func__);
+ return fapi2::FAPI2_RC_INVALID_PARAMETER;
+ }
+
+ uint8_t l_value[2][2];
+
+ FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_EFF_REGISTER_TYPE, i_target, l_value) );
+ memcpy(o_array, &l_value, 4);
+ return fapi2::current_err;
+
+fapi_try_exit:
+ FAPI_ERR("failed accessing ATTR_EFF_REGISTER_TYPE: 0x%lx (target: %s)",
+ uint64_t(fapi2::current_err), mss::c_str(i_target));
+ return fapi2::current_err;
+}
+
+///
/// @brief ATTR_EFF_DRAM_MFG_ID getter
/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_DIMM>
/// @param[out] ref to the value uint16_t
@@ -19800,6 +19884,174 @@ fapi_try_exit:
return fapi2::current_err;
}
+///
+/// @brief ATTR_EFF_RCD_MFG_ID getter
+/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_DIMM>
+/// @param[out] ref to the value uint16_t
+/// @note Generated by gen_accessors.pl generateParameters (F)
+/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
+/// @note Register Manufacturer ID Code Decodes SPD Byte 133 and 134 creator:
+/// mss_eff_cnfg
+///
+inline fapi2::ReturnCode eff_rcd_mfg_id(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target, uint16_t& o_value)
+{
+ uint16_t l_value[2][2];
+ auto l_mca = i_target.getParent<fapi2::TARGET_TYPE_MCA>();
+ auto l_mcs = l_mca.getParent<fapi2::TARGET_TYPE_MCS>();
+
+ FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_EFF_RCD_MFG_ID, l_mcs, l_value) );
+ o_value = l_value[mss::index(l_mca)][mss::index(i_target)];
+ return fapi2::current_err;
+
+fapi_try_exit:
+ FAPI_ERR("failed accessing ATTR_EFF_RCD_MFG_ID: 0x%lx (target: %s)",
+ uint64_t(fapi2::current_err), mss::c_str(i_target));
+ return fapi2::current_err;
+}
+
+///
+/// @brief ATTR_EFF_RCD_MFG_ID getter
+/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_MCA>
+/// @param[out] uint16_t* memory to store the value
+/// @note Generated by gen_accessors.pl generateParameters (G)
+/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
+/// @note Register Manufacturer ID Code Decodes SPD Byte 133 and 134 creator:
+/// mss_eff_cnfg
+///
+inline fapi2::ReturnCode eff_rcd_mfg_id(const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target, uint16_t* o_array)
+{
+ if (o_array == nullptr)
+ {
+ FAPI_ERR("nullptr passed to attribute accessor %s", __func__);
+ return fapi2::FAPI2_RC_INVALID_PARAMETER;
+ }
+
+ uint16_t l_value[2][2];
+ auto l_mcs = i_target.getParent<fapi2::TARGET_TYPE_MCS>();
+
+ FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_EFF_RCD_MFG_ID, l_mcs, l_value) );
+ memcpy(o_array, &(l_value[mss::index(i_target)][0]), 4);
+ return fapi2::current_err;
+
+fapi_try_exit:
+ FAPI_ERR("failed accessing ATTR_EFF_RCD_MFG_ID: 0x%lx (target: %s)",
+ uint64_t(fapi2::current_err), mss::c_str(i_target));
+ return fapi2::current_err;
+}
+
+///
+/// @brief ATTR_EFF_RCD_MFG_ID getter
+/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_MCS>
+/// @param[out] uint16_t* memory to store the value
+/// @note Generated by gen_accessors.pl generateParameters (H)
+/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
+/// @note Register Manufacturer ID Code Decodes SPD Byte 133 and 134 creator:
+/// mss_eff_cnfg
+///
+inline fapi2::ReturnCode eff_rcd_mfg_id(const fapi2::Target<fapi2::TARGET_TYPE_MCS>& i_target, uint16_t* o_array)
+{
+ if (o_array == nullptr)
+ {
+ FAPI_ERR("nullptr passed to attribute accessor %s", __func__);
+ return fapi2::FAPI2_RC_INVALID_PARAMETER;
+ }
+
+ uint16_t l_value[2][2];
+
+ FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_EFF_RCD_MFG_ID, i_target, l_value) );
+ memcpy(o_array, &l_value, 8);
+ return fapi2::current_err;
+
+fapi_try_exit:
+ FAPI_ERR("failed accessing ATTR_EFF_RCD_MFG_ID: 0x%lx (target: %s)",
+ uint64_t(fapi2::current_err), mss::c_str(i_target));
+ return fapi2::current_err;
+}
+
+///
+/// @brief ATTR_EFF_REGISTER_REV getter
+/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_DIMM>
+/// @param[out] ref to the value uint8_t
+/// @note Generated by gen_accessors.pl generateParameters (F)
+/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
+/// @note Register Revision Number Decodes SPD Byte 135 creator:
+/// mss_eff_cnfg
+///
+inline fapi2::ReturnCode eff_register_rev(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target, uint8_t& o_value)
+{
+ uint8_t l_value[2][2];
+ auto l_mca = i_target.getParent<fapi2::TARGET_TYPE_MCA>();
+ auto l_mcs = l_mca.getParent<fapi2::TARGET_TYPE_MCS>();
+
+ FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_EFF_REGISTER_REV, l_mcs, l_value) );
+ o_value = l_value[mss::index(l_mca)][mss::index(i_target)];
+ return fapi2::current_err;
+
+fapi_try_exit:
+ FAPI_ERR("failed accessing ATTR_EFF_REGISTER_REV: 0x%lx (target: %s)",
+ uint64_t(fapi2::current_err), mss::c_str(i_target));
+ return fapi2::current_err;
+}
+
+///
+/// @brief ATTR_EFF_REGISTER_REV getter
+/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_MCA>
+/// @param[out] uint8_t* memory to store the value
+/// @note Generated by gen_accessors.pl generateParameters (G)
+/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
+/// @note Register Revision Number Decodes SPD Byte 135 creator:
+/// mss_eff_cnfg
+///
+inline fapi2::ReturnCode eff_register_rev(const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target, uint8_t* o_array)
+{
+ if (o_array == nullptr)
+ {
+ FAPI_ERR("nullptr passed to attribute accessor %s", __func__);
+ return fapi2::FAPI2_RC_INVALID_PARAMETER;
+ }
+
+ uint8_t l_value[2][2];
+ auto l_mcs = i_target.getParent<fapi2::TARGET_TYPE_MCS>();
+
+ FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_EFF_REGISTER_REV, l_mcs, l_value) );
+ memcpy(o_array, &(l_value[mss::index(i_target)][0]), 2);
+ return fapi2::current_err;
+
+fapi_try_exit:
+ FAPI_ERR("failed accessing ATTR_EFF_REGISTER_REV: 0x%lx (target: %s)",
+ uint64_t(fapi2::current_err), mss::c_str(i_target));
+ return fapi2::current_err;
+}
+
+///
+/// @brief ATTR_EFF_REGISTER_REV getter
+/// @param[in] const ref to the fapi2::Target<fapi2::TARGET_TYPE_MCS>
+/// @param[out] uint8_t* memory to store the value
+/// @note Generated by gen_accessors.pl generateParameters (H)
+/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
+/// @note Register Revision Number Decodes SPD Byte 135 creator:
+/// mss_eff_cnfg
+///
+inline fapi2::ReturnCode eff_register_rev(const fapi2::Target<fapi2::TARGET_TYPE_MCS>& i_target, uint8_t* o_array)
+{
+ if (o_array == nullptr)
+ {
+ FAPI_ERR("nullptr passed to attribute accessor %s", __func__);
+ return fapi2::FAPI2_RC_INVALID_PARAMETER;
+ }
+
+ uint8_t l_value[2][2];
+
+ FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_EFF_REGISTER_REV, i_target, l_value) );
+ memcpy(o_array, &l_value, 4);
+ return fapi2::current_err;
+
+fapi_try_exit:
+ FAPI_ERR("failed accessing ATTR_EFF_REGISTER_REV: 0x%lx (target: %s)",
+ uint64_t(fapi2::current_err), mss::c_str(i_target));
+ return fapi2::current_err;
+}
+
///
/// @brief ATTR_MSS_MRW_SAFEMODE_MEM_THROTTLED_N_COMMANDS_PER_PORT getter
diff --git a/src/import/chips/p9/procedures/hwp/memory/p9_mss_eff_config.C b/src/import/chips/p9/procedures/hwp/memory/p9_mss_eff_config.C
index 725844974..40ccd52b0 100644
--- a/src/import/chips/p9/procedures/hwp/memory/p9_mss_eff_config.C
+++ b/src/import/chips/p9/procedures/hwp/memory/p9_mss_eff_config.C
@@ -84,10 +84,16 @@ fapi2::ReturnCode p9_mss_eff_config( const fapi2::Target<fapi2::TARGET_TYPE_MCS>
for( const auto& l_cache : l_factory_caches )
{
+
+
std::shared_ptr<mss::eff_dimm> l_eff_dimm;
FAPI_TRY( mss::eff_dimm::eff_dimm_factory( l_cache, l_eff_dimm));
+ FAPI_INF("%s Running eff_config", mss::c_str(l_cache->iv_target) );
+ FAPI_TRY( l_eff_dimm->rcd_mfg_id() );
+ FAPI_TRY( l_eff_dimm->register_type() );
+ FAPI_TRY( l_eff_dimm->register_rev() );
FAPI_TRY( l_eff_dimm->dram_mfg_id() );
FAPI_TRY( l_eff_dimm->dram_width() );
FAPI_TRY( l_eff_dimm->dram_density() );
diff --git a/src/import/chips/p9/procedures/xml/attribute_info/memory_spd_attributes.xml b/src/import/chips/p9/procedures/xml/attribute_info/memory_spd_attributes.xml
index 03e92966a..c80160d5e 100755
--- a/src/import/chips/p9/procedures/xml/attribute_info/memory_spd_attributes.xml
+++ b/src/import/chips/p9/procedures/xml/attribute_info/memory_spd_attributes.xml
@@ -5,7 +5,7 @@
<!-- -->
<!-- OpenPOWER HostBoot Project -->
<!-- -->
-<!-- Contributors Listed Below - COPYRIGHT 2016 -->
+<!-- Contributors Listed Below - COPYRIGHT 2016,2017 -->
<!-- [+] International Business Machines Corp. -->
<!-- -->
<!-- -->
@@ -595,6 +595,23 @@
</attribute>
<attribute>
+ <id>ATTR_EFF_REGISTER_TYPE</id>
+ <targetType>TARGET_TYPE_MCS</targetType>
+ <description>
+ Register Type
+ Decodes SPD Byte 131
+ creator: mss_eff_cnfg
+ consumer: eff_dimm
+ </description>
+ <enum>RCD01 = 0x0, RCD02 = 0x1</enum>
+ <initToZero></initToZero>
+ <valueType>uint8</valueType>
+ <writeable/>
+ <array>2 2</array>
+ <mssAccessorName>eff_register_type</mssAccessorName>
+ </attribute>
+
+ <attribute>
<id>ATTR_EFF_DRAM_MFG_ID</id>
<targetType>TARGET_TYPE_MCS</targetType>
<description>
@@ -607,9 +624,38 @@
<initToZero></initToZero>
<valueType>uint16</valueType>
<writeable/>
- <array> 2 2</array>
+ <array>2 2</array>
<mssAccessorName>eff_dram_mfg_id</mssAccessorName>
</attribute>
+ <attribute>
+ <id>ATTR_EFF_RCD_MFG_ID</id>
+ <targetType>TARGET_TYPE_MCS</targetType>
+ <description>
+ Register Manufacturer ID Code
+ Decodes SPD Byte 133 and 134
+ creator: mss_eff_cnfg
+ </description>
+ <enum>INPHI = 0xB304, MONTAGE = 0x3286, IDT = 0xB380 </enum>
+ <initToZero></initToZero>
+ <valueType>uint16</valueType>
+ <writeable/>
+ <array>2 2</array>
+ <mssAccessorName>eff_rcd_mfg_id</mssAccessorName>
+ </attribute>
+ <attribute>
+ <id>ATTR_EFF_REGISTER_REV</id>
+ <targetType>TARGET_TYPE_MCS</targetType>
+ <description>
+ Register Revision Number
+ Decodes SPD Byte 135
+ creator: mss_eff_cnfg
+ </description>
+ <initToZero></initToZero>
+ <valueType>uint8</valueType>
+ <writeable/>
+ <array>2 2</array>
+ <mssAccessorName>eff_register_rev</mssAccessorName>
+ </attribute>
</attributes>
diff --git a/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H b/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H
index 63584075f..237e63378 100644
--- a/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H
+++ b/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H
@@ -1154,6 +1154,29 @@ class decoder_v1_0 : public decoder
/// @note Page 4.1.2.12 - 54
///
virtual fapi2::ReturnCode dram_manufacturer_id_code( uint16_t& o_output ) const override;
+
+ ///
+ /// @brief Decodes RCD Manufacturer ID code
+ /// @param[out] o_value rcd manufacturing id code
+ /// @return FAPI2_RC_SUCCESS if okay
+ /// @note SPD Byte 133 134
+ /// @note Item JEDEC Standard No. 21-C
+ /// @note DDR4 SPD Document Release 2
+ /// @note Page 4.1.2.12 - 54
+ ///
+ virtual fapi2::ReturnCode reg_manufacturer_id_code( uint16_t& o_value ) const override;
+
+ ///
+ /// @brief Decodes Register Revision Number
+ /// @param[out] o_value register revision number
+ /// @return FAPI2_RC_SUCCESS if okay
+ /// @note SPD Byte 135
+ /// @note Item JEDEC Standard No. 21-C
+ /// @note DDR4 SPD Document Release 2
+ /// @note Page 4.1.2.12 - 54
+ ///
+ virtual fapi2::ReturnCode register_rev_num( uint8_t& o_value ) const override;
+
///
/// @brief Decodes DRAM Stepping
/// @param[out] o_value uint8_t DRAM Stepping val
diff --git a/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4_v1_0.C b/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4_v1_0.C
index baca956f8..845648752 100644
--- a/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4_v1_0.C
+++ b/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4_v1_0.C
@@ -2866,6 +2866,69 @@ fapi2::ReturnCode decoder_v1_0::dram_manufacturer_id_code( uint16_t& o_value ) c
}
///
+/// @brief Decodes REGISTER Manufacturer ID code
+/// @param[out] o_value rcd manufacturing id code
+/// @return FAPI2_RC_SUCCESS if okay
+/// @note SPD Byte 133-134
+/// @note Item JEDEC Standard No. 21-C
+/// @note DDR4 SPD Document Release 2
+/// @note Page 4.1.2.12 - 54
+///
+fapi2::ReturnCode decoder_v1_0::reg_manufacturer_id_code( uint16_t& o_value ) const
+{
+ constexpr size_t BYTE_INDEX_LSB = 133;
+ uint8_t mfgid_LSB = iv_spd_data[BYTE_INDEX_LSB];
+
+ constexpr size_t BYTE_INDEX_MSB = 134;
+ uint8_t mfgid_MSB = iv_spd_data[BYTE_INDEX_MSB];
+
+ constexpr size_t MSB_START = 0;
+ constexpr size_t MSB_LEN = 8;
+ constexpr size_t LSB_START = 8;
+ constexpr size_t LSB_LEN = 8;
+
+ fapi2::buffer<uint16_t> l_buffer;
+ l_buffer.insertFromRight<MSB_START, MSB_LEN>( mfgid_MSB )
+ .insertFromRight<LSB_START, LSB_LEN>( mfgid_LSB );
+
+ o_value = l_buffer;
+
+ FAPI_INF("%s.RCD Manufacturer ID Code (rcd_mfg_id): %x",
+ mss::c_str(iv_target),
+ o_value);
+
+ return fapi2::FAPI2_RC_SUCCESS;
+}
+
+///
+/// @brief Decodes Register Revision Number
+/// @param[out] o_value register revision number
+/// @return FAPI2_RC_SUCCESS if okay
+/// @note SPD Byte 135
+/// @note Item JEDEC Standard No. 21-C
+/// @note DDR4 SPD Document Release 2
+/// @note Page 4.1.2.12 - 54
+///
+fapi2::ReturnCode decoder_v1_0::register_rev_num( uint8_t& o_value ) const
+{
+ // Trace in the front assists w/ debug
+ constexpr size_t BYTE_INDEX = 135;
+
+ FAPI_INF("%s SPD data at Byte %d: 0x%01X.",
+ mss::c_str(iv_target),
+ BYTE_INDEX,
+ iv_spd_data[BYTE_INDEX]);
+
+ o_value = iv_spd_data[BYTE_INDEX];
+
+ FAPI_INF("%s. Register Revision Number: %x",
+ mss::c_str(iv_target),
+ o_value);
+
+ return fapi2::FAPI2_RC_SUCCESS;
+}
+
+///
/// @brief Decodes DRAM Stepping
/// @param[out] o_value uint8_t DRAM Stepping val
/// @return FAPI2_RC_SUCCESS if okay
diff --git a/src/import/generic/memory/lib/spd/common/spd_decoder_base.H b/src/import/generic/memory/lib/spd/common/spd_decoder_base.H
index c61983436..76594ba66 100644
--- a/src/import/generic/memory/lib/spd/common/spd_decoder_base.H
+++ b/src/import/generic/memory/lib/spd/common/spd_decoder_base.H
@@ -871,6 +871,28 @@ class decoder
}
///
+ /// @brief Decodes RCD Manufacturer ID code
+ /// @param[out] o_value rcd manufacturing id code
+ /// @return FAPI2_RC_SUCCESS if okay
+ ///
+ virtual fapi2::ReturnCode reg_manufacturer_id_code( uint16_t& o_value ) const
+ {
+ o_value = 0;
+ return fapi2::FAPI2_RC_SUCCESS;
+ }
+
+ ///
+ /// @brief Decodes Register Revision Number
+ /// @param[out] o_value register revision number
+ /// @return FAPI2_RC_SUCCESS if okay
+ ///
+ virtual fapi2::ReturnCode register_rev_num( uint8_t& o_value ) const
+ {
+ o_value = 0;
+ return fapi2::FAPI2_RC_SUCCESS;
+ }
+
+ ///
/// @brief Decodes DRAM Stepping
/// @param[out] o_value uint8_t DRAM Stepping val
/// @return FAPI2_RC_SUCCESS if okay
diff --git a/src/import/hwpf/fapi2/xml/attribute_info/hb_temp_defaults.xml b/src/import/hwpf/fapi2/xml/attribute_info/hb_temp_defaults.xml
index b03bfc288..04a2a5907 100644
--- a/src/import/hwpf/fapi2/xml/attribute_info/hb_temp_defaults.xml
+++ b/src/import/hwpf/fapi2/xml/attribute_info/hb_temp_defaults.xml
@@ -264,6 +264,21 @@
</attribute>
<attribute>
+ <id>ATTR_EFF_REGISTER_TYPE</id>
+ <default>0x00</default>
+ </attribute>
+
+ <attribute>
+ <id>ATTR_EFF_RCD_MFG_ID</id>
+ <default>0x00</default>
+ </attribute>
+
+ <attribute>
+ <id>ATTR_EFF_REGISTER_REV</id>
+ <default>0x00</default>
+ </attribute>
+
+ <attribute>
<id>ATTR_SYSTEM_PSTATES_MODE</id>
<default>0x00</default>
</attribute>
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index da75d4697..682d49fbd 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -34840,4 +34840,65 @@ Measured in GB</description>
<readable/>
</attribute>
+<attribute>
+ <id>EFF_REGISTER_TYPE</id>
+ <description>
+ Register Type
+ Decodes SPD Byte 131
+ creator: mss_eff_cnfg
+ consumer: eff_dimm
+ </description>
+ <simpleType>
+ <uint8_t></uint8_t>
+ <array>2, 2</array>
+ </simpleType>
+ <persistency>volatile-zeroed</persistency>
+ <readable/>
+ <writeable/>
+ <hwpfToHbAttrMap>
+ <id>ATTR_EFF_REGISTER_TYPE</id>
+ <macro>DIRECT</macro>
+ </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+ <id>EFF_RCD_MFG_ID</id>
+ <description>
+ Register Manufacturer ID Code
+ Decodes SPD Byte 133 and 134
+ creator: mss_eff_cnfg
+ </description>
+ <simpleType>
+ <uint16_t></uint16_t>
+ <array>2, 2</array>
+ </simpleType>
+ <persistency>volatile-zeroed</persistency>
+ <readable/>
+ <writeable/>
+ <hwpfToHbAttrMap>
+ <id>ATTR_EFF_RCD_MFG_ID</id>
+ <macro>DIRECT</macro>
+ </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+ <id>EFF_REGISTER_REV</id>
+ <description>
+ Register Revision Number
+ Decodes SPD Byte 135
+ creator: mss_eff_cnfg
+ </description>
+ <simpleType>
+ <uint8_t></uint8_t>
+ <array>2, 2</array>
+ </simpleType>
+ <persistency>volatile-zeroed</persistency>
+ <readable/>
+ <writeable/>
+ <hwpfToHbAttrMap>
+ <id>ATTR_EFF_REGISTER_REV</id>
+ <macro>DIRECT</macro>
+ </hwpfToHbAttrMap>
+</attribute>
+
</attributes>
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index 1ebd91bfa..9b54a8951 100755
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -143,7 +143,7 @@
<attribute><id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
<default>0x00000001</default> <!-- GARD -->
</attribute>
-
+
<attribute><id>VPD_REC_NUM</id></attribute>
<!-- New attributes for mss/proc_setup_bars -->
<!-- proc_setup_bars_memory_attributes.xml -->
@@ -465,7 +465,7 @@
</attribute>
<attribute><id>CDM_DOMAIN</id><default>MEM</default></attribute>
<attribute><id>FRU_ID</id></attribute>
- <attribute><id>MSS_VREF_CAL_CNTL</id></attribute>
+ <attribute><id>MSS_VREF_CAL_CNTL</id></attribute>
</targetType>
<!--Dummy card to use as a DIMM for initial I2C/EEPROM testing -->
@@ -1918,6 +1918,9 @@
<attribute><id>MSS_VREF_DAC_NIBBLE</id></attribute>
<attribute><id>MSS_MVPD_FWMS</id></attribute>
<attribute><id>MSS_PHY_SEQ_REFRESH</id></attribute>
+ <attribute><id>EFF_REGISTER_TYPE</id></attribute>
+ <attribute><id>EFF_RCD_MFG_ID</id></attribute>
+ <attribute><id>EFF_REGISTER_REV</id></attribute>
</targetType>
<targetType>
OpenPOWER on IntegriCloud