summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C')
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C109
1 files changed, 105 insertions, 4 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;
-
}
///
OpenPOWER on IntegriCloud