diff options
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory/lib/eff_config/eff_config.C')
-rw-r--r-- | src/import/chips/p9/procedures/hwp/memory/lib/eff_config/eff_config.C | 500 |
1 files changed, 381 insertions, 119 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/eff_config.C b/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/eff_config.C index 80652de2e..7aa8c264b 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/eff_config.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/eff_config/eff_config.C @@ -42,6 +42,7 @@ #include <lib/mss_vpd_decoder.H> #include <lib/spd/spd_factory.H> #include <lib/spd/common/spd_decoder.H> +#include <lib/spd/rdimm/raw_cards.H> #include <lib/eff_config/timing.H> #include <lib/dimm/rank.H> #include <lib/utils/conversions.H> @@ -56,6 +57,29 @@ using fapi2::TARGET_TYPE_MCBIST; namespace mss { +enum rc10_encode : uint8_t +{ + DDR4_1866 = 0x01, + DDR4_2133 = 0x02, + DDR4_2400 = 0x03, + DDR4_2666 = 0x04, +}; + +enum rc13_encode : uint8_t +{ + DIRECT_CS_MODE = 0, + LRDIMM = 0, + RDIMM = 1, +}; + +enum rc3x_encode : uint8_t +{ + MT1860_TO_MT1880 = 0x1F, + MT2120_TO_MT2140 = 0x2C, + MT2380_TO_MT2400 = 0x39, + MT2660_TO_MT2680 = 0x47, +}; + ///////////////////////// // Non-member function implementations ///////////////////////// @@ -131,7 +155,6 @@ fapi_try_exit: }// dram_gen - /// /// @brief Determines & sets effective config for DIMM type from SPD /// @param[in] i_target FAPI2 target @@ -609,10 +632,11 @@ fapi2::ReturnCode eff_config::rcd_mirror_mode(const fapi2::Target<TARGET_TYPE_DI uint8_t l_attrs_mirror_mode[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_rcd_mirror_mode(l_mcs, &l_attrs_mirror_mode[0][0]) ); - FAPI_TRY( iv_pDecoder->iv_module_decoder->register_to_dram_addr_mapping(l_mirror_mode) ); // Update MCS attribute + FAPI_TRY( iv_pDecoder->iv_module_decoder->register_to_dram_addr_mapping(l_mirror_mode) ); l_attrs_mirror_mode[l_port_num][l_dimm_num] = l_mirror_mode; + FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_RCD_MIRROR_MODE, l_mcs, l_attrs_mirror_mode) ); fapi_try_exit: @@ -767,9 +791,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc00(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc00[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -778,8 +799,14 @@ fapi2::ReturnCode eff_config::dimm_rc00(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc00[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc00(l_mcs, &l_attrs_dimm_rc00[0][0]) ); - l_attrs_dimm_rc00[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc00[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc00; + + FAPI_INF("%s: RC00 settting: %d", c_str(i_target), l_attrs_dimm_rc00[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC00, l_mcs, l_attrs_dimm_rc00) ); fapi_try_exit: @@ -793,9 +820,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc01(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc01[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -804,9 +828,16 @@ fapi2::ReturnCode eff_config::dimm_rc01(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc01[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc01(l_mcs, &l_attrs_dimm_rc01[0][0]) ); - l_attrs_dimm_rc01[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc01[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc01; + + FAPI_INF("%s: RC01 settting: %d", c_str(i_target), l_attrs_dimm_rc01[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC01, l_mcs, l_attrs_dimm_rc01) ); + fapi_try_exit: return fapi2::current_err; } @@ -818,9 +849,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc02(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc02[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -829,9 +857,16 @@ fapi2::ReturnCode eff_config::dimm_rc02(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc02[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc02(l_mcs, &l_attrs_dimm_rc02[0][0]) ); - l_attrs_dimm_rc02[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc02[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc02; + + FAPI_INF("%s: RC02 settting: %d", c_str(i_target), l_attrs_dimm_rc02[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC02, l_mcs, l_attrs_dimm_rc02) ); + fapi_try_exit: return fapi2::current_err; } @@ -843,9 +878,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc03(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc03[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -854,14 +886,41 @@ fapi2::ReturnCode eff_config::dimm_rc03(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + fapi2::buffer<uint8_t> l_buffer; + + uint8_t l_attrs_dimm_rc03[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; + uint8_t l_cs_output_drive = 0; + uint8_t l_ca_output_drive = 0; + + FAPI_TRY( iv_pDecoder->iv_module_decoder->cs_signal_output_driver(l_cs_output_drive) ); + FAPI_TRY( iv_pDecoder->iv_module_decoder->ca_signal_output_driver(l_ca_output_drive) ); + + FAPI_INF( "%s: Retrieved register output drive, for CA: %d, CS: %d", + c_str(i_target), l_ca_output_drive, l_cs_output_drive ); + + // Lets construct encoding byte for RCD setting + { + // Buffer insert constants for CS and CA output drive + constexpr size_t CS_START = 4; + constexpr size_t CA_START = 6; + constexpr size_t LEN = 2; + + l_buffer.insertFromRight<CA_START, LEN>(l_ca_output_drive) + .insertFromRight<CS_START, LEN>(l_cs_output_drive); + } + // Retrieve MCS attribute data FAPI_TRY( eff_dimm_ddr4_rc03(l_mcs, &l_attrs_dimm_rc03[0][0]) ); - l_attrs_dimm_rc03[l_port_num][l_dimm_num] = 0x06; + + // Update MCS attribute + l_attrs_dimm_rc03[l_port_num][l_dimm_num] = l_buffer; + + FAPI_INF("%s: RC03 settting: %d", c_str(i_target), l_attrs_dimm_rc03[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC03, l_mcs, l_attrs_dimm_rc03) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC04 /// @param[in] i_target FAPI2 target @@ -869,9 +928,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc04(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc04[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -880,9 +936,38 @@ fapi2::ReturnCode eff_config::dimm_rc04(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + uint8_t l_attrs_dimm_rc04[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; + uint8_t l_odt_output_drive = 0; + uint8_t l_cke_output_drive = 0; + + fapi2::buffer<uint8_t> l_buffer; + + FAPI_TRY( iv_pDecoder->iv_module_decoder->odt_signal_output_driver(l_odt_output_drive) ); + FAPI_TRY( iv_pDecoder->iv_module_decoder->cke_signal_output_driver(l_cke_output_drive) ); + + FAPI_INF( "%s: Retrieved signal driver output, for CKE: %d, ODT: %d", + c_str(i_target), l_cke_output_drive, l_odt_output_drive ); + + // Lets construct encoding byte for RCD setting + { + // Buffer insert constants for ODT and CKE output drive + constexpr size_t CKE_START = 6; + constexpr size_t ODT_START = 4; + constexpr size_t LEN = 2; + + l_buffer.insertFromRight<CKE_START, LEN>(l_cke_output_drive) + .insertFromRight<ODT_START, LEN>(l_odt_output_drive); + } + + // Retrieve MCS attribute data FAPI_TRY( eff_dimm_ddr4_rc04(l_mcs, &l_attrs_dimm_rc04[0][0]) ); - l_attrs_dimm_rc04[l_port_num][l_dimm_num] = 0x05; + + // Update MCS attribute + l_attrs_dimm_rc04[l_port_num][l_dimm_num] = l_buffer; + + FAPI_INF("%s: RC04 setting: %d", c_str(i_target), l_attrs_dimm_rc04[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC04, l_mcs, l_attrs_dimm_rc04) ); + fapi_try_exit: return fapi2::current_err; } @@ -894,9 +979,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc05(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc05[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -905,9 +987,38 @@ fapi2::ReturnCode eff_config::dimm_rc05(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + uint8_t l_attrs_dimm_rc05[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; + uint8_t l_a_side_output_drive = 0; + uint8_t l_b_side_output_drive = 0; + + fapi2::buffer<uint8_t> l_buffer; + + FAPI_TRY( iv_pDecoder->iv_module_decoder->a_side_clk_output_driver(l_a_side_output_drive) ); + FAPI_TRY( iv_pDecoder->iv_module_decoder->b_side_clk_output_driver(l_b_side_output_drive) ); + + FAPI_INF( "%s: Retrieved register output drive for clock, b-side (Y0,Y2): %d, a-side (Y1,Y3): %d", + c_str(i_target), l_b_side_output_drive, l_a_side_output_drive ); + + { + // Buffer insert constants for ODT and CKE output drive + constexpr size_t B_START = 6; + constexpr size_t A_START = 4; + constexpr size_t LEN = 2; + + // Lets construct encoding byte for RCD setting + l_buffer.insertFromRight<B_START, LEN>(l_b_side_output_drive) + .insertFromRight<A_START, LEN>(l_a_side_output_drive); + } + + // Retrieve MCS attribute data FAPI_TRY( eff_dimm_ddr4_rc05(l_mcs, &l_attrs_dimm_rc05[0][0]) ); - l_attrs_dimm_rc05[l_port_num][l_dimm_num] = 0x05; + + // Update MCS attribute + l_attrs_dimm_rc05[l_port_num][l_dimm_num] = l_buffer; + + FAPI_INF( "%s: RC05 setting: %d", c_str(i_target), l_attrs_dimm_rc05[l_port_num][l_dimm_num] ) FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC05, l_mcs, l_attrs_dimm_rc05) ); + fapi_try_exit: return fapi2::current_err; } @@ -919,9 +1030,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc06_07(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc06_07[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -930,9 +1038,16 @@ fapi2::ReturnCode eff_config::dimm_rc06_07(const fapi2::Target<TARGET_TYPE_DIMM> const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc06_07[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc06_07(l_mcs, &l_attrs_dimm_rc06_07[0][0]) ); - l_attrs_dimm_rc06_07[l_port_num][l_dimm_num] = 0xf; + + // Update MCS attribute + l_attrs_dimm_rc06_07[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc06_07; + + FAPI_INF( "%s: RC06_07 setting: %d", c_str(i_target), l_attrs_dimm_rc06_07[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC06_07, l_mcs, l_attrs_dimm_rc06_07) ); + fapi_try_exit: return fapi2::current_err; } @@ -944,9 +1059,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc08(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc08[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -955,9 +1067,16 @@ fapi2::ReturnCode eff_config::dimm_rc08(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc08[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc08(l_mcs, &l_attrs_dimm_rc08[0][0]) ); - l_attrs_dimm_rc08[l_port_num][l_dimm_num] = 0x3; + + // Update MCS attribute + l_attrs_dimm_rc08[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc08; + + FAPI_INF( "%s: RC08 setting: %d", c_str(i_target), l_attrs_dimm_rc08[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC08, l_mcs, l_attrs_dimm_rc08) ); + fapi_try_exit: return fapi2::current_err; } @@ -969,9 +1088,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc09(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc09[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -980,9 +1096,18 @@ fapi2::ReturnCode eff_config::dimm_rc09(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // TODO - RTC 160118: Clean up eff_config boiler plate that can moved into helper functions + + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc09[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc09(l_mcs, &l_attrs_dimm_rc09[0][0]) ); - l_attrs_dimm_rc09[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc09[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc09; + + FAPI_INF( "%s: RC09 setting: %d", c_str(i_target), l_attrs_dimm_rc09[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC09, l_mcs, l_attrs_dimm_rc09) ); + fapi_try_exit: return fapi2::current_err; } @@ -994,9 +1119,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc10(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc10[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1005,14 +1127,46 @@ fapi2::ReturnCode eff_config::dimm_rc10(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + uint64_t l_freq = 0; + + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc10[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc10(l_mcs, &l_attrs_dimm_rc10[0][0]) ); - l_attrs_dimm_rc10[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + FAPI_TRY( mss::freq( mss::find_target<TARGET_TYPE_MCBIST>(i_target), l_freq ) ); + + switch(l_freq) + { + case fapi2::ENUM_ATTR_MSS_FREQ_MT1866: + l_attrs_dimm_rc10[l_port_num][l_dimm_num] = rc10_encode::DDR4_1866; + break; + + case fapi2::ENUM_ATTR_MSS_FREQ_MT2133: + l_attrs_dimm_rc10[l_port_num][l_dimm_num] = rc10_encode::DDR4_2133; + break; + + case fapi2::ENUM_ATTR_MSS_FREQ_MT2400: + l_attrs_dimm_rc10[l_port_num][l_dimm_num] = rc10_encode::DDR4_2400; + break; + + case fapi2::ENUM_ATTR_MSS_FREQ_MT2666: + l_attrs_dimm_rc10[l_port_num][l_dimm_num] = rc10_encode::DDR4_2666; + break; + + default: + FAPI_ERR("Invalid frequency for rc10 encoding received: %d", l_freq); + return fapi2::FAPI2_RC_FALSE; + break; + } + + FAPI_INF( "%s: RC10 setting: %d", c_str(i_target), l_attrs_dimm_rc10[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC10, l_mcs, l_attrs_dimm_rc10) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC11 /// @param[in] i_target FAPI2 target @@ -1020,9 +1174,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc11(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc11[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1031,9 +1182,16 @@ fapi2::ReturnCode eff_config::dimm_rc11(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc11[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc11(l_mcs, &l_attrs_dimm_rc11[0][0]) ); - l_attrs_dimm_rc11[l_port_num][l_dimm_num] = 0xe; + + // Update MCS attribute + l_attrs_dimm_rc11[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc0b; + + FAPI_INF( "%s: RC11 setting: %d", c_str(i_target), l_attrs_dimm_rc11[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC11, l_mcs, l_attrs_dimm_rc11) ); + fapi_try_exit: return fapi2::current_err; } @@ -1045,9 +1203,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc12(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc12[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1056,9 +1211,16 @@ fapi2::ReturnCode eff_config::dimm_rc12(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc12[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc12(l_mcs, &l_attrs_dimm_rc12[0][0]) ); - l_attrs_dimm_rc12[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc12[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc0c; + + FAPI_INF( "%s: R12 setting: %d", c_str(i_target), l_attrs_dimm_rc12[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC12, l_mcs, l_attrs_dimm_rc12) ); + fapi_try_exit: return fapi2::current_err; } @@ -1070,9 +1232,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc13(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc13[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1081,9 +1240,52 @@ fapi2::ReturnCode eff_config::dimm_rc13(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + uint8_t l_attrs_dimm_rc13[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; + fapi2::buffer<uint8_t> l_buffer; + + // TODO - RTC 160116: Fix RC0D chip select setting for LRDIMMs + constexpr uint8_t l_cs_mode = rc13_encode::DIRECT_CS_MODE; + uint8_t l_mirror_mode = 0; + uint8_t l_dimm_type = 0; + uint8_t l_module_type = 0; + + FAPI_TRY( spd::base_module_type(i_target, iv_pDecoder->iv_spd_data, l_module_type) ); + + l_dimm_type = (l_module_type == fapi2::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) ? + rc13_encode::RDIMM : + rc13_encode::LRDIMM; + + FAPI_TRY( iv_pDecoder->iv_module_decoder->register_to_dram_addr_mapping(l_mirror_mode) ); + + // Lets construct encoding byte for RCD setting + { + // CS + constexpr size_t CS_START = 6; + constexpr size_t CS_LEN = 2; + + // DIMM TYPE + constexpr size_t DIMM_TYPE_START = 5; + constexpr size_t DIMM_TYPE_LEN = 1; + + // MIRROR mode + constexpr size_t MIRROR_START = 4; + constexpr size_t MIRROR_LEN = 1; + + l_buffer.insertFromRight<CS_START, CS_LEN>(l_cs_mode) + .insertFromRight<DIMM_TYPE_START, DIMM_TYPE_LEN>(l_dimm_type) + .insertFromRight<MIRROR_START, MIRROR_LEN>(l_mirror_mode); + } + + // Retrieve MCS attribute data FAPI_TRY( eff_dimm_ddr4_rc13(l_mcs, &l_attrs_dimm_rc13[0][0]) ); - l_attrs_dimm_rc13[l_port_num][l_dimm_num] = 0xC; + + // Update MCS attribute + FAPI_TRY( spd::base_module_type(i_target, iv_pDecoder->iv_spd_data, l_dimm_type) ); + l_attrs_dimm_rc13[l_port_num][l_dimm_num] = l_buffer; + + FAPI_INF( "%s: RC13 setting: %d", c_str(i_target), l_attrs_dimm_rc13[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC13, l_mcs, l_attrs_dimm_rc13) ); + fapi_try_exit: return fapi2::current_err; } @@ -1095,9 +1297,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc14(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc14[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1106,9 +1305,16 @@ fapi2::ReturnCode eff_config::dimm_rc14(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc14[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc14(l_mcs, &l_attrs_dimm_rc14[0][0]) ); - l_attrs_dimm_rc14[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc14[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc0e; + + FAPI_INF( "%s: RC14 setting: %d", c_str(i_target), l_attrs_dimm_rc14[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC14, l_mcs, l_attrs_dimm_rc14) ); + fapi_try_exit: return fapi2::current_err; } @@ -1120,9 +1326,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc15(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc15[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1131,15 +1334,20 @@ fapi2::ReturnCode eff_config::dimm_rc15(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc15[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc15(l_mcs, &l_attrs_dimm_rc15[0][0]) ); - l_attrs_dimm_rc15[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc15[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc0f; + + FAPI_INF( "%s: RC15 setting: %d", c_str(i_target), l_attrs_dimm_rc15[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC15, l_mcs, l_attrs_dimm_rc15) ); fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_1x /// @param[in] i_target FAPI2 target @@ -1147,9 +1355,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc1x(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_1x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1158,15 +1363,20 @@ fapi2::ReturnCode eff_config::dimm_rc1x(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc_1x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc_1x(l_mcs, &l_attrs_dimm_rc_1x[0][0]) ); - l_attrs_dimm_rc_1x[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc_1x[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc1x; + + FAPI_INF( "%s: RC1X setting: %d", c_str(i_target), l_attrs_dimm_rc_1x[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_1x, l_mcs, l_attrs_dimm_rc_1x) ); fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_2x /// @param[in] i_target FAPI2 target @@ -1174,9 +1384,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc2x(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_2x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1185,14 +1392,20 @@ fapi2::ReturnCode eff_config::dimm_rc2x(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc_2x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc_2x(l_mcs, &l_attrs_dimm_rc_2x[0][0]) ); - l_attrs_dimm_rc_2x[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc_2x[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc2x; + + FAPI_INF( "%s: RC2X setting: %d", c_str(i_target), l_attrs_dimm_rc_2x[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_2x, l_mcs, l_attrs_dimm_rc_2x) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_3x /// @param[in] i_target FAPI2 target @@ -1200,9 +1413,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc3x(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_3x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1211,14 +1421,47 @@ fapi2::ReturnCode eff_config::dimm_rc3x(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + uint64_t l_freq = 0; + uint8_t l_attrs_dimm_rc_3x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; + + // Retrieve MCS attribute data FAPI_TRY( eff_dimm_ddr4_rc_3x(l_mcs, &l_attrs_dimm_rc_3x[0][0]) ); - l_attrs_dimm_rc_3x[l_port_num][l_dimm_num] = 0x39; + + // Update MCS attribute + FAPI_TRY( freq(find_target<TARGET_TYPE_MCBIST>(l_mcs), l_freq) ); + + switch(l_freq) + { + case fapi2::ENUM_ATTR_MSS_FREQ_MT1866: + l_attrs_dimm_rc_3x[l_port_num][l_dimm_num] = rc3x_encode::MT1860_TO_MT1880; + break; + + case fapi2::ENUM_ATTR_MSS_FREQ_MT2133: + l_attrs_dimm_rc_3x[l_port_num][l_dimm_num] = rc3x_encode::MT2120_TO_MT2140; + break; + + case fapi2::ENUM_ATTR_MSS_FREQ_MT2400: + l_attrs_dimm_rc_3x[l_port_num][l_dimm_num] = rc3x_encode::MT2380_TO_MT2400; + break; + + case fapi2::ENUM_ATTR_MSS_FREQ_MT2666: + l_attrs_dimm_rc_3x[l_port_num][l_dimm_num] = rc3x_encode::MT2660_TO_MT2680; + break; + + default: + FAPI_ERR("Invalid frequency for rc_3x encoding received: %d", l_freq); + return fapi2::FAPI2_RC_FALSE; + break; + } + + FAPI_INF( "%s: RC3X setting: %d", c_str(i_target), l_attrs_dimm_rc_3x[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_3x, l_mcs, l_attrs_dimm_rc_3x) ); + + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_4x /// @param[in] i_target FAPI2 target @@ -1226,9 +1469,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc4x(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_4x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1237,14 +1477,20 @@ fapi2::ReturnCode eff_config::dimm_rc4x(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc_4x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc_4x(l_mcs, &l_attrs_dimm_rc_4x[0][0]) ); - l_attrs_dimm_rc_4x[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc_4x[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc4x; + + FAPI_INF( "%s: RC4X setting: %d", c_str(i_target), l_attrs_dimm_rc_4x[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_4x, l_mcs, l_attrs_dimm_rc_4x) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_5x /// @param[in] i_target FAPI2 target @@ -1252,9 +1498,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc5x(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_5x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1263,14 +1506,20 @@ fapi2::ReturnCode eff_config::dimm_rc5x(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc_5x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc_5x(l_mcs, &l_attrs_dimm_rc_5x[0][0]) ); - l_attrs_dimm_rc_5x[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc_5x[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc5x; + + FAPI_INF( "%s: RC5X setting: %d", c_str(i_target), l_attrs_dimm_rc_5x[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_5x, l_mcs, l_attrs_dimm_rc_5x) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_6x /// @param[in] i_target FAPI2 target @@ -1278,9 +1527,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc6x(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_6x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1289,14 +1535,20 @@ fapi2::ReturnCode eff_config::dimm_rc6x(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc_6x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc_6x(l_mcs, &l_attrs_dimm_rc_6x[0][0]) ); - l_attrs_dimm_rc_6x[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc_6x[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc6x; + + FAPI_INF( "%s: RC6X setting: %d", c_str(i_target), l_attrs_dimm_rc_6x[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_6x, l_mcs, l_attrs_dimm_rc_6x) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_7x /// @param[in] i_target FAPI2 target @@ -1344,17 +1596,17 @@ fapi2::ReturnCode eff_config::dimm_rc7x(const fapi2::Target<TARGET_TYPE_DIMM>& i l_rcd7x.insertFromRight<CS_START, LEN>( ibt_helper(l_ibt_cs) ); l_rcd7x.insertFromRight<ODT_START, LEN>( ibt_helper(l_ibt_odt) ); - FAPI_INF("RCD7x for %s is 0x%x", mss::c_str(i_target), uint8_t(l_rcd7x)); - // Now write RCD7x out to the effective attribute FAPI_TRY( eff_dimm_ddr4_rc_7x(l_mcs, &l_attrs_dimm_rc_7x[0][0]) ); l_attrs_dimm_rc_7x[l_port_num][l_dimm_num] = l_rcd7x; + + FAPI_INF( "%s: RC7X setting is 0x%x", mss::c_str(i_target), l_attrs_dimm_rc_7x[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_7x, l_mcs, l_attrs_dimm_rc_7x) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_8x /// @param[in] i_target FAPI2 target @@ -1362,9 +1614,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc8x(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_8x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1373,14 +1622,20 @@ fapi2::ReturnCode eff_config::dimm_rc8x(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc_8x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc_8x(l_mcs, &l_attrs_dimm_rc_8x[0][0]) ); - l_attrs_dimm_rc_8x[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc_8x[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc8x; + + FAPI_INF( "%s: RC8X setting: %d", c_str(i_target), l_attrs_dimm_rc_8x[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_8x, l_mcs, l_attrs_dimm_rc_8x) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_9x /// @param[in] i_target FAPI2 target @@ -1388,9 +1643,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rc9x(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_9x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1399,14 +1651,20 @@ fapi2::ReturnCode eff_config::dimm_rc9x(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc_9x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc_9x(l_mcs, &l_attrs_dimm_rc_9x[0][0]) ); - l_attrs_dimm_rc_9x[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc_9x[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rc9x; + + FAPI_INF( "%s: RC9X setting: %d", c_str(i_target), l_attrs_dimm_rc_9x[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_9x, l_mcs, l_attrs_dimm_rc_9x) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_AX /// @param[in] i_target FAPI2 target @@ -1414,9 +1672,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rcax(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_ax[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1425,14 +1680,20 @@ fapi2::ReturnCode eff_config::dimm_rcax(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc_ax[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc_ax(l_mcs, &l_attrs_dimm_rc_ax[0][0]) ); - l_attrs_dimm_rc_ax[l_port_num][l_dimm_num] = 0x00; + + // Update MCS attribute + l_attrs_dimm_rc_ax[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rcax; + + FAPI_INF( "%s: RCAX setting: %d", c_str(i_target), l_attrs_dimm_rc_ax[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_Ax, l_mcs, l_attrs_dimm_rc_ax) ); + fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for DIMM RC_BX /// @param[in] i_target FAPI2 target @@ -1440,9 +1701,6 @@ fapi_try_exit: /// fapi2::ReturnCode eff_config::dimm_rcbx(const fapi2::Target<TARGET_TYPE_DIMM>& i_target) { - // TK - RIT skeleton. Need to finish - AAM - uint8_t l_attrs_dimm_rc_bx[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; - // Targets const auto l_mcs = find_target<TARGET_TYPE_MCS>(i_target); const auto l_mca = find_target<TARGET_TYPE_MCA>(i_target); @@ -1451,8 +1709,14 @@ fapi2::ReturnCode eff_config::dimm_rcbx(const fapi2::Target<TARGET_TYPE_DIMM>& i const auto l_port_num = index(l_mca); const auto l_dimm_num = index(i_target); + // Retrieve MCS attribute data + uint8_t l_attrs_dimm_rc_bx[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {}; FAPI_TRY( eff_dimm_ddr4_rc_bx(l_mcs, &l_attrs_dimm_rc_bx[0][0]) ); - l_attrs_dimm_rc_bx[l_port_num][l_dimm_num] = 0x07; + + // Update MCS attribute + l_attrs_dimm_rc_bx[l_port_num][l_dimm_num] = iv_pDecoder->iv_raw_card.iv_rcbx; + + FAPI_INF( "%s: RCBX setting: %d", c_str(i_target), l_attrs_dimm_rc_bx[l_port_num][l_dimm_num] ); FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_RC_Bx, l_mcs, l_attrs_dimm_rc_bx) ); fapi_try_exit: @@ -1568,7 +1832,6 @@ fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for cwl /// @param[in] i_target FAPI2 target @@ -1657,7 +1920,6 @@ fapi_try_exit: return fapi2::current_err; } - /// /// @brief Determines & sets effective config for lpasr /// @param[in] i_target FAPI2 target |