summaryrefslogtreecommitdiffstats
path: root/src/import
diff options
context:
space:
mode:
Diffstat (limited to 'src/import')
-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