summaryrefslogtreecommitdiffstats
path: root/src/import/generic
diff options
context:
space:
mode:
authorLouis Stermole <stermole@us.ibm.com>2019-10-03 11:22:46 -0400
committerDaniel M Crowell <dcrowell@us.ibm.com>2019-10-30 14:35:26 -0500
commit3502d6036aa6c9bf159d3a241c45ee5bc111bc05 (patch)
treee9f41abcf7440f9cf8cda3717af0c797120caac3 /src/import/generic
parent1c830e13d2447ff6c41402dbfa8dec4d7ee3e801 (diff)
downloadtalos-hostboot-3502d6036aa6c9bf159d3a241c45ee5bc111bc05.tar.gz
talos-hostboot-3502d6036aa6c9bf159d3a241c45ee5bc111bc05.zip
Add deconfigure of memory port if mss_freq can't find consensus freq
Fixes condition where MSS_PORT_DOES_NOT_SUPPORT_MAJORITY_FREQ caused the IPL to halt. Fixed procedure code to deconfigure correct port's DIMMs, and updated error XML to call out all DIMMs in freq domain. Also updated error description to be more helpful. Change-Id: Ia08357c1de28f5f03d41b95d81a910d6c2e32451 CQ:SW473836 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/84733 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Reviewed-by: Mark Pizzutillo <mark.pizzutillo@ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com> Reviewed-by: Jennifer A Stofer <stofer@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/84776 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: Daniel M Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/generic')
-rw-r--r--src/import/generic/memory/lib/utils/freq/gen_mss_freq.H2
-rw-r--r--src/import/generic/memory/lib/utils/freq/mss_freq_scoreboard.H14
-rw-r--r--src/import/generic/procedures/xml/error_info/generic_error.xml19
3 files changed, 28 insertions, 7 deletions
diff --git a/src/import/generic/memory/lib/utils/freq/gen_mss_freq.H b/src/import/generic/memory/lib/utils/freq/gen_mss_freq.H
index c1c51cd87..6ad2c7ea6 100644
--- a/src/import/generic/memory/lib/utils/freq/gen_mss_freq.H
+++ b/src/import/generic/memory/lib/utils/freq/gen_mss_freq.H
@@ -462,6 +462,7 @@ inline fapi2::ReturnCode supported_freqs(const fapi2::Target<TT::FREQ_TARGET_TYP
std::vector<std::vector<uint32_t>> l_vpd_supported_freqs;
std::vector<uint32_t> l_spd_supported_freq;
std::vector<uint8_t> l_deconfigured = {0};
+ std::vector<fapi2::Target<TT::PORT_TARGET_TYPE>> l_deconfigured_targets;
// Retrieve system MRW, SPD, and VPD constraints
FAPI_TRY( max_allowed_dimm_freq<P>(l_max_mrw_freqs.data()), "%s max_allowed_dimm_freq", mss::c_str(i_target) );
@@ -486,6 +487,7 @@ inline fapi2::ReturnCode supported_freqs(const fapi2::Target<TT::FREQ_TARGET_TYP
FAPI_TRY( l_scoreboard.template resolve<P>(i_target,
l_vpd_supported_freqs,
l_deconfigured,
+ l_deconfigured_targets,
o_freqs) );
FAPI_INF("%s supported freqs:", mss::c_str(i_target));
diff --git a/src/import/generic/memory/lib/utils/freq/mss_freq_scoreboard.H b/src/import/generic/memory/lib/utils/freq/mss_freq_scoreboard.H
index 11256000a..91b89fc83 100644
--- a/src/import/generic/memory/lib/utils/freq/mss_freq_scoreboard.H
+++ b/src/import/generic/memory/lib/utils/freq/mss_freq_scoreboard.H
@@ -308,6 +308,7 @@ class freq_scoreboard
/// @param[in] i_target MCBIST target
/// @param[in] i_vpd_supported_freqs vector of hardware supported freqs -- from VPD
/// @param[out] o_deconfigured vector of port positions that were deconfigured by this function
+ /// @param[out] o_deconfigured_targets vector of port targets that were deconfigured by this function
/// @param[out] o_freqs vector of frequencies supported by all ports
/// @return FAPI2_RC_SUCCESS if successful
///
@@ -315,6 +316,7 @@ class freq_scoreboard
fapi2::ReturnCode resolve(const fapi2::Target<TT::FREQ_TARGET_TYPE>& i_target,
const std::vector<std::vector<uint32_t>>& i_vpd_supported_freqs,
std::vector<uint8_t>& o_deconfigured,
+ std::vector<fapi2::Target<TT::PORT_TARGET_TYPE>>& o_deconfigured_targets,
std::vector<uint32_t>& o_freqs)
{
const auto l_ports = mss::find_targets<TT::PORT_TARGET_TYPE>(i_target);
@@ -358,10 +360,10 @@ class freq_scoreboard
FAPI_TRY(callout_no_common_freq<P>(i_target, l_common_ports > l_empty_port_count, l_port_count));
// Now find and deconfigure all ports that don't support our selected frequency
- FAPI_TRY(deconfigure_ports<P>(i_target, l_ports, l_best_freq_index, o_deconfigured));
+ FAPI_TRY(deconfigure_ports<P>(i_target, l_ports, l_best_freq_index, o_deconfigured, o_deconfigured_targets));
// Now find all the frequencies supported by the ports that are left over
- FAPI_TRY(this->template resolve<P>(i_target, i_vpd_supported_freqs, o_deconfigured, o_freqs));
+ FAPI_TRY(this->template resolve<P>(i_target, i_vpd_supported_freqs, o_deconfigured, o_deconfigured_targets, o_freqs));
#ifndef __HOSTBOOT_MODULE
@@ -461,15 +463,18 @@ class freq_scoreboard
/// @param[in] i_ports vector of ports
/// @param[in] i_best_freq_index index corresponding to the best case frequency
/// @param[out] o_deconfigured vector of deconfigured port positions
+ /// @param[out] o_deconfigured_targets vector of deconfigured targets
/// @return FAPI2_RC_SUCCESS iff ok
///
template<mss::proc_type P, typename TT = mss::frequency_traits<P>>
fapi2::ReturnCode deconfigure_ports(const fapi2::Target<TT::FREQ_TARGET_TYPE>& i_target,
const std::vector<fapi2::Target<TT::PORT_TARGET_TYPE>>& i_ports,
const uint64_t i_best_freq_index,
- std::vector<uint8_t>& o_deconfigured)
+ std::vector<uint8_t>& o_deconfigured,
+ std::vector<fapi2::Target<TT::PORT_TARGET_TYPE>>& o_deconfigured_targets)
{
o_deconfigured.clear();
+ o_deconfigured_targets.clear();
for ( size_t l_pos = 0; l_pos < iv_num_ports; ++l_pos )
{
@@ -478,7 +483,7 @@ class freq_scoreboard
i_ports.end(),
[l_pos]( const fapi2::Target<TT::PORT_TARGET_TYPE>& i_rhs) -> bool
{
- return (mss::relative_pos<TT::FREQ_TARGET_TYPE>(i_rhs) != l_pos);
+ return (mss::relative_pos<TT::FREQ_TARGET_TYPE>(i_rhs) == l_pos);
});
// If we didn't find an port for a given position, there wasn't one configured there
@@ -497,6 +502,7 @@ class freq_scoreboard
auto& l_port_supported_freqs = iv_supported_port_freqs[l_pos];
o_deconfigured.push_back(l_pos);
+ o_deconfigured_targets.push_back(p);
FAPI_ASSERT_NOEXIT( false,
fapi2::MSS_PORT_DOES_NOT_SUPPORT_MAJORITY_FREQ()
.set_FREQ_TARGET(i_target)
diff --git a/src/import/generic/procedures/xml/error_info/generic_error.xml b/src/import/generic/procedures/xml/error_info/generic_error.xml
index ea67f4551..23daa79fc 100644
--- a/src/import/generic/procedures/xml/error_info/generic_error.xml
+++ b/src/import/generic/procedures/xml/error_info/generic_error.xml
@@ -662,18 +662,31 @@
<description>
When considering the frequencies in the MRW and the max supported
frequencies based on DIMM config, the indicated port's DIMM do not support
- the frequency of the majority of other ports' DIMM, so it will be deconfigured
+ the frequency of the majority of other ports' DIMM in the frequency domain.
+ DIMM on the offending port will be deconfigured so the IPL can continue.
+ All DIMM in the offending port's frequency domain will be marked as
+ Hardware Callout.
</description>
<ffdc>FREQ_TARGET</ffdc>
<ffdc>PORT_TARGET</ffdc>
<ffdc>FREQUENCY</ffdc>
- <callout>
+ <callout>
+ <procedure>MEMORY_PLUGGING_ERROR</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ <callout>
<childTargets>
- <parent>PORT_TARGET</parent>
+ <parent>FREQ_TARGET</parent>
<childType>TARGET_TYPE_DIMM</childType>
</childTargets>
<priority>MEDIUM</priority>
</callout>
+ <deconfigure>
+ <childTargets>
+ <parent>PORT_TARGET</parent>
+ <childType>TARGET_TYPE_DIMM</childType>
+ </childTargets>
+ </deconfigure>
</hwpError>
<hwpError>
OpenPOWER on IntegriCloud