Skip to content

Commit dadbba5

Browse files
sglancy6crgeddes
authored andcommitted
Adds SI setting for 4R and dual-drop LRDIMM configs
Change-Id: I97facfad29978a6e09ccc75c615ae7b3dcea9010 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/69418 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Dev-Ready: STEPHEN GLANCY <sglancy@us.ibm.com> Reviewed-by: Louis Stermole <stermole@us.ibm.com> Reviewed-by: ANDRE A. MARIN <aamarin@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/69537 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: Christian R. Geddes <crgeddes@us.ibm.com>
1 parent 5bfda17 commit dadbba5

File tree

2 files changed

+152
-50
lines changed

2 files changed

+152
-50
lines changed

src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C

Lines changed: 108 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,7 @@ fapi2::ReturnCode eff_dimm::factory ( const spd::facade& i_spd_decoder,
638638
uint8_t l_buffer_type = 0;
639639
kind_t l_dimm_kind = DEFAULT_KIND;
640640
rcw_settings l_raw_card;
641+
uint8_t l_master_ranks = 0;
641642

642643
fapi2::ReturnCode l_rc;
643644
const auto l_dimm = i_spd_decoder.get_dimm_target();
@@ -646,6 +647,8 @@ fapi2::ReturnCode eff_dimm::factory ( const spd::facade& i_spd_decoder,
646647
// Dram_gen and dimm_type are set in mss_freq and we'll call the SPD decoder to get the reg and buff type
647648
FAPI_TRY( eff_dram_gen(l_dimm, l_gen), "Failed eff_dram_gen() accessor for %s", mss::c_str(l_dimm) );
648649
FAPI_TRY( eff_dimm_type(l_dimm, l_type), "Failed eff_dimm_type() accessor for %s", mss::c_str(l_dimm) );
650+
FAPI_TRY( eff_num_master_ranks_per_dimm(l_dimm, l_master_ranks), "Failed eff_dimm_type() accessor for %s",
651+
mss::c_str(l_dimm) );
649652

650653
FAPI_TRY( i_spd_decoder.register_and_buffer_type(l_buffer_type),
651654
"Failed decoding register and buffer type from SPD for %s", mss::c_str(l_dimm) );
@@ -660,7 +663,7 @@ fapi2::ReturnCode eff_dimm::factory ( const spd::facade& i_spd_decoder,
660663
switch (l_buffer_type)
661664
{
662665
case LRDIMM_DB01:
663-
o_fact_obj = std::make_shared<eff_lrdimm_db01>( i_spd_decoder, l_raw_card, l_rc );
666+
o_fact_obj = std::make_shared<eff_lrdimm_db01>( i_spd_decoder, l_raw_card, l_master_ranks, l_rc );
664667

665668
// Assert that l_rc is good and o_fact_object isn't null
666669
FAPI_ASSERT( ((l_rc == fapi2::FAPI2_RC_SUCCESS) && (o_fact_obj != nullptr)),
@@ -675,7 +678,7 @@ fapi2::ReturnCode eff_dimm::factory ( const spd::facade& i_spd_decoder,
675678
break;
676679

677680
case LRDIMM_DB02:
678-
o_fact_obj = std::make_shared<eff_lrdimm_db02>( i_spd_decoder, l_raw_card, l_rc );
681+
o_fact_obj = std::make_shared<eff_lrdimm_db02>( i_spd_decoder, l_raw_card, l_master_ranks, l_rc );
679682

680683
// Assert that l_rc is good and o_fact_object isn't null
681684
FAPI_ASSERT( ((l_rc == fapi2::FAPI2_RC_SUCCESS) && (o_fact_obj != nullptr)),
@@ -2900,12 +2903,26 @@ fapi_try_exit:
29002903
/// @brief Determines & sets effective config for Vref DQ Train Value and Range
29012904
/// @return fapi2::FAPI2_RC_SUCCESS if okay
29022905
///
2903-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
29042906
fapi2::ReturnCode eff_lrdimm::vref_dq_train_value_and_range()
29052907
{
2908+
constexpr uint8_t VREF_73PERCENT = 0x14;
2909+
constexpr uint8_t VREF_83PERCENT = 0x24;
2910+
constexpr uint8_t TRAIN_VALUE[NUM_VALID_RANKS_CONFIGS] =
2911+
{
2912+
VREF_73PERCENT, // 2 ranks per DIMM
2913+
VREF_83PERCENT, // 4 ranks per DIMM
2914+
};
2915+
// Yes, range1 has a value of 0 this is taken from the JEDEC spec
2916+
constexpr uint8_t RANGE1 = 0x00;
2917+
constexpr uint8_t TRAIN_RANGE[NUM_VALID_RANKS_CONFIGS] =
2918+
{
2919+
RANGE1,
2920+
RANGE1,
2921+
};
2922+
2923+
29062924
uint8_t l_vref_dq_train_value[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_RANK_PER_DIMM] = {};
29072925
uint8_t l_vref_dq_train_range[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_RANK_PER_DIMM] = {};
2908-
fapi2::buffer<uint8_t> l_vref_range;
29092926

29102927
// Gets the attributes
29112928
FAPI_TRY( eff_vref_dq_train_value(iv_mcs, &l_vref_dq_train_value[0][0][0]) );
@@ -2915,11 +2932,8 @@ fapi2::ReturnCode eff_lrdimm::vref_dq_train_value_and_range()
29152932
// It should be good enough to get us going
29162933
for(uint64_t l_rank = 0; l_rank < MAX_RANK_PER_DIMM; ++l_rank)
29172934
{
2918-
constexpr uint8_t VREF_79PERCENT = 0x1d;
2919-
// Yes, range1 has a value of 0 this is taken from the JEDEC spec
2920-
constexpr uint8_t RANGE1 = 0x00;
2921-
l_vref_dq_train_value[iv_port_index][iv_dimm_index][l_rank] = VREF_79PERCENT;
2922-
l_vref_dq_train_range[iv_port_index][iv_dimm_index][l_rank] = RANGE1;
2935+
l_vref_dq_train_value[iv_port_index][iv_dimm_index][mss::index(l_rank)] = TRAIN_VALUE[iv_master_ranks_index];
2936+
l_vref_dq_train_range[iv_port_index][iv_dimm_index][mss::index(l_rank)] = TRAIN_RANGE[iv_master_ranks_index];
29232937
}
29242938

29252939
FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_VREF_DQ_TRAIN_VALUE, iv_mcs, l_vref_dq_train_value),
@@ -4400,21 +4414,22 @@ fapi_try_exit:
44004414
/// @return fapi2::FAPI2_RC_SUCCESS if okay
44014415
/// @note used for MRS01
44024416
///
4403-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
44044417
fapi2::ReturnCode eff_lrdimm::dram_rtt_nom()
44054418
{
4419+
constexpr uint8_t DRAM_RTT_VALUES[NUM_VALID_RANKS_CONFIGS] =
4420+
{
4421+
0b111, // 2R - 34Ohm
4422+
0b111, // 4R - 34Ohm
4423+
};
4424+
44064425
uint8_t l_mcs_attrs[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_RANK_PER_DIMM] = {};
44074426
FAPI_TRY( eff_dram_rtt_nom(iv_mcs, &l_mcs_attrs[0][0][0]) );
44084427

4409-
// The host is in charge of ensuring good termination from the buffer to the DRAM
4410-
// That means that we need to know and set the settings
4411-
// Currently, our SI team thinks that the 2R single drop open power settings will work for BUP
4412-
// We're going to hard code in those settings the above story can be used as a catchall to improve settings if need be
4413-
// Loops through all ranks
44144428
for(uint64_t l_rank = 0; l_rank < MAX_RANK_PER_DIMM; ++l_rank)
44154429
{
4416-
// Taking the 34ohm value from up above
4417-
l_mcs_attrs[iv_port_index][iv_dimm_index][l_rank] = 0b111;
4430+
// Gets the ODT scheme for the DRAM for this DIMM - we only want to toggle ODT to the DIMM we are writing to
4431+
// We do a bitwise mask here to only get the ODT for the current DIMM
4432+
l_mcs_attrs[iv_port_index][iv_dimm_index][mss::index(l_rank)] = DRAM_RTT_VALUES[iv_master_ranks_index];
44184433
}
44194434

44204435
FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DRAM_RTT_NOM, iv_mcs, l_mcs_attrs) );
@@ -4481,9 +4496,14 @@ fapi_try_exit:
44814496
/// @return fapi2::FAPI2_RC_SUCCESS if okay
44824497
/// @note used for MRS02
44834498
///
4484-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
44854499
fapi2::ReturnCode eff_lrdimm::dram_rtt_wr()
44864500
{
4501+
constexpr uint8_t DRAM_RTT_VALUES[NUM_VALID_RANKS_CONFIGS] =
4502+
{
4503+
0b000, // 2R - disable
4504+
0b001, // 4R - 120Ohm
4505+
};
4506+
44874507
uint8_t l_mcs_attrs[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_RANK_PER_DIMM] = {};
44884508
FAPI_TRY( eff_dram_rtt_wr(iv_mcs, &l_mcs_attrs[0][0][0]) );
44894509

@@ -4494,8 +4514,9 @@ fapi2::ReturnCode eff_lrdimm::dram_rtt_wr()
44944514
// Loops through all ranks
44954515
for(uint64_t l_rank = 0; l_rank < MAX_RANK_PER_DIMM; ++l_rank)
44964516
{
4497-
// Taking the disable value from up above
4498-
l_mcs_attrs[iv_port_index][iv_dimm_index][l_rank] = 0b000;
4517+
// Gets the ODT scheme for the DRAM for this DIMM - we only want to toggle ODT to the DIMM we are writing to
4518+
// We do a bitwise mask here to only get the ODT for the current DIMM
4519+
l_mcs_attrs[iv_port_index][iv_dimm_index][l_rank] = DRAM_RTT_VALUES[iv_master_ranks_index];
44994520
}
45004521

45014522
// Set the attribute
@@ -4554,9 +4575,14 @@ fapi_try_exit:
45544575
/// @return fapi2::FAPI2_RC_SUCCESS if okay
45554576
/// @note used for MRS05
45564577
///
4557-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
45584578
fapi2::ReturnCode eff_lrdimm::dram_rtt_park()
45594579
{
4580+
constexpr uint8_t DRAM_RTT_VALUES[NUM_VALID_RANKS_CONFIGS] =
4581+
{
4582+
0b000, // 2R - disable
4583+
0b010, // 4R - 120Ohm
4584+
};
4585+
45604586
uint8_t l_mcs_attrs[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_RANK_PER_DIMM] = {};
45614587

45624588
FAPI_TRY( eff_dram_rtt_park(iv_mcs, &l_mcs_attrs[0][0][0]) );
@@ -4568,8 +4594,9 @@ fapi2::ReturnCode eff_lrdimm::dram_rtt_park()
45684594
// Loops through all ranks
45694595
for(uint64_t l_rank = 0; l_rank < MAX_RANK_PER_DIMM; ++l_rank)
45704596
{
4571-
// Taking the disable value from up above
4572-
l_mcs_attrs[iv_port_index][iv_dimm_index][l_rank] = 0b000;
4597+
// Gets the ODT scheme for the DRAM for this DIMM - we only want to toggle ODT to the DIMM we are writing to
4598+
// We do a bitwise mask here to only get the ODT for the current DIMM
4599+
l_mcs_attrs[iv_port_index][iv_dimm_index][mss::index(l_rank)] = DRAM_RTT_VALUES[iv_master_ranks_index];
45734600
}
45744601

45754602
FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DRAM_RTT_PARK, iv_mcs, l_mcs_attrs) );
@@ -4909,7 +4936,6 @@ fapi_try_exit:
49094936
/// DRAM Interface MDQ/MDQS ODT Strength for Data Buffer
49104937
/// Comes from SPD
49114938
///
4912-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
49134939
fapi2::ReturnCode eff_lrdimm::dimm_bc04()
49144940
{
49154941
// Retrieve MCS attribute data
@@ -4934,7 +4960,6 @@ fapi_try_exit:
49344960
/// Page 57 Table 28
49354961
/// @note DRAM Interface MDQ/MDQS Output Driver Impedance control
49364962
///
4937-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
49384963
fapi2::ReturnCode eff_lrdimm::dimm_bc05()
49394964
{
49404965
// Taken from the SI spreadsheet - we want 34 Ohms so 0x01
@@ -5469,17 +5494,22 @@ fapi_try_exit:
54695494
/// @brief Determines and sets DIMM F5BC6x
54705495
/// @return fapi2::FAPI2_RC_SUCCESS if okay
54715496
///
5472-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
54735497
fapi2::ReturnCode eff_lrdimm::dimm_f5bc6x()
54745498
{
54755499
constexpr uint8_t VREF_73PERCENT = 0x14;
5500+
constexpr uint8_t VREF_83PERCENT = 0x24;
5501+
constexpr uint8_t RD_VREF[NUM_VALID_RANKS_CONFIGS] =
5502+
{
5503+
VREF_73PERCENT, // 2 ranks per DIMM
5504+
VREF_83PERCENT, // 4 ranks per DIMM
5505+
};
54765506
uint8_t l_attrs_dimm_f5bc6x[PORTS_PER_MCS][MAX_DIMM_PER_PORT] = {};
54775507

54785508
// Retrieve MCS attribute data
54795509
FAPI_TRY( eff_dimm_ddr4_f5bc6x(iv_mcs, &l_attrs_dimm_f5bc6x[0][0]) );
54805510

54815511
// F5BC6x is just the VREF training range
5482-
l_attrs_dimm_f5bc6x[iv_port_index][iv_dimm_index] = VREF_73PERCENT;
5512+
l_attrs_dimm_f5bc6x[iv_port_index][iv_dimm_index] = RD_VREF[iv_master_ranks_index];
54835513

54845514
FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DIMM_DDR4_F5BC6x, iv_mcs, l_attrs_dimm_f5bc6x),
54855515
"Failed setting attribute for ATTR_EFF_DIMM_DDR4_F5BC6x");
@@ -5529,17 +5559,22 @@ fapi_try_exit:
55295559
/// @brief Determines & sets effective config for DRAM output driver impedance control
55305560
/// @return fapi2::FAPI2_RC_SUCCESS if okay
55315561
///
5532-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
55335562
fapi2::ReturnCode eff_lrdimm::dram_odic()
55345563
{
5564+
constexpr uint8_t DRAM_ODIC_VALUES[NUM_VALID_RANKS_CONFIGS] =
5565+
{
5566+
fapi2::ENUM_ATTR_MSS_VPD_MT_DRAM_DRV_IMP_DQ_DQS_OHM34, // 2 ranks per DIMM
5567+
fapi2::ENUM_ATTR_MSS_VPD_MT_DRAM_DRV_IMP_DQ_DQS_OHM34, // 4 ranks per DIMM
5568+
};
5569+
55355570
uint8_t l_dram_odic[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_RANK_PER_DIMM] = {};
55365571
FAPI_TRY( eff_dram_odic(iv_mcs, &l_dram_odic[0][0][0]));
55375572

55385573
// Updates DRAM ODIC with the VPD value
55395574
for(uint8_t l_rank = 0; l_rank < MAX_RANK_PER_DIMM; ++l_rank)
55405575
{
55415576
// JEDEC setting - taken from SI spreadsheet
5542-
l_dram_odic[iv_port_index][iv_dimm_index][l_rank] = fapi2::ENUM_ATTR_MSS_VPD_MT_DRAM_DRV_IMP_DQ_DQS_OHM34;
5577+
l_dram_odic[iv_port_index][iv_dimm_index][mss::index(l_rank)] = DRAM_ODIC_VALUES[iv_master_ranks_index];
55435578
}
55445579

55455580
FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_DRAM_ODIC, iv_mcs, l_dram_odic) );
@@ -5936,27 +5971,38 @@ fapi_try_exit:
59365971
///
59375972
fapi2::ReturnCode eff_lrdimm::odt_wr()
59385973
{
5939-
constexpr uint8_t ODT_2R_1DROP_VALUES[MAX_RANK_PER_DIMM] =
5974+
constexpr uint8_t DRAM_ODT_VALUES[NUM_VALID_RANKS_CONFIGS][MAX_RANK_PER_DIMM] =
59405975
{
5941-
0x40,
5942-
0x80,
5943-
0x00,
5944-
0x00,
5976+
{ 0x44, 0x88, 0x00, 0x00, }, // 2 ranks per DIMM
5977+
{ 0xcc, 0xcc, 0xcc, 0xcc, }, // 4 ranks per DIMM
59455978
};
59465979

5980+
// Masks on the ODT for a specific DIMM
5981+
constexpr uint8_t DIMM_ODT_MASK[MAX_DIMM_PER_PORT] = { 0xf0, 0x0f };
5982+
59475983
uint8_t l_mcs_attr[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_RANK_PER_DIMM] = {};
5984+
uint8_t l_vpd_odt[MAX_RANK_PER_DIMM] = {};
59485985

59495986
// Gets the VPD value
59505987
FAPI_TRY( eff_odt_wr( iv_mcs, &(l_mcs_attr[0][0][0])) );
5988+
FAPI_TRY( mss::vpd_mt_odt_wr(iv_dimm, &(l_vpd_odt[0])));
59515989

59525990
// Loops through and sets/updates all ranks
59535991
for(uint64_t l_rank = 0; l_rank < MAX_RANK_PER_DIMM; ++l_rank)
59545992
{
5955-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
5956-
// Currently, we're using a 2R single drop system
5957-
// To avoid terminating our 0th rank twice, we just want to pass in the termination directly
5958-
// This will be sorted out as part of the above RTC
5959-
l_mcs_attr[iv_port_index][iv_dimm_index][l_rank] = ODT_2R_1DROP_VALUES[l_rank];
5993+
// Gets the ODT scheme for the DRAM for this DIMM - we only want to toggle ODT to the DIMM we are writing to
5994+
// We do a bitwise mask here to only get the ODT for the current DIMM
5995+
const auto l_dram_odt = DRAM_ODT_VALUES[iv_master_ranks_index][l_rank] & DIMM_ODT_MASK[iv_dimm_index];
5996+
5997+
// For the host side ODT, we want to get the ODT from the VPD and do a bitwise or to only get the ODT for the opposite DIMM
5998+
// If we include the ODT for this DIMM, we could end up over terminating the DRAM side ODT
5999+
// The buffer's or the ODT together AND all of our LRDIMM values include ODT, so we will get the ODT we need for the host-> buffer interface
6000+
// We also use the 0th position for the host side ODT as we use the 1R termination settings for LRDIMM
6001+
const auto l_opposite_dimm_index = (iv_dimm_index + 1) % MAX_DIMM_PER_PORT;
6002+
const auto l_host_odt = l_vpd_odt[0] & DIMM_ODT_MASK[l_opposite_dimm_index];
6003+
6004+
// Do the final bitwise or
6005+
l_mcs_attr[iv_port_index][iv_dimm_index][l_rank] = l_dram_odt | l_host_odt;
59606006
}
59616007

59626008
FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_MSS_EFF_ODT_WR, iv_mcs, l_mcs_attr) );
@@ -6085,8 +6131,17 @@ fapi_try_exit:
60856131
///
60866132
fapi2::ReturnCode eff_lrdimm::odt_rd()
60876133
{
6134+
constexpr uint8_t DRAM_ODT_VALUES[NUM_VALID_RANKS_CONFIGS][MAX_RANK_PER_DIMM] =
6135+
{
6136+
{ 0x00, 0x00, 0x00, 0x00, }, // 2 ranks per DIMM
6137+
{ 0x44, 0x88, 0x44, 0x88, }, // 4 ranks per DIMM
6138+
};
6139+
6140+
// Masks on the ODT for a specific DIMM
6141+
constexpr uint8_t DIMM_ODT_MASK[MAX_DIMM_PER_PORT] = { 0xf0, 0x0f };
6142+
60886143
uint8_t l_mcs_attr[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_RANK_PER_DIMM] = {};
6089-
uint8_t l_vpd_odt[MAX_RANK_PER_DIMM];
6144+
uint8_t l_vpd_odt[MAX_RANK_PER_DIMM] = {};
60906145

60916146
// Gets the VPD value
60926147
FAPI_TRY( mss::vpd_mt_odt_rd(iv_dimm, &(l_vpd_odt[0])));
@@ -6095,12 +6150,19 @@ fapi2::ReturnCode eff_lrdimm::odt_rd()
60956150
// Loops through and sets/updates all ranks
60966151
for(uint64_t l_rank = 0; l_rank < MAX_RANK_PER_DIMM; ++l_rank)
60976152
{
6098-
// TODO:RTC200577 Update LRDIMM termination settings for dual drop and 4 rank DIMM's
6099-
// So, here we do a bitwise or of our LR settings and our VPD settings
6100-
// The VPD contains the host <-> buffer settings
6101-
// The constant contains the buffer <-> DRAM
6102-
// Due to how the ODT functions, we need to or them
6103-
l_mcs_attr[iv_port_index][iv_dimm_index][l_rank] = l_vpd_odt[l_rank] | 0x00;
6153+
// Gets the ODT scheme for the DRAM for this DIMM - we only want to toggle ODT to the DIMM we are writing to
6154+
// We do a bitwise mask here to only get the ODT for the current DIMM
6155+
const auto l_dram_odt = DRAM_ODT_VALUES[iv_master_ranks_index][l_rank] & DIMM_ODT_MASK[iv_dimm_index];
6156+
6157+
// For the host side ODT, we want to get the ODT from the VPD and do a bitwise or to only get the ODT for the opposite DIMM
6158+
// If we include the ODT for this DIMM, we could end up over terminating the DRAM side ODT
6159+
// The buffer's or the ODT together AND all of our LRDIMM values include ODT, so we will get the ODT we need for the host-> buffer interface
6160+
// We also use the 0th position for the host side ODT as we use the 1R termination settings for LRDIMM
6161+
const auto l_opposite_dimm_index = (iv_dimm_index + 1) % MAX_DIMM_PER_PORT;
6162+
const auto l_host_odt = l_vpd_odt[0] & DIMM_ODT_MASK[l_opposite_dimm_index];
6163+
6164+
// Do the final bitwise or
6165+
l_mcs_attr[iv_port_index][iv_dimm_index][l_rank] = l_dram_odt | l_host_odt;
61046166
}
61056167

61066168
FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_MSS_EFF_ODT_RD, iv_mcs, l_mcs_attr) );

0 commit comments

Comments
 (0)