diff options
author | Brian Silver <bsilver@us.ibm.com> | 2016-02-25 13:00:11 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-04-01 21:29:47 -0400 |
commit | cf867557080122d913017f1c6ae15fb648af2c38 (patch) | |
tree | ae0457c4269fde184af4e70c0e3725a667897a91 /src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C | |
parent | ba2cdc25cb8894d3899b151b8e2a6c7745ee3e50 (diff) | |
download | talos-hostboot-cf867557080122d913017f1c6ae15fb648af2c38.tar.gz talos-hostboot-cf867557080122d913017f1c6ae15fb648af2c38.zip |
Change draminit_mc mcbist subtest to perform compares rather than ECC
Add checking for failed subtest
Add checking for UE and compare errors
Improve time out error handling
Change-Id: Iedcf3757407c0869d7aeda0d80d5fb6f84566f15
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/21326
Reviewed-by: Louis Stermole <stermole@us.ibm.com>
Tested-by: Jenkins Server
Tested-by: Hostboot CI
Reviewed-by: ANDRE A. MARIN <aamarin@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/21356
Tested-by: FSP CI Jenkins
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C')
-rw-r--r-- | src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C b/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C index c06df116a..c9ad1b4ad 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C @@ -136,6 +136,7 @@ fapi2::ReturnCode execute( const fapi2::Target<TARGET_TYPE_MCBIST>& i_target, static const uint64_t l_done = fapi2::buffer<uint64_t>().setBit<TT::MCBIST_DONE>(); static const uint64_t l_fail = fapi2::buffer<uint64_t>().setBit<TT::MCBIST_FAIL>(); + static const uint64_t l_in_progress = fapi2::buffer<uint64_t>().setBit<TT::MCBIST_IN_PROGRESS>(); fapi2::buffer<uint64_t> l_status; @@ -170,22 +171,35 @@ fapi2::ReturnCode execute( const fapi2::Target<TARGET_TYPE_MCBIST>& i_target, return l_status.getBit<TT::MCBIST_IN_PROGRESS>() != 1; }); + // 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_TARGET_IN_ERROR(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 - if ((l_status & l_done) == l_done) + if ( ((l_status & l_done) == l_done) || ((l_status & l_fail) == l_fail) ) { - FAPI_DBG("MCBIST executed successfully."); - return fapi2::current_err; - } + FAPI_INF("MCBIST completed, processing errors"); - if ((l_status & l_fail) == l_fail) - { - FAPI_DBG("MCBIST failed execution."); - return fapi2::FAPI2_RC_FALSE; + // We're done. It doesn't mean that there were no errors. + FAPI_TRY( i_program.process_errors(i_target) ); + + // 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_TARGET_IN_ERROR(i_target) + .set_STATUS_REGISTER(l_status), + "MCBIST reported a fail, but process_errors didn't find it 0x%016llx", l_status ); + + // And if we're here all is good with the world. + return fapi2::current_err; } - // So something set more than one bit in the control register? - FAPI_DBG("MCBIST executed <shrug>. Something's not good 0x%016llx", l_status); - return fapi2::FAPI2_RC_FALSE; + FAPI_ASSERT(false, + fapi2::MSS_MCBIST_MULTIPLE_FAIL_BITS() + .set_TARGET_IN_ERROR(i_target) + .set_STATUS_REGISTER(l_status), + "MCBIST executed <shrug>. Something's not good 0x%016llx", l_status ); fapi_try_exit: return fapi2::current_err; |