diff options
author | Stephen Glancy <sglancy@us.ibm.com> | 2019-05-14 12:45:57 -0400 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2019-06-11 12:38:43 -0500 |
commit | 11066067e94b1924b331d6b918b64129dfde5bd2 (patch) | |
tree | b4aba2157636e26e480892fd2781c8b4f452b527 /src | |
parent | 2aaca494ec04b76ae31047ec486f2a371504a5b9 (diff) | |
download | talos-hostboot-11066067e94b1924b331d6b918b64129dfde5bd2.tar.gz talos-hostboot-11066067e94b1924b331d6b918b64129dfde5bd2.zip |
Fixes FFDC for files moved to generic
Change-Id: Ibd639646548cfe0745127419c151a67635e8ae75
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/77343
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Mark Pizzutillo <mark.pizzutillo@ibm.com>
Reviewed-by: Louis Stermole <stermole@us.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/77422
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')
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> |