summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C
diff options
context:
space:
mode:
authorBrian Silver <bsilver@us.ibm.com>2016-02-25 13:00:11 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-04-01 21:29:47 -0400
commitcf867557080122d913017f1c6ae15fb648af2c38 (patch)
treeae0457c4269fde184af4e70c0e3725a667897a91 /src/import/chips/p9/procedures/hwp/memory/lib/mcbist/mcbist.C
parentba2cdc25cb8894d3899b151b8e2a6c7745ee3e50 (diff)
downloadtalos-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.C36
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;
OpenPOWER on IntegriCloud