Skip to content

Commit

Permalink
Add plug rule for dual-drop DIMM configs that produce different xlate…
Browse files Browse the repository at this point in the history
… settings

Change-Id: I3049a116f612822f33932190965bbb89782777ea
Original-Change-Id: Ief41995350e46386ed592d4c03dfc1f05e942a5c
CQ: SW416081
RTC: 186549
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/52972
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>
Reviewed-by: ANDRE A. MARIN <aamarin@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/66313
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Tested-by: Daniel M. Crowell <dcrowell@us.ibm.com>
  • Loading branch information
stermole authored and dcrowell77 committed Sep 19, 2018
1 parent 5e126f3 commit 7a9396e
Showing 1 changed file with 50 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,53 @@ fapi_try_exit:
return fapi2::current_err;
}

///
/// @brief Enforce equivalent rank and row configs
/// Enforces configurations which will produce equivalent xlate register settings
/// @param[in] i_target the port
/// @param[in] i_kinds a vector of DIMM
/// @return fapi2::FAPI2_RC_SUCCESS if okay
/// @note Expects the kind array to represent the DIMM on the port.
///
fapi2::ReturnCode check_xlate_config(const fapi2::Target<TARGET_TYPE_MCA>& i_target,
const std::vector<dimm::kind>& i_kinds)
{
if (i_kinds.size() > 1)
{
FAPI_ASSERT( i_kinds[0].equal_config(i_kinds[1]) == true,
fapi2::MSS_PLUG_RULES_DIFFERENT_XLATE()
.set_MASTER_RANKS_ON_DIMM0(i_kinds[0].iv_master_ranks)
.set_MASTER_RANKS_ON_DIMM1(i_kinds[1].iv_master_ranks)
.set_TOTAL_RANKS_ON_DIMM0(i_kinds[0].iv_total_ranks)
.set_TOTAL_RANKS_ON_DIMM1(i_kinds[1].iv_total_ranks)
.set_DRAM_DENSITY_ON_DIMM0(i_kinds[0].iv_dram_density)
.set_DRAM_DENSITY_ON_DIMM1(i_kinds[1].iv_dram_density)
.set_DRAM_WIDTH_ON_DIMM0(i_kinds[0].iv_dram_width)
.set_DRAM_WIDTH_ON_DIMM1(i_kinds[1].iv_dram_width)
.set_DRAM_GEN_ON_DIMM0(i_kinds[0].iv_dram_generation)
.set_DRAM_GEN_ON_DIMM1(i_kinds[1].iv_dram_generation)
.set_DIMM_TYPE_ON_DIMM0(i_kinds[0].iv_dimm_type)
.set_DIMM_TYPE_ON_DIMM1(i_kinds[1].iv_dimm_type)
.set_ROWS_ON_DIMM0(i_kinds[0].iv_rows)
.set_ROWS_ON_DIMM1(i_kinds[1].iv_rows)
.set_SIZE_ON_DIMM0(i_kinds[0].iv_size)
.set_SIZE_ON_DIMM1(i_kinds[1].iv_size)
.set_MCA_TARGET(i_target),
"%s has two different configurations of DIMM installed. mranks=%d,%d ranks=%d,%d density=%d,%d width=%d,%d gen=%d,%d type=%d,%d rows=%d,%d size=%d,%d Cannot mix DIMM configurations on port",
mss::c_str(i_target), i_kinds[0].iv_master_ranks, i_kinds[1].iv_master_ranks,
i_kinds[0].iv_total_ranks, i_kinds[1].iv_total_ranks,
i_kinds[0].iv_dram_density, i_kinds[1].iv_dram_density,
i_kinds[0].iv_dram_width, i_kinds[1].iv_dram_width,
i_kinds[0].iv_dram_generation, i_kinds[1].iv_dram_generation,
i_kinds[0].iv_dimm_type, i_kinds[1].iv_dimm_type,
i_kinds[0].iv_rows, i_kinds[1].iv_rows,
i_kinds[0].iv_size, i_kinds[1].iv_size);
}

fapi_try_exit:
return fapi2::current_err;
}

} // code

///
Expand Down Expand Up @@ -721,6 +768,9 @@ fapi2::ReturnCode plug_rule::enforce_plug_rules(const fapi2::Target<fapi2::TARGE
// Checks to see if any DIMM are LRDIMM
FAPI_TRY( plug_rule::code::check_lrdimm(l_dimm_kinds) );

// Temporary check that xlate settings will be the same if there are two DIMM in the port
FAPI_TRY( plug_rule::code::check_xlate_config(i_target, l_dimm_kinds) );

fapi_try_exit:
return fapi2::current_err;
}
Expand Down

0 comments on commit 7a9396e

Please sign in to comment.