summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H117
-rw-r--r--src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml254
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C8
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist_traits.H117
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H1
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C3
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/p9_mss_memdiag.C2
-rw-r--r--src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_eff_config.xml31
-rw-r--r--src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_freq.xml70
-rw-r--r--src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_lib.xml67
-rw-r--r--src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_memdiags.xml117
-rw-r--r--src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_spd_decode.xml221
-rw-r--r--src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H18
-rw-r--r--src/import/generic/memory/lib/spd/spd_checker.H5
-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.H2
-rw-r--r--src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist.H28
-rw-r--r--src/import/generic/memory/lib/utils/mcbist/gen_mss_memdiags.H28
-rw-r--r--src/import/generic/procedures/xml/error_info/generic_error.xml349
19 files changed, 972 insertions, 468 deletions
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H
index 70830f58f..aa9e6bdcd 100644
--- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H
+++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H
@@ -58,6 +58,123 @@ class mcbistMCTraits< mss::mc_type::EXPLORER>
public:
static constexpr fapi2::TargetType MC_TARGET_TYPE = fapi2::TARGET_TYPE_OCMB_CHIP;
static constexpr fapi2::TargetType FWMS_ADDR_TARGET_TYPE = fapi2::TARGET_TYPE_MEM_PORT;
+
+ ///
+ /// @brief Returns an error for memdiags compare error in last pattern
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_COMPARE_ERROR_IN_LAST_PATTERN memdiags_compare_error_in_last_pattern()
+ {
+ return fapi2::EXP_MEMDIAGS_COMPARE_ERROR_IN_LAST_PATTERN();
+ }
+
+ ///
+ /// @brief Returns an error for memdiags error in last pattern
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_ERROR_IN_LAST_PATTERN memdiags_error_in_last_pattern()
+ {
+ return fapi2::EXP_MEMDIAGS_ERROR_IN_LAST_PATTERN();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags failed to start
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_MCBIST_FAILED_TO_START memdiags_failed_to_start()
+ {
+ return fapi2::EXP_MEMDIAGS_MCBIST_FAILED_TO_START();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags failed to stop
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_MCBIST_FAILED_TO_STOP memdiags_failed_to_stop()
+ {
+ return fapi2::EXP_MEMDIAGS_MCBIST_FAILED_TO_STOP();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags has a non-functional port
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_PORT_NOT_FUNCTIONAL memdiags_port_not_functional()
+ {
+ return fapi2::EXP_MEMDIAGS_PORT_NOT_FUNCTIONAL();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags super fast init failed to init
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_SUPERFAST_INIT_FAILED_TO_INIT memdiags_sf_init_failed_init()
+ {
+ return fapi2::EXP_MEMDIAGS_SUPERFAST_INIT_FAILED_TO_INIT();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags super fast read failed to init
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_SUPERFAST_READ_FAILED_TO_INIT memdiags_sf_read_failed_init()
+ {
+ return fapi2::EXP_MEMDIAGS_SUPERFAST_READ_FAILED_TO_INIT();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags super fast read failed to init
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_CONTINUOUS_SCRUB_FAILED_TO_INIT memdiags_continuous_scrub_failed_init()
+ {
+ return fapi2::EXP_MEMDIAGS_CONTINUOUS_SCRUB_FAILED_TO_INIT();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags targeted scrub failed to init
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_TARGETED_SCRUB_FAILED_TO_INIT memdiags_targeted_scrub_failed_init()
+ {
+ return fapi2::EXP_MEMDIAGS_TARGETED_SCRUB_FAILED_TO_INIT();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags is already at a boundary
+ /// @return memdiags error
+ ///
+ static fapi2::EXP_MEMDIAGS_ALREADY_AT_BOUNDARY memdiags_already_at_boundary()
+ {
+ return fapi2::EXP_MEMDIAGS_ALREADY_AT_BOUNDARY();
+ }
+
+ ///
+ /// @brief Returns an error if MCBIST timesout
+ /// @return MCBIST error
+ ///
+ static fapi2::EXP_MCBIST_TIMEOUT mcbist_timeout()
+ {
+ return fapi2::EXP_MCBIST_TIMEOUT();
+ }
+
+ ///
+ /// @brief Returns an error if MCBIST has an unknown failure
+ /// @return MCBIST error
+ ///
+ static fapi2::EXP_MCBIST_UNKNOWN_FAILURE mcbist_unknown_failure()
+ {
+ return fapi2::EXP_MCBIST_UNKNOWN_FAILURE();
+ }
+
+ ///
+ /// @brief Returns an error if MCBIST has a data miscompare
+ /// @return MCBIST error
+ ///
+ static fapi2::EXP_MCBIST_DATA_FAIL mcbist_data_fail()
+ {
+ return fapi2::EXP_MCBIST_DATA_FAIL();
+ }
};
///
diff --git a/src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml b/src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml
index c6a941e2d..d3d231226 100644
--- a/src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml
+++ b/src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml
@@ -24,6 +24,260 @@
<!-- IBM_PROLOG_END_TAG -->
<hwpErrors>
+ <registerFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <scomRegister>EXPLR_MCBIST_MCBMR0Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBCFGQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCB_CNTLQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCB_CNTLSTATQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBSTATQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBMCATQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBPARMQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBAGRAQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MBSEC1Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MBSTRQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBISTFIRQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBAMR0A0Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBAMR1A0Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBAMR2A0Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBAMR3A0Q</scomRegister>
+
+ <scomRegister>EXPLR_MCBIST_MCBFD0Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBFD1Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBFD2Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBFD3Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBFD4Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBFD5Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBFD6Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBFD7Q</scomRegister>
+
+ <scomRegister>EXPLR_MCBIST_MCBSA0Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBSA1Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBSA2Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBSA3Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBEA0Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBEA1Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBEA2Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBEA3Q</scomRegister>
+ </registerFfdc>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_COMPARE_ERROR_IN_LAST_PATTERN</rc>
+ <description>A miscompare error was caused by the last MCBIST pattern</description>
+ <ffdc>PORT</ffdc>
+ <ffdc>SUBTEST</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_ERROR_IN_LAST_PATTERN</rc>
+ <description>An error was caused by the last MCBIST pattern</description>
+ <ffdc>STATUS0</ffdc>
+ <ffdc>STATUS1</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_MCBIST_FAILED_TO_START</rc>
+ <description>The MCBIST engine failed to start its program</description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_PORT_NOT_FUNCTIONAL</rc>
+ <description>The port used in an MCBIST program is not functional</description>
+ <ffdc>RELATIVE_PORT_POSITION</ffdc>
+ <ffdc>ADDRESS</ffdc>
+ <ffdc>MC_TARGET</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_SUPERFAST_INIT_FAILED_TO_INIT</rc>
+ <description>A superfast init operation failed initialization</description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_SUPERFAST_READ_FAILED_TO_INIT</rc>
+ <description>A superfast read operation failed initialization</description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_MCBIST_FAILED_TO_STOP</rc>
+ <description>The MCBIST engine failed to stop its program</description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <ffdc>POLL_COUNT</ffdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_CONTINUOUS_SCRUB_FAILED_TO_INIT</rc>
+ <description>A continuous scrub operation failed initialization</description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_TARGETED_SCRUB_FAILED_TO_INIT</rc>
+ <description>A continuous scrub operation failed initialization</description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MEMDIAGS_ALREADY_AT_BOUNDARY</rc>
+ <description>A continue request asked to stop at a boundary, but we are there already</description>
+ <ffdc>MC_TARGET</ffdc>
+ <ffdc>BOUNDARY</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MCBIST_TIMEOUT</rc>
+ <description>
+ MCBIST program failed to return in the time allowed
+ Software timer, MCBIST has not finished in the time allowed
+ </description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>MC_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>MC_TARGET</target>
+ </gard>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MCBIST_DATA_FAIL</rc>
+ <description>
+ MCBIST program appeared to have failed, but set conflicting bits in the status register
+ </description>
+ <ffdc>STATUS_REGISTER</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>MC_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>MC_TARGET</target>
+ </gard>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_MCBIST_UNKNOWN_FAILURE</rc>
+ <description>MCBIST program reported a failure but no error status was found</description>
+ <ffdc>STATUS_REGISTER</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>MC_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>MC_TARGET</target>
+ </gard>
+ </hwpError>
+
<hwpError>
<rc>RC_MSS_EXP_DRAMINIT_BAD_NUM_RANKS</rc>
<description>Bad number of ranks were passed in the bad bits functionality</description>
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
index 7fe4f2e97..baac38c30 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
@@ -5686,7 +5686,7 @@ fapi2::ReturnCode eff_dimm::decode_vpd(const fapi2::Target<TARGET_TYPE_MCS>& i_t
set_MAX(mss::VPD_KEYWORD_MAX).
set_ACTUAL(l_vpd_info.iv_size).
set_KEYWORD(fapi2::MemVpdData::MT).
- set_MCS_TARGET(i_target),
+ set_VPD_TARGET(i_target),
"VPD MT keyword size retrieved: %d, is larger than max: %d for %s",
l_vpd_info.iv_size, mss::VPD_KEYWORD_MAX, mss::c_str(i_target));
@@ -5710,7 +5710,7 @@ fapi2::ReturnCode eff_dimm::decode_vpd(const fapi2::Target<TARGET_TYPE_MCS>& i_t
set_MAX(mss::VPD_KEYWORD_MAX).
set_ACTUAL(l_vpd_info.iv_size).
set_KEYWORD(fapi2::MemVpdData::MR).
- set_MCS_TARGET(i_target),
+ set_VPD_TARGET(i_target),
"VPD MR keyword size retrieved: %d, is larger than max: %d for %s",
l_vpd_info.iv_size, mss::VPD_KEYWORD_MAX, mss::c_str(i_target));
@@ -5731,7 +5731,7 @@ fapi2::ReturnCode eff_dimm::decode_vpd(const fapi2::Target<TARGET_TYPE_MCS>& i_t
set_MAX(mss::VPD_KEYWORD_MAX).
set_ACTUAL(l_vpd_info.iv_size).
set_KEYWORD(fapi2::MemVpdData::CK).
- set_MCS_TARGET(i_target),
+ set_VPD_TARGET(i_target),
"VPD CK keyword size retrieved: %d, is larger than max: %d for %s",
l_vpd_info.iv_size, mss::VPD_KEYWORD_MAX, mss::c_str(i_target));
@@ -5750,7 +5750,7 @@ fapi2::ReturnCode eff_dimm::decode_vpd(const fapi2::Target<TARGET_TYPE_MCS>& i_t
set_MAX(mss::VPD_KEYWORD_MAX).
set_ACTUAL(l_vpd_info.iv_size).
set_KEYWORD(fapi2::MemVpdData::DQ).
- set_MCS_TARGET(i_target),
+ set_VPD_TARGET(i_target),
"VPD DQ keyword size retrieved: %d, is larger than max: %d for %s",
l_vpd_info.iv_size, mss::VPD_KEYWORD_MAX, mss::c_str(i_target));
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist_traits.H b/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist_traits.H
index ec47c1397..69ca5694c 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist_traits.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist_traits.H
@@ -58,6 +58,123 @@ class mcbistMCTraits<mss::mc_type::NIMBUS>
public:
static constexpr fapi2::TargetType MC_TARGET_TYPE = fapi2::TARGET_TYPE_MCBIST;
static constexpr fapi2::TargetType FWMS_ADDR_TARGET_TYPE = fapi2::TARGET_TYPE_MCA;
+
+ ///
+ /// @brief Returns an error for memdiags compare error in last pattern
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_COMPARE_ERROR_IN_LAST_PATTERN memdiags_compare_error_in_last_pattern()
+ {
+ return fapi2::MSS_MEMDIAGS_COMPARE_ERROR_IN_LAST_PATTERN();
+ }
+
+ ///
+ /// @brief Returns an error for memdiags error in last pattern
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_ERROR_IN_LAST_PATTERN memdiags_error_in_last_pattern()
+ {
+ return fapi2::MSS_MEMDIAGS_ERROR_IN_LAST_PATTERN();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags failed to start
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_MCBIST_FAILED_TO_START memdiags_failed_to_start()
+ {
+ return fapi2::MSS_MEMDIAGS_MCBIST_FAILED_TO_START();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags failed to stop
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_MCBIST_FAILED_TO_STOP memdiags_failed_to_stop()
+ {
+ return fapi2::MSS_MEMDIAGS_MCBIST_FAILED_TO_STOP();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags has a non-functional port
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_PORT_NOT_FUNCTIONAL memdiags_port_not_functional()
+ {
+ return fapi2::MSS_MEMDIAGS_PORT_NOT_FUNCTIONAL();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags super fast init failed to init
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_SUPERFAST_INIT_FAILED_TO_INIT memdiags_sf_init_failed_init()
+ {
+ return fapi2::MSS_MEMDIAGS_SUPERFAST_INIT_FAILED_TO_INIT();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags super fast read failed to init
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_SUPERFAST_READ_FAILED_TO_INIT memdiags_sf_read_failed_init()
+ {
+ return fapi2::MSS_MEMDIAGS_SUPERFAST_READ_FAILED_TO_INIT();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags continuous scrub failed to init
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_CONTINUOUS_SCRUB_FAILED_TO_INIT memdiags_continuous_scrub_failed_init()
+ {
+ return fapi2::MSS_MEMDIAGS_CONTINUOUS_SCRUB_FAILED_TO_INIT();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags targeted scrub failed to init
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_TARGETED_SCRUB_FAILED_TO_INIT memdiags_targeted_scrub_failed_init()
+ {
+ return fapi2::MSS_MEMDIAGS_TARGETED_SCRUB_FAILED_TO_INIT();
+ }
+
+ ///
+ /// @brief Returns an error if memdiags is already at a boundary
+ /// @return memdiags error
+ ///
+ static fapi2::MSS_MEMDIAGS_ALREADY_AT_BOUNDARY memdiags_already_at_boundary()
+ {
+ return fapi2::MSS_MEMDIAGS_ALREADY_AT_BOUNDARY();
+ }
+
+ ///
+ /// @brief Returns an error if MCBIST timesout
+ /// @return MCBIST error
+ ///
+ static fapi2::MSS_MCBIST_TIMEOUT mcbist_timeout()
+ {
+ return fapi2::MSS_MCBIST_TIMEOUT();
+ }
+
+ ///
+ /// @brief Returns an error if MCBIST has an unknown failure
+ /// @return MCBIST error
+ ///
+ static fapi2::MSS_MCBIST_UNKNOWN_FAILURE mcbist_unknown_failure()
+ {
+ return fapi2::MSS_MCBIST_UNKNOWN_FAILURE();
+ }
+
+ ///
+ /// @brief Returns an error if MCBIST has a data miscompare
+ /// @return MCBIST error
+ ///
+ static fapi2::MSS_MCBIST_DATA_FAIL mcbist_data_fail()
+ {
+ return fapi2::MSS_MCBIST_DATA_FAIL();
+ }
};
///
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H b/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H
index 4cec1ad77..dc213b0ca 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H
@@ -172,6 +172,7 @@ enum ffdc_function_codes
DRAM_TO_RP_REG = 101,
// eff_dimm.C
+ RAW_CARD_FACTORY = 115,
PRIMARY_STACK_TYPE = 116,
// CW engine information
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C b/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C
index be8343c71..dfd090449 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/spd/spd_factory.C
@@ -131,7 +131,8 @@ fapi2::ReturnCode raw_card_factory(const fapi2::Target<TARGET_TYPE_DIMM>& i_targ
FAPI_ASSERT( false,
fapi2::MSS_INVALID_DIMM_TYPE()
.set_DIMM_TYPE(l_dimm_type)
- .set_DIMM_TARGET(i_target),
+ .set_DIMM_TARGET(i_target)
+ .set_FUNCTION(mss::ffdc_function_codes::RAW_CARD_FACTORY),
"Recieved invalid dimm type: %d for %s",
l_dimm_type, mss::spd::c_str(i_target) );
break;
diff --git a/src/import/chips/p9/procedures/hwp/memory/p9_mss_memdiag.C b/src/import/chips/p9/procedures/hwp/memory/p9_mss_memdiag.C
index f88ad8f46..7146460b4 100644
--- a/src/import/chips/p9/procedures/hwp/memory/p9_mss_memdiag.C
+++ b/src/import/chips/p9/procedures/hwp/memory/p9_mss_memdiag.C
@@ -180,7 +180,7 @@ extern "C"
l_probes);
FAPI_ASSERT( l_poll_results == true,
- fapi2::MSS_MEMDIAGS_SUPERFAST_INIT_FAILED_TO_INIT().set_MCBIST_TARGET(i_target),
+ fapi2::MSS_MEMDIAGS_SUPERFAST_INIT_FAILED_TO_INIT().set_MC_TARGET(i_target),
"p9_mss_memdiag (init) timedout %s", mss::c_str(i_target) );
// Unmask firs after memdiags and turn off FIFO mode
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_eff_config.xml b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_eff_config.xml
index 9d9aea174..56fb232dc 100644
--- a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_eff_config.xml
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_eff_config.xml
@@ -5,7 +5,7 @@
<!-- -->
<!-- OpenPOWER HostBoot Project -->
<!-- -->
-<!-- Contributors Listed Below - COPYRIGHT 2016,2018 -->
+<!-- Contributors Listed Below - COPYRIGHT 2016,2019 -->
<!-- [+] International Business Machines Corp. -->
<!-- -->
<!-- -->
@@ -109,18 +109,6 @@
</hwpError>
<hwpError>
- <rc>RC_MSS_INVALID_CAST_CALC_NCK</rc>
- <description>Invalid cast or calculation for calc_nck</description>
- <ffdc>TIMING_PS</ffdc>
- <ffdc>NCK_NS</ffdc>
- <ffdc>CORRECTION_FACTOR</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
<rc>RC_MSS_INVALID_SPD_SLAVE_RANKS</rc>
<description>
Seems logical ranks are not master ranks* slave ranks.
@@ -522,23 +510,6 @@
</hwpError>
<hwpError>
- <rc>RC_MSS_INVALID_VPD_KEYWORD_MAX</rc>
- <description>
- VPD keyword is too big for space allocated for it.
- </description>
- <ffdc>MAX</ffdc>
- <ffdc>ACTUAL</ffdc>
- <ffdc>KEYWORD</ffdc>
- <callout>
- <hw>
- <hwid>VPD_PART</hwid>
- <refTarget>MCS_TARGET</refTarget>
- </hw>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
<rc>RC_MSS_OFFSET_WR_VREF_OUT_OF_RANGE</rc>
<description>
The offset composite range is out of range
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_freq.xml b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_freq.xml
index 4f964f8ac..e2a9bf1ab 100644
--- a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_freq.xml
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_freq.xml
@@ -127,32 +127,6 @@
</hwpError>
<hwpError>
- <rc>RC_MSS_INVALID_VPD_FREQ_LIST_PASSED</rc>
- <description>
- Wrong size vector passed into limit_freq_by_vpd function
- </description>
- <ffdc>SIZE</ffdc>
- <ffdc>EXPECTED</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_INVALID_FREQ_LIST_PASSED</rc>
- <description>
- Wrong size vector passed into frequency scoreboard function
- </description>
- <ffdc>SIZE</ffdc>
- <ffdc>EXPECTED</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
<rc>RC_MSS_ERROR_FINDING_DIMM_SPEED_MAP</rc>
<description>
Empty MCBIST target vector found when constructing dimm speed mapping
@@ -204,22 +178,6 @@
</callout>
</hwpError>
-
- <hwpError>
- <rc>RC_MSS_MAX_FREQ_ATTR_SIZE_CHANGED</rc>
- <description>
- Number of entries for MSS_MRW_MAX_FREQ attribute from VPD has changed without updating the code
- Asserted because direct accesses to array
- </description>
- <ffdc>ACTUAL_SIZE</ffdc>
- <ffdc>SUPPOSED_SIZE</ffdc>
- <ffdc>MCA_TARGET</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
<hwpError>
<rc>RC_MSS_MRW_FREQ_MAX_FREQ_EMPTY_SET</rc>
<description>
@@ -286,34 +244,6 @@
</hwpError>
<hwpError>
- <rc>RC_MSS_TOO_MANY_DIMMS_ON_PORT</rc>
- <description>There seem to be too many dimms on the port</description>
- <ffdc>DIMM_COUNT</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- <callout>
- <childTargets>
- <parent>PORT_TARGET</parent>
- <childType>TARGET_TYPE_DIMM</childType>
- </childTargets>
- <priority>MEDIUM</priority>
- </callout>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_FREQ_INDEX_TOO_LARGE</rc>
- <description>Error calculating the index into max_freq array</description>
- <ffdc>INDEX</ffdc>
- <ffdc>NUM_MAX_FREQS</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
<rc>RC_MSS_FREQ_TO_NEST_FREQ_RATIO_TOO_LARGE</rc>
<description>
Case when mss_freq to nest freq is above the maximum allowed.
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_lib.xml b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_lib.xml
index 8d8c68b9a..6a6d2e1c8 100644
--- a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_lib.xml
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_lib.xml
@@ -282,73 +282,6 @@
</hwpError>
<hwpError>
- <rc>RC_MSS_MCBIST_TIMEOUT</rc>
- <description>
- MCBIST program failed to return in the time allowed
- Software timer, MCBIST has not finished in the time allowed
- </description>
- <collectRegisterFfdc>
- <id>REG_FFDC_MSS_CCS_FAILURE</id>
- <target>MCBIST_TARGET</target>
- <targetType>TARGET_TYPE_MCBIST</targetType>
- </collectRegisterFfdc>
- <callout>
- <target>MCBIST_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>MCBIST_TARGET</target>
- </deconfigure>
- <gard>
- <target>MCBIST_TARGET</target>
- </gard>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_MCBIST_DATA_FAIL</rc>
- <description>
- MCBIST program appeared to have failed, but set conflicting bits in the status register
- </description>
- <ffdc>STATUS_REGISTER</ffdc>
- <collectRegisterFfdc>
- <id>REG_FFDC_MSS_CCS_FAILURE</id>
- <target>MCBIST_TARGET</target>
- <targetType>TARGET_TYPE_MCBIST</targetType>
- </collectRegisterFfdc>
- <callout>
- <target>MCBIST_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>MCBIST_TARGET</target>
- </deconfigure>
- <gard>
- <target>MCBIST_TARGET</target>
- </gard>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_MCBIST_UNKNOWN_FAILURE</rc>
- <description>MCBIST program reported a failure but no error status was found</description>
- <ffdc>STATUS_REGISTER</ffdc>
- <collectRegisterFfdc>
- <id>REG_FFDC_MSS_CCS_FAILURE</id>
- <target>MCBIST_TARGET</target>
- <targetType>TARGET_TYPE_MCBIST</targetType>
- </collectRegisterFfdc>
- <callout>
- <target>MCBIST_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>MCBIST_TARGET</target>
- </deconfigure>
- <gard>
- <target>MCBIST_TARGET</target>
- </gard>
- </hwpError>
-
- <hwpError>
<rc>RC_MSS_APB_INVALID_ADDRESS</rc>
<description>PHY APB interface is reporting an invalid address was read or written</description>
<ffdc>PORT_POSITION</ffdc>
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_memdiags.xml b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_memdiags.xml
index fb9567e9c..a94ae9804 100644
--- a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_memdiags.xml
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_memdiags.xml
@@ -84,17 +84,84 @@
</registerFfdc>
<hwpError>
+ <rc>RC_MSS_MCBIST_TIMEOUT</rc>
+ <description>
+ MCBIST program failed to return in the time allowed
+ Software timer, MCBIST has not finished in the time allowed
+ </description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_MCBIST</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>MC_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>MC_TARGET</target>
+ </gard>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_MCBIST_DATA_FAIL</rc>
+ <description>
+ MCBIST program appeared to have failed, but set conflicting bits in the status register
+ </description>
+ <ffdc>STATUS_REGISTER</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_MSS_CCS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_MCBIST</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>MC_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>MC_TARGET</target>
+ </gard>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_MCBIST_UNKNOWN_FAILURE</rc>
+ <description>MCBIST program reported a failure but no error status was found</description>
+ <ffdc>STATUS_REGISTER</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_MCBIST</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>MC_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>MC_TARGET</target>
+ </gard>
+ </hwpError>
+
+ <hwpError>
<rc>RC_MSS_MEMDIAGS_ERROR_IN_LAST_PATTERN</rc>
<description>An error was caused by the last MCBIST pattern</description>
<ffdc>STATUS0</ffdc>
<ffdc>STATUS1</ffdc>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<callout>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<priority>HIGH</priority>
</callout>
</hwpError>
@@ -106,11 +173,11 @@
<ffdc>SUBTEST</ffdc>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<callout>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<priority>HIGH</priority>
</callout>
</hwpError>
@@ -209,11 +276,11 @@
<description>The MCBIST engine failed to start its program</description>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<callout>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<priority>HIGH</priority>
</callout>
</hwpError>
@@ -223,12 +290,12 @@
<description>The MCBIST engine failed to stop its program</description>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<ffdc>POLL_COUNT</ffdc>
<callout>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<priority>HIGH</priority>
</callout>
</hwpError>
@@ -238,10 +305,10 @@
<description>The port used in an MCBIST program is not functional</description>
<ffdc>RELATIVE_PORT_POSITION</ffdc>
<ffdc>ADDRESS</ffdc>
- <ffdc>MCBIST_TARGET</ffdc>
+ <ffdc>MC_TARGET</ffdc>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<callout>
@@ -255,11 +322,11 @@
<description>A superfast read operation failed initialization</description>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<callout>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<priority>HIGH</priority>
</callout>
</hwpError>
@@ -269,11 +336,11 @@
<description>A superfast init operation failed initialization</description>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<callout>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<priority>HIGH</priority>
</callout>
</hwpError>
@@ -283,11 +350,11 @@
<description>A continuous scrub operation failed initialization</description>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<callout>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<priority>HIGH</priority>
</callout>
</hwpError>
@@ -297,11 +364,11 @@
<description>A continuous scrub operation failed initialization</description>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<callout>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<priority>HIGH</priority>
</callout>
</hwpError>
@@ -309,11 +376,11 @@
<hwpError>
<rc>RC_MSS_MEMDIAGS_ALREADY_AT_BOUNDARY</rc>
<description>A continue request asked to stop at a boundary, but we are there already</description>
- <ffdc>MCBIST_TARGET</ffdc>
+ <ffdc>MC_TARGET</ffdc>
<ffdc>BOUNDARY</ffdc>
<collectRegisterFfdc>
<id>REG_FFDC_MSS_MEMDIAGS_FAILURE</id>
- <target>MCBIST_TARGET</target>
+ <target>MC_TARGET</target>
<targetType>TARGET_TYPE_MCBIST</targetType>
</collectRegisterFfdc>
<callout>
@@ -323,16 +390,6 @@
</hwpError>
<hwpError>
- <rc>RC_MSS_MEMDIAGS_NO_MCBIST_SUBTESTS</rc>
- <description>Attempt to run an MCBIST program with no subtests</description>
- <ffdc>MCBIST_TARGET</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
<rc>RC_MSS_MEMDIAGS_REPAIRS_EXCEEDED</rc>
<description>A mark repair operation failed to repair enough bad bits</description>
<collectRegisterFfdc>
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_spd_decode.xml b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_spd_decode.xml
index a1310dec2..eec228380 100644
--- a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_spd_decode.xml
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_spd_decode.xml
@@ -5,7 +5,7 @@
<!-- -->
<!-- OpenPOWER HostBoot Project -->
<!-- -->
-<!-- Contributors Listed Below - COPYRIGHT 2015,2018 -->
+<!-- Contributors Listed Below - COPYRIGHT 2015,2019 -->
<!-- [+] International Business Machines Corp. -->
<!-- -->
<!-- -->
@@ -37,140 +37,6 @@
<hwpErrors>
<hwpError>
- <rc>RC_MSS_INVALID_SPD_RESERVED_BITS</rc>
- <description>
- Invalid SPD reserved bits received.
- This could be code problem (decoding) or bad SPD.
- </description>
- <ffdc>FUNCTION_CODE</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- <callout>
- <target>TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_INVALID_DIMM_SPEED</rc>
- <description>
- Invalid DIMM speed received. Possibly a programming error.
- </description>
- <ffdc>DIMM_SPEED</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- <callout>
- <target>TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_INVALID_DB_MDQ_DRIVE_STRENGTH</rc>
- <description>
- Bad SPD data for bytes 145 - 147.
- Reserved settings for data buffer MDQ drive strength received.
- This could be code problem (decoding) or bad SPD.
- </description>
- <ffdc>DATA_RATE</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- <callout>
- <target>TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_INVALID_DRAM_GEN</rc>
- <description>
- Received a DRAM gen unsupported by the SPD decoder factory
- </description>
- <ffdc>DRAM_GEN</ffdc>
- <ffdc>FUNCTION</ffdc>
- <callout>
- <procedure>MEMORY_PLUGGING_ERROR</procedure>
- <priority>HIGH</priority>
- </callout>
- <callout>
- <target>DIMM_TARGET</target>
- <priority>LOW</priority>
- </callout>
- <deconfigure>
- <target>DIMM_TARGET</target>
- </deconfigure>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_INVALID_HYBRID_MODULE</rc>
- <description>
- Received an invalid or unsupported hybrid media (SPD byte 3, bits [6:4])
- for a specified hybrid modue (SPD byte 3, bit [7])
- </description>
- <ffdc>HYBRID</ffdc>
- <ffdc>HYBRID_MEDIA</ffdc>
- <ffdc>FUNCTION</ffdc>
- <callout>
- <procedure>MEMORY_PLUGGING_ERROR</procedure>
- <priority>HIGH</priority>
- </callout>
- <callout>
- <target>TARGET</target>
- <priority>LOW</priority>
- </callout>
- <deconfigure>
- <target>TARGET</target>
- </deconfigure>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_INVALID_DIMM_TYPE</rc>
- <description>
- Received a DIMM type unsupported by the SPD decoder factory
- </description>
- <ffdc>DIMM_TYPE</ffdc>
- <ffdc>FUNCTION</ffdc>
- <callout>
- <procedure>MEMORY_PLUGGING_ERROR</procedure>
- <priority>HIGH</priority>
- </callout>
- <callout>
- <target>DIMM_TARGET</target>
- <priority>LOW</priority>
- </callout>
- <deconfigure>
- <target>DIMM_TARGET</target>
- </deconfigure>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- </hwpError>
-
- <hwpError>
<rc>RC_MSS_INVALID_RAW_CARD</rc>
<description>
Received a raw card that isn't currently supported in code
@@ -194,89 +60,4 @@
</deconfigure>
</hwpError>
- <hwpError>
- <rc>RC_MSS_FAILED_SPD_REVISION_FALLBACK</rc>
- <description>
- Unable to fall back SPD decoder to the highest decoded
- revision. Most likely a programming error.
- </description>
- <ffdc>FAILED_REVISION</ffdc>
- <ffdc>FUNCTION_CODE</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- <callout>
- <target>TARGET</target>
- <priority>MEDIUM</priority>
- </callout>
- <deconfigure>
- <target>TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_SPD_TIMING_FAIL</rc>
- <description>
- Timing SPD parameter failed to meet JEDEC SPD timing
- bounds. FUNCTION_CODE ffdc field encodes which timing param.
- </description>
- <ffdc>FAILED_REVISION</ffdc>
- <ffdc>FUNCTION_CODE</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- <callout>
- <target>TARGET</target>
- <priority>MEDIUM</priority>
- </callout>
- <deconfigure>
- <target>TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_INVALID_SPD_PARAMETER_RECEIVED</rc>
- <description>
- Unable to fall back SPD decoder to the highest decoded
- revision. Most likely a programming error.
- </description>
- <ffdc>SPD_PARAM</ffdc>
- <ffdc>FUNCTION_CODE</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- <callout>
- <target>TARGET</target>
- <priority>MEDIUM</priority>
- </callout>
- <deconfigure>
- <target>TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_SPD_REV_ENCODING_LEVEL_NOT_SUPPORTED</rc>
- <description>
- SPD revision on byte 1 (bits 7~4) has a unsupported encoding level
- that is greater than the largest decoded SPD decoder. There is
- no backward compatible revision to fallback to. This could be
- bad SPD or a programming error.
- </description>
- <ffdc>ENCODING_LEVEL</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>MEDIUM</priority>
- </callout>
- <callout>
- <target>TARGET</target>
- <priority>MEDIUM</priority>
- </callout>
- <deconfigure>
- <target>TARGET</target>
- </deconfigure>
- </hwpError>
-
</hwpErrors>
diff --git a/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H b/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H
index 12821c76f..1ebd48115 100644
--- a/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H
+++ b/src/import/generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H
@@ -493,7 +493,7 @@ class decoder<DDR4, BASE_CNFG, R> : public base_cnfg_decoder
right_aligned_insert(l_buffer, l_twrmin_msn, l_twrmin_lsb);
// Update output only after check passes
- FAPI_TRY( check::max_timing_range<BITS12>(i_target, l_buffer, TWRMIN));
+ FAPI_TRY( check::max_timing_range<BITS12>(i_target, l_buffer, U, TWRMIN));
o_value = l_buffer;
FAPI_INF("%s. Minimum Write Recovery Time (tWRmin) in MTB units: %d",
@@ -526,7 +526,7 @@ class decoder<DDR4, BASE_CNFG, R> : public base_cnfg_decoder
right_aligned_insert(l_buffer, l_twtr_lmin_msn, l_twtr_lmin_lsb);
// Update output only after check passes
- FAPI_TRY( check::max_timing_range<BITS12>(i_target, l_buffer, TWTR_L_MIN));
+ FAPI_TRY( check::max_timing_range<BITS12>(i_target, l_buffer, U, TWTR_L_MIN));
o_value = l_buffer;
FAPI_INF("%s. Minimum Write to Read Time - Different Bank Group (tWTR_Lmin) in MTB units: %d",
@@ -560,7 +560,7 @@ class decoder<DDR4, BASE_CNFG, R> : public base_cnfg_decoder
right_aligned_insert(l_buffer, l_twtr_smin_msn, l_twtr_smin_lsb);
// Update output only after check passes
- FAPI_TRY( check::max_timing_range<BITS12>(i_target, l_buffer, TWTR_S_MIN));
+ FAPI_TRY( check::max_timing_range<BITS12>(i_target, l_buffer, U, TWTR_S_MIN));
o_value = l_buffer;
FAPI_INF("%s. Minimum Write to Read Time - Different Bank Group (tWTR_Smin) in MTB units: %d",
@@ -1275,7 +1275,7 @@ class decoder<DDR4, BASE_CNFG, R> : public base_cnfg_decoder
right_aligned_insert(l_buffer, l_tRASmin_msn, l_tRASmin_lsb);
// Update output only after check passes
- FAPI_TRY( check::max_timing_range<BITS12>(iv_target, l_buffer, TRASMIN));
+ FAPI_TRY( check::max_timing_range<BITS12>(iv_target, l_buffer, R, TRASMIN));
o_value = l_buffer;
FAPI_INF("%s. Minimum Active to Precharge Delay Time (tRASmin) in MTB units: %d",
@@ -1305,7 +1305,7 @@ class decoder<DDR4, BASE_CNFG, R> : public base_cnfg_decoder
right_aligned_insert(l_buffer, l_trcmin_msn, l_trcmin_lsb);
// Update output only after check passes
- FAPI_TRY( check::max_timing_range<BITS12>(iv_target, l_buffer, TRCMIN));
+ FAPI_TRY( check::max_timing_range<BITS12>(iv_target, l_buffer, R, TRCMIN));
o_value = l_buffer;
FAPI_INF("%s. Minimum Active to Active/Refresh Delay Time (tRCmin) in MTB units: %d",
@@ -1336,7 +1336,7 @@ class decoder<DDR4, BASE_CNFG, R> : public base_cnfg_decoder
right_aligned_insert(l_buffer, l_trfc1min_msb, l_trfc1min_lsb);
// Update output only after check passes
- FAPI_TRY( check::max_timing_range<BITS16>(iv_target, l_buffer, TRFC1MIN));
+ FAPI_TRY( check::max_timing_range<BITS16>(iv_target, l_buffer, R, TRFC1MIN));
o_value = l_buffer;
FAPI_INF("%s. Minimum Refresh Recovery Delay Time 1 (tRFC1min) in MTB units: %d",
@@ -1366,7 +1366,7 @@ class decoder<DDR4, BASE_CNFG, R> : public base_cnfg_decoder
right_aligned_insert(l_buffer, l_trfc2min_msb, l_trfc2min_lsb);
// Update output only after check passes
- FAPI_TRY( check::max_timing_range<BITS16>(iv_target, l_buffer, TRFC2MIN));
+ FAPI_TRY( check::max_timing_range<BITS16>(iv_target, l_buffer, R, TRFC2MIN));
o_value = l_buffer;
FAPI_INF("%s. Minimum Refresh Recovery Delay Time 2 (tRFC2min) in MTB units: %d",
@@ -1396,7 +1396,7 @@ class decoder<DDR4, BASE_CNFG, R> : public base_cnfg_decoder
right_aligned_insert(l_buffer, l_trfc4min_msb, l_trfc4min_lsb);
// Update output only after check passes
- FAPI_TRY( check::max_timing_range<BITS16>(iv_target, l_buffer, TRFC4MIN));
+ FAPI_TRY( check::max_timing_range<BITS16>(iv_target, l_buffer, R, TRFC4MIN));
o_value = l_buffer;
FAPI_INF("%s. Minimum Refresh Recovery Delay Time 4 (tRFC4min) in MTB units: %d",
@@ -1426,7 +1426,7 @@ class decoder<DDR4, BASE_CNFG, R> : public base_cnfg_decoder
right_aligned_insert(l_buffer, l_tfawmin_msn, l_tfawmin_lsb);
// Update output only after check passes
- FAPI_TRY( check::max_timing_range<BITS12>(iv_target, l_buffer, TFAWMIN));
+ FAPI_TRY( check::max_timing_range<BITS12>(iv_target, l_buffer, R, TFAWMIN));
o_value = l_buffer;
FAPI_INF("%s. Minimum Four Activate Window Delay Time (tFAWmin) in MTB units: %d",
diff --git a/src/import/generic/memory/lib/spd/spd_checker.H b/src/import/generic/memory/lib/spd/spd_checker.H
index 0b2a33076..50e6ef347 100644
--- a/src/import/generic/memory/lib/spd/spd_checker.H
+++ b/src/import/generic/memory/lib/spd/spd_checker.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2017 */
+/* Contributors Listed Below - COPYRIGHT 2017,2019 */
/* [+] Evan Lojewski */
/* [+] International Business Machines Corp. */
/* */
@@ -103,17 +103,20 @@ namespace check
/// @tparam TT defaulted to bitRangeTraits<TB>
/// @param[in] i_target fapi2 target
/// @param[in] i_timing the timing value
+/// @param[in] i_rev the SPD revision that needs to be checked
/// @param[in] i_ffdc ffdc function code
/// @return FAPI2_RC_SUCCESS iff okay
///
template < bit_len BL, fapi2::TargetType T, typename TT = bitRangeTraits<BL> >
fapi2::ReturnCode max_timing_range(const fapi2::Target<T>& i_target,
const int64_t i_timing,
+ const rev i_rev,
const generic_ffdc_codes i_ffdc)
{
FAPI_ASSERT( (i_timing <= TT::UPPER_BOUND) &&
(i_timing >= TT::LOWER_BOUND),
fapi2::MSS_SPD_TIMING_FAIL()
+ .set_FAILED_REVISION(i_rev)
.set_FUNCTION_CODE(i_ffdc)
.set_TARGET(i_target),
"Failed timing parameter check for %s",
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 4df0eeb06..c1c51cd87 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
@@ -164,7 +164,7 @@ fapi2::ReturnCode is_vpd_config_supported( const fapi2::Target<TT::VPD_TARGET_TY
set_MAX(VPD_KW_MAX).
set_ACTUAL(io_vpd_info.iv_size).
set_KEYWORD(VPD_BLOB).
- set_MCS_TARGET(i_target),
+ set_VPD_TARGET(i_target),
"VPD MR keyword size retrieved: %d, is larger than max: %d for %s",
io_vpd_info.iv_size, TT::VPD_KEYWORD_MAX, 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 3b2f7ded9..11256000a 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
@@ -563,7 +563,7 @@ inline fapi2::ReturnCode limit_freq_by_mrw(const fapi2::Target<TT::FREQ_TARGET_T
fapi2::MSS_MAX_FREQ_ATTR_SIZE_CHANGED()
.set_ACTUAL_SIZE(i_max_mrw_freqs.size())
.set_SUPPOSED_SIZE(NUM_MAX_FREQS)
- .set_MCA_TARGET(i_target),
+ .set_PORT_TARGET(i_target),
"%s Incorrect number of max frequencies in attribute for (%d)",
mss::c_str(i_target),
i_max_mrw_freqs.size());
diff --git a/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist.H b/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist.H
index 6ac15c3c3..2fbe18d25 100644
--- a/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist.H
+++ b/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist.H
@@ -2128,6 +2128,9 @@ class program
///
inline fapi2::ReturnCode process_errors( const fapi2::Target<T> i_target ) const
{
+ // MCBIST error traits
+ using ET = mcbistMCTraits<DEFAULT_MC_TYPE>;
+
// Until reading the error array is documented, comparison errors 'just' result in
// a flag indicating there was a problem on port.
{
@@ -2144,8 +2147,8 @@ class program
l_data.extractToRight<TT::SUBTEST_NUM_INDICATOR, TT::SUBTEST_NUM_INDICATOR_LEN>(l_subtest);
FAPI_ASSERT( l_port == 0,
- fapi2::MSS_MEMDIAGS_COMPARE_ERROR_IN_LAST_PATTERN()
- .set_MCBIST_TARGET(i_target)
+ ET::memdiags_compare_error_in_last_pattern()
+ .set_MC_TARGET(i_target)
.set_PORT(mss::first_bit_set(l_port))
.set_SUBTEST(l_subtest),
"%s MCBIST error on port %d subtest %d", mss::c_str(i_target), mss::first_bit_set(l_port), l_subtest );
@@ -2160,8 +2163,8 @@ class program
FAPI_TRY( fapi2::getScom(i_target, TT::SRERR1_REG, l_read1), "%s Failed getScom", mss::c_str(i_target) );
FAPI_ASSERT( ((l_read0 == 0) && (l_read1 == 0)),
- fapi2::MSS_MEMDIAGS_ERROR_IN_LAST_PATTERN()
- .set_MCBIST_TARGET(i_target)
+ ET::memdiags_error_in_last_pattern()
+ .set_MC_TARGET(i_target)
.set_STATUS0(l_read0)
.set_STATUS1(l_read1),
"%s MCBIST scrub/read error reg0: 0x%016lx reg1: 0x%016lx", mss::c_str(i_target), l_read0, l_read1 );
@@ -3477,6 +3480,7 @@ fapi2::ReturnCode read_rb_array(const fapi2::Target<T>& i_target,
template< mss::mc_type MC = DEFAULT_MC_TYPE, fapi2::TargetType T, typename TT = mcbistTraits<MC, T> >
fapi2::ReturnCode poll( const fapi2::Target<T>& i_target, const program<MC>& i_program )
{
+ using ET = mss::mcbistMCTraits<MC>;
fapi2::buffer<uint64_t> l_status;
const uint64_t l_done = fapi2::buffer<uint64_t>().setBit<TT::MCBIST_DONE>();
@@ -3500,7 +3504,7 @@ fapi2::ReturnCode poll( const fapi2::Target<T>& i_target, const program<MC>& i_p
// Check to see if we're still in progress - meaning we timed out.
FAPI_ASSERT((l_status & l_in_progress) != l_in_progress,
- fapi2::MSS_MCBIST_TIMEOUT().set_MCBIST_TARGET(i_target),
+ ET::mcbist_timeout().set_MC_TARGET(i_target),
"MCBIST timed out %s", mss::c_str(i_target));
// The control register has a bit for done-and-happy and a bit for done-and-unhappy
@@ -3513,8 +3517,8 @@ fapi2::ReturnCode poll( const fapi2::Target<T>& i_target, const program<MC>& i_p
// If we're here there were no errors, but lets report if the fail bit was set anyway.
FAPI_ASSERT( (l_status & l_fail) != l_fail,
- fapi2::MSS_MCBIST_UNKNOWN_FAILURE()
- .set_MCBIST_TARGET(i_target)
+ ET::mcbist_unknown_failure()
+ .set_MC_TARGET(i_target)
.set_STATUS_REGISTER(l_status),
"%s MCBIST reported a fail, but process_errors didn't find it 0x%016llx",
mss::c_str(i_target), l_status );
@@ -3524,8 +3528,8 @@ fapi2::ReturnCode poll( const fapi2::Target<T>& i_target, const program<MC>& i_p
}
FAPI_ASSERT(false,
- fapi2::MSS_MCBIST_DATA_FAIL()
- .set_MCBIST_TARGET(i_target)
+ ET::mcbist_data_fail()
+ .set_MC_TARGET(i_target)
.set_STATUS_REGISTER(l_status),
"%s MCBIST executed but we got corrupted data in the control register 0x%016llx",
mss::c_str(i_target), l_status );
@@ -3563,7 +3567,7 @@ fapi_try_exit:
/// @param[in] i_program the mcbist program to execute
/// @return fapi2::ReturnCode, FAPI2_RC_SUCCESS iff OK
///
-template< mss::mc_type MC = DEFAULT_MC_TYPE, fapi2::TargetType T, typename TT = mcbistTraits<MC, T> >
+template< mss::mc_type MC = DEFAULT_MC_TYPE, fapi2::TargetType T, typename TT = mcbistTraits<MC, T>, typename ET = mcbistMCTraits<MC> >
fapi2::ReturnCode execute( const fapi2::Target<T>& i_target, const program<MC>& i_program )
{
fapi2::buffer<uint64_t> l_status;
@@ -3576,7 +3580,7 @@ fapi2::ReturnCode execute( const fapi2::Target<T>& i_target, const program<MC>&
// Before we go off into the bushes, lets see if there are any instructions in the
// program. If not, we can save everyone the hassle
FAPI_ASSERT(0 != i_program.iv_subtests.size(),
- fapi2::MSS_MEMDIAGS_NO_MCBIST_SUBTESTS().set_MCBIST_TARGET(i_target),
+ fapi2::MSS_MEMDIAGS_NO_MCBIST_SUBTESTS().set_MC_TARGET(i_target),
"Attempt to run an MCBIST program with no subtests on %s", mss::c_str(i_target));
FAPI_TRY( clear_error_helper<MC>(i_target, const_cast<program<MC>&>(i_program)) );
@@ -3625,7 +3629,7 @@ fapi2::ReturnCode execute( const fapi2::Target<T>& i_target, const program<MC>&
// So we've either run/are running or we timed out waiting for the start.
FAPI_ASSERT( l_poll_result == true,
- fapi2::MSS_MEMDIAGS_MCBIST_FAILED_TO_START().set_MCBIST_TARGET(i_target),
+ ET::memdiags_failed_to_start().set_MC_TARGET(i_target),
"The MCBIST engine failed to start its program" );
// If the user asked for async mode, we can leave. Otherwise, poll and check for errors
diff --git a/src/import/generic/memory/lib/utils/mcbist/gen_mss_memdiags.H b/src/import/generic/memory/lib/utils/mcbist/gen_mss_memdiags.H
index 7464675a5..33a3156f3 100644
--- a/src/import/generic/memory/lib/utils/mcbist/gen_mss_memdiags.H
+++ b/src/import/generic/memory/lib/utils/mcbist/gen_mss_memdiags.H
@@ -226,6 +226,7 @@ fapi2::ReturnCode stop( const fapi2::Target<T>& i_target )
{
// Too long, make shorter
using TT = mss::mcbistTraits<MC, T>;
+ using ET = mss::mcbistMCTraits<MC>;
// Poll parameters are defined as TK so that we wait a nice time for operations
// For now use the defaults
@@ -257,8 +258,8 @@ fapi2::ReturnCode stop( const fapi2::Target<T>& i_target )
// So we've either stopped or we timed out
FAPI_ASSERT( l_poll_result == true,
- fapi2::MSS_MEMDIAGS_MCBIST_FAILED_TO_STOP()
- .set_MCBIST_TARGET(i_target)
+ ET::memdiags_failed_to_stop()
+ .set_MC_TARGET(i_target)
.set_POLL_COUNT(l_poll_parameters.iv_poll_count),
"%s The MCBIST engine failed to stop its program",
mss::c_str(i_target) );
@@ -448,6 +449,7 @@ fapi_try_exit:
template< mss::mc_type MC, fapi2::TargetType T, typename TT >
inline fapi2::ReturnCode operation<MC, T, TT>::single_port_init()
{
+ using ET = mcbistMCTraits<MC>;
FAPI_INF("single port init for %s", mss::c_str(iv_target));
const uint64_t l_relative_port_number = iv_const.iv_start_address.get_port();
@@ -455,10 +457,10 @@ inline fapi2::ReturnCode operation<MC, T, TT>::single_port_init()
// Make sure the specificed port is functional
FAPI_ASSERT( mss::is_functional<TT::PORT_TYPE>(iv_target, l_relative_port_number),
- fapi2::MSS_MEMDIAGS_PORT_NOT_FUNCTIONAL()
+ ET::memdiags_port_not_functional()
.set_RELATIVE_PORT_POSITION(l_relative_port_number)
.set_ADDRESS( uint64_t(iv_const.iv_start_address) )
- .set_MCBIST_TARGET(iv_target),
+ .set_MC_TARGET(iv_target),
"Port with relative postion %d is not functional for %s",
l_relative_port_number, mss::c_str(iv_target));
@@ -846,6 +848,7 @@ template< mss::mc_type MC = DEFAULT_MC_TYPE, fapi2::TargetType T >
fapi2::ReturnCode sf_init( const fapi2::Target<T>& i_target,
const uint64_t i_pattern = PATTERN_0 )
{
+ using ET = mss::mcbistMCTraits<MC>;
FAPI_INF("superfast init start for %s", mss::c_str(i_target));
uint8_t l_sim = false;
@@ -866,7 +869,7 @@ fapi2::ReturnCode sf_init( const fapi2::Target<T>& i_target,
sf_init_operation<MC> l_init_op(i_target, l_const, l_rc);
FAPI_ASSERT( l_rc == fapi2::FAPI2_RC_SUCCESS,
- fapi2::MSS_MEMDIAGS_SUPERFAST_INIT_FAILED_TO_INIT().set_MCBIST_TARGET(i_target),
+ ET::memdiags_sf_init_failed_init().set_MC_TARGET(i_target),
"Unable to initialize the MCBIST engine for a sf read %s", mss::c_str(i_target) );
return l_init_op.execute();
@@ -901,6 +904,7 @@ fapi2::ReturnCode sf_read( const fapi2::Target<T>& i_target,
const end_boundary i_end = end_boundary::STOP_AFTER_SLAVE_RANK,
const mss::mcbist::address& i_end_address = mss::mcbist::address(TT::LARGEST_ADDRESS) )
{
+ using ET = mss::mcbistMCTraits<MC>;
FAPI_INF("superfast read - start for %s", mss::c_str(i_target));
fapi2::ReturnCode l_rc;
@@ -908,7 +912,7 @@ fapi2::ReturnCode sf_read( const fapi2::Target<T>& i_target,
sf_read_operation<MC> l_read_op(i_target, l_const, l_rc);
FAPI_ASSERT( l_rc == fapi2::FAPI2_RC_SUCCESS,
- fapi2::MSS_MEMDIAGS_SUPERFAST_READ_FAILED_TO_INIT().set_MCBIST_TARGET(i_target),
+ ET::memdiags_sf_init_failed_init().set_MC_TARGET(i_target),
"Unable to initialize the MCBIST engine for a sf read %s", mss::c_str(i_target) );
return l_read_op.execute();
@@ -936,6 +940,7 @@ fapi2::ReturnCode background_scrub( const fapi2::Target<T>& i_target,
const speed i_speed,
const mss::mcbist::address& i_address )
{
+ using ET = mss::mcbistMCTraits<MC>;
FAPI_INF("continuous (background) scrub for %s", mss::c_str(i_target));
fapi2::ReturnCode l_rc;
@@ -943,7 +948,7 @@ fapi2::ReturnCode background_scrub( const fapi2::Target<T>& i_target,
continuous_scrub_operation<MC> l_op(i_target, l_const, l_rc);
FAPI_ASSERT( l_rc == fapi2::FAPI2_RC_SUCCESS,
- fapi2::MSS_MEMDIAGS_CONTINUOUS_SCRUB_FAILED_TO_INIT().set_MCBIST_TARGET(i_target),
+ ET::memdiags_continuous_scrub_failed_init().set_MC_TARGET(i_target),
"Unable to initialize the MCBIST engine for a continuous scrub %s", mss::c_str(i_target) );
return l_op.execute();
@@ -974,6 +979,7 @@ fapi2::ReturnCode targeted_scrub( const fapi2::Target<T>& i_target,
const mss::mcbist::address& i_end_address,
const end_boundary i_end )
{
+ using ET = mss::mcbistMCTraits<MC>;
FAPI_INF("targeted scrub for %s", mss::c_str(i_target));
fapi2::ReturnCode l_rc;
@@ -981,7 +987,7 @@ fapi2::ReturnCode targeted_scrub( const fapi2::Target<T>& i_target,
targeted_scrub_operation<MC> l_op(i_target, l_const, l_rc);
FAPI_ASSERT( l_rc == fapi2::FAPI2_RC_SUCCESS,
- fapi2::MSS_MEMDIAGS_TARGETED_SCRUB_FAILED_TO_INIT().set_MCBIST_TARGET(i_target),
+ ET::memdiags_targeted_scrub_failed_init().set_MC_TARGET(i_target),
"Unable to initialize the MCBIST engine for a targeted scrub %s", mss::c_str(i_target) );
return l_op.execute();
@@ -1010,6 +1016,7 @@ fapi2::ReturnCode continue_cmd( const fapi2::Target<T>& i_target,
{
// Too long, make shorter
using TT = mss::mcbistTraits<MC, T>;
+ using ET = mss::mcbistMCTraits<MC>;
// We can use a local mcbist::program to help with the bit processing, and then write just the registers we touch.
mss::mcbist::program<MC> l_program;
@@ -1067,7 +1074,7 @@ fapi2::ReturnCode continue_cmd( const fapi2::Target<T>& i_target,
};
FAPI_ASSERT( l_stopped_at_boundary == false,
- fapi2::MSS_MEMDIAGS_ALREADY_AT_BOUNDARY().set_MCBIST_TARGET(i_target).set_BOUNDARY(i_stop),
+ ET::memdiags_already_at_boundary().set_MC_TARGET(i_target).set_BOUNDARY(i_stop),
"Asked to stop at a boundary, but we're already there" );
// Ok, if we're here either we need to change the stop and boundary conditions.
@@ -1118,6 +1125,7 @@ fapi_try_exit:
template< mss::mc_type MC = DEFAULT_MC_TYPE, fapi2::TargetType T, typename TT = mcbistTraits<MC, T> >
fapi2::ReturnCode mss_scrub_helper(const fapi2::Target<T>& i_target )
{
+ using ET = mss::mcbistMCTraits<MC>;
FAPI_INF("Start mss_scrub_helper for %s", mss::c_str(i_target));
// If there are no DIMM we don't need to bother. In fact, we can't as we didn't setup
@@ -1183,7 +1191,7 @@ fapi2::ReturnCode mss_scrub_helper(const fapi2::Target<T>& i_target )
l_probes);
FAPI_ASSERT( l_poll_results == true,
- fapi2::MSS_MEMDIAGS_SUPERFAST_INIT_FAILED_TO_INIT().set_MCBIST_TARGET(i_target),
+ ET::memdiags_sf_init_failed_init().set_MC_TARGET(i_target),
"p9_mss_scrub (init) timedout %s", mss::c_str(i_target) );
// Unmask firs after memdiags and turn off FIFO mode
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 08a7ef84a..af5fb64f0 100644
--- a/src/import/generic/procedures/xml/error_info/generic_error.xml
+++ b/src/import/generic/procedures/xml/error_info/generic_error.xml
@@ -68,6 +68,27 @@
</hwpError>
<hwpError>
+ <rc>RC_MSS_FAILED_SPD_REVISION_FALLBACK</rc>
+ <description>
+ Unable to fall back SPD decoder to the highest decoded
+ revision. Most likely a programming error.
+ </description>
+ <ffdc>FAILED_REVISION</ffdc>
+ <ffdc>FUNCTION_CODE</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ <callout>
+ <target>TARGET</target>
+ <priority>MEDIUM</priority>
+ </callout>
+ <deconfigure>
+ <target>TARGET</target>
+ </deconfigure>
+ </hwpError>
+
+ <hwpError>
<rc>RC_MSS_FREQ_CL_EXCEEDS_TAA_MAX</rc>
<description>
Calculated Cas Latency exceeds JEDEC value for TAA Max
@@ -129,6 +150,17 @@
</hwpError>
<hwpError>
+ <rc>RC_MSS_FREQ_INDEX_TOO_LARGE</rc>
+ <description>Error calculating the index into max_freq array</description>
+ <ffdc>INDEX</ffdc>
+ <ffdc>NUM_MAX_FREQS</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
<rc>RC_MSS_FREQ_INVALID_CALCULATED_TCK</rc>
<description>
Invalid value clock period (less than equal 0).
@@ -204,6 +236,18 @@
</callout>
</hwpError>
+ <hwpError>
+ <rc>RC_MSS_INVALID_CAST_CALC_NCK</rc>
+ <description>Invalid cast or calculation for calc_nck</description>
+ <ffdc>TIMING_PS</ffdc>
+ <ffdc>NCK_NS</ffdc>
+ <ffdc>CORRECTION_FACTOR</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
<hwpError>
<rc>RC_MSS_INVALID_CLOCK_PERIOD</rc>
<description>
@@ -216,17 +260,144 @@
</callout>
</hwpError>
-<hwpError>
- <rc>RC_MSS_INVALID_FREQUENCY</rc>
- <description>
- An invalid frequency was passed to frequency to clock period
- </description>
- <ffdc>FREQ</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
-</hwpError>
+ <hwpError>
+ <rc>RC_MSS_INVALID_DB_MDQ_DRIVE_STRENGTH</rc>
+ <description>
+ Bad SPD data for bytes 145 - 147.
+ Reserved settings for data buffer MDQ drive strength received.
+ This could be code problem (decoding) or bad SPD.
+ </description>
+ <ffdc>DATA_RATE</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ <callout>
+ <target>TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>TARGET</target>
+ </deconfigure>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_INVALID_DIMM_SPEED</rc>
+ <description>
+ Invalid DIMM speed received. Possibly a programming error.
+ </description>
+ <ffdc>DIMM_SPEED</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ <callout>
+ <target>TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>TARGET</target>
+ </deconfigure>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_INVALID_DIMM_TYPE</rc>
+ <description>
+ Received a DIMM type unsupported by the SPD decoder factory
+ </description>
+ <ffdc>DIMM_TYPE</ffdc>
+ <ffdc>FUNCTION</ffdc>
+ <callout>
+ <procedure>MEMORY_PLUGGING_ERROR</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ <callout>
+ <target>DIMM_TARGET</target>
+ <priority>LOW</priority>
+ </callout>
+ <deconfigure>
+ <target>DIMM_TARGET</target>
+ </deconfigure>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_INVALID_DRAM_GEN</rc>
+ <description>
+ Received a DRAM gen unsupported by the SPD decoder factory
+ </description>
+ <ffdc>DRAM_GEN</ffdc>
+ <ffdc>FUNCTION</ffdc>
+ <callout>
+ <procedure>MEMORY_PLUGGING_ERROR</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ <callout>
+ <target>DIMM_TARGET</target>
+ <priority>LOW</priority>
+ </callout>
+ <deconfigure>
+ <target>DIMM_TARGET</target>
+ </deconfigure>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_INVALID_FREQUENCY</rc>
+ <description>
+ An invalid frequency was passed to frequency to clock period
+ </description>
+ <ffdc>FREQ</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_INVALID_FREQ_LIST_PASSED</rc>
+ <description>
+ Wrong size vector passed into frequency scoreboard function
+ </description>
+ <ffdc>SIZE</ffdc>
+ <ffdc>EXPECTED</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_INVALID_HYBRID_MODULE</rc>
+ <description>
+ Received an invalid or unsupported hybrid media (SPD byte 3, bits [6:4])
+ for a specified hybrid modue (SPD byte 3, bit [7])
+ </description>
+ <ffdc>HYBRID</ffdc>
+ <ffdc>HYBRID_MEDIA</ffdc>
+ <ffdc>FUNCTION</ffdc>
+ <callout>
+ <procedure>MEMORY_PLUGGING_ERROR</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ <callout>
+ <target>TARGET</target>
+ <priority>LOW</priority>
+ </callout>
+ <deconfigure>
+ <target>TARGET</target>
+ </deconfigure>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ </hwpError>
<hwpError>
<rc>RC_MSS_INVALID_PORT_INDEX_PASSED</rc>
@@ -254,6 +425,47 @@
</hwpError>
<hwpError>
+ <rc>RC_MSS_INVALID_SPD_PARAMETER_RECEIVED</rc>
+ <description>
+ Unable to fall back SPD decoder to the highest decoded
+ revision. Most likely a programming error.
+ </description>
+ <ffdc>SPD_PARAM</ffdc>
+ <ffdc>FUNCTION_CODE</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ <callout>
+ <target>TARGET</target>
+ <priority>MEDIUM</priority>
+ </callout>
+ <deconfigure>
+ <target>TARGET</target>
+ </deconfigure>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_INVALID_SPD_RESERVED_BITS</rc>
+ <description>
+ Invalid SPD reserved bits received.
+ This could be code problem (decoding) or bad SPD.
+ </description>
+ <ffdc>FUNCTION_CODE</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ <callout>
+ <target>TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>TARGET</target>
+ </deconfigure>
+ </hwpError>
+
+ <hwpError>
<rc>RC_MSS_INVALID_TIMING_VALUE</rc>
<description>Invalid value calculated for timing value based on MTB and FTB from SPD.</description>
<ffdc>VALUE</ffdc>
@@ -270,6 +482,36 @@
</gard>
</hwpError>
+ <hwpError>
+ <rc>RC_MSS_INVALID_VPD_FREQ_LIST_PASSED</rc>
+ <description>
+ Wrong size vector passed into limit_freq_by_vpd function
+ </description>
+ <ffdc>SIZE</ffdc>
+ <ffdc>EXPECTED</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_INVALID_VPD_KEYWORD_MAX</rc>
+ <description>
+ VPD keyword is too big for space allocated for it.
+ </description>
+ <ffdc>MAX</ffdc>
+ <ffdc>ACTUAL</ffdc>
+ <ffdc>KEYWORD</ffdc>
+ <callout>
+ <hw>
+ <hwid>VPD_PART</hwid>
+ <refTarget>VPD_TARGET</refTarget>
+ </hw>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
<hwpError>
<rc>RC_MSS_LOOKUP_FAILED</rc>
<description>
@@ -288,6 +530,16 @@
</hwpError>
<hwpError>
+ <rc>RC_MSS_MEMDIAGS_NO_MCBIST_SUBTESTS</rc>
+ <description>Attempt to run an MCBIST program with no subtests</description>
+ <ffdc>MC_TARGET</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
<rc>RC_MSS_VOLT_WRONG_NUMBER_OF_VOLTAGES</rc>
<description>Incorrect number of voltages supplied to set_voltage_attributes function</description>
<ffdc>VOLT_TARGET</ffdc>
@@ -543,6 +795,21 @@
</callout>
</hwpError>
+ <hwpError>
+ <rc>RC_MSS_MAX_FREQ_ATTR_SIZE_CHANGED</rc>
+ <description>
+ Number of entries for MSS_MRW_MAX_FREQ attribute from VPD has changed without updating the code
+ Asserted because direct accesses to array
+ </description>
+ <ffdc>ACTUAL_SIZE</ffdc>
+ <ffdc>SUPPOSED_SIZE</ffdc>
+ <ffdc>PORT_TARGET</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
<hwpError>
<rc>RC_MSS_CALC_PORT_POWER_EXCEEDS_MAX</rc>
<description>
@@ -570,6 +837,66 @@
</deconfigure>
</hwpError>
+ <hwpError>
+ <rc>RC_MSS_SPD_REV_ENCODING_LEVEL_NOT_SUPPORTED</rc>
+ <description>
+ SPD revision on byte 1 (bits 7~4) has a unsupported encoding level
+ that is greater than the largest decoded SPD decoder. There is
+ no backward compatible revision to fallback to. This could be
+ bad SPD or a programming error.
+ </description>
+ <ffdc>ENCODING_LEVEL</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ <callout>
+ <target>TARGET</target>
+ <priority>MEDIUM</priority>
+ </callout>
+ <deconfigure>
+ <target>TARGET</target>
+ </deconfigure>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_SPD_TIMING_FAIL</rc>
+ <description>
+ Timing SPD parameter failed to meet JEDEC SPD timing
+ bounds. FUNCTION_CODE ffdc field encodes which timing param.
+ </description>
+ <ffdc>FAILED_REVISION</ffdc>
+ <ffdc>FUNCTION_CODE</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ <callout>
+ <target>TARGET</target>
+ <priority>MEDIUM</priority>
+ </callout>
+ <deconfigure>
+ <target>TARGET</target>
+ </deconfigure>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_TOO_MANY_DIMMS_ON_PORT</rc>
+ <description>There seem to be too many dimms on the port</description>
+ <ffdc>DIMM_COUNT</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ <callout>
+ <childTargets>
+ <parent>PORT_TARGET</parent>
+ <childType>TARGET_TYPE_DIMM</childType>
+ </childTargets>
+ <priority>MEDIUM</priority>
+ </callout>
+ </hwpError>
+
<hwpError>
<rc>RC_MSS_SLOT_UTIL_EXCEEDS_PORT</rc>
<description>
OpenPOWER on IntegriCloud