summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2017-06-19 16:00:15 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2017-06-22 10:00:00 -0400
commitd1924a3c11bf3ed92bacd89c4932ecbd57ebb391 (patch)
treea0bf18b52e4bbf5d7f4a3a2800d6e95720c668ef /src
parent676eae6662bdde6195aeba1711bb2a8443ef087b (diff)
downloadtalos-hostboot-d1924a3c11bf3ed92bacd89c4932ecbd57ebb391.tar.gz
talos-hostboot-d1924a3c11bf3ed92bacd89c4932ecbd57ebb391.zip
PRD: make MNFG IPL hard CEs predictive in TPS phase 2
Change-Id: I4d950b0c08e18a5d5c5b02ed6fabfb3951f07325 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42078 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42211 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C21
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C11
2 files changed, 21 insertions, 11 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
index 77a73e83b..5acfc44f5 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
@@ -210,18 +210,25 @@ uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
{
io_sc.service_data->AddSignatureList( trgt, PRDFSIG_MaintHARD_CTE );
- // Query the per-symbol counters for hard CE symbols and make
- // callouts for each failing DIMM. Note that this function creates
- // new error logs for each DIMM with a hard CE.
- D db = static_cast<D>(i_chip->getDataBundle());
- o_rc = db->getIplCeStats()->calloutHardCes(rank);
+ // Query the per-symbol counters for the hard CE symbol.
+ MemUtils::MaintSymbols symData; MemSymbol junk;
+ o_rc = MemUtils::collectCeStats<T>( i_chip, rank, symData, junk );
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC "calloutHardCes(0x%02x) failed",
- rank.getKey() );
+ PRDF_ERR( PRDF_FUNC "MemUtils::collectCeStats(0x%08x,m%ds%d) "
+ "failed", i_chip->GetId(), rank.getMaster(),
+ rank.getSlave() );
break;
}
+ // The command will have finished at the end of the rank so there
+ // may be more than one symbol. Add all to the callout list.
+ for ( auto & s : symData )
+ {
+ MemoryMru memmru ( trgt, rank, s.symbol );
+ io_sc.service_data->SetCallout( memmru );
+ }
+
// Add a TPS procedure to the queue.
TdEntry * e = new TpsEvent<T>{ i_chip, rank };
io_queue.push( e );
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
index c699d163b..8525c47f2 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
@@ -82,13 +82,16 @@ uint32_t TpsEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
//phase 1/2
else
{
- //collect the CE statistics for later analysis use
+ // PHASE_1: Collect soft/intermittent CE for later analysis use.
+ // PHASE_2: Callout all hard CEs.
McaDataBundle * db = getMcaDataBundle( iv_chip );
- o_rc = db->getIplCeStats()->collectStats( iv_rank );
+ o_rc = ( TD_PHASE_1 == iv_phase )
+ ? db->getIplCeStats()->collectStats( iv_rank)
+ : db->getIplCeStats()->calloutHardCes(iv_rank);
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC "collectStats(m%ds%d) failed on 0x%08x",
- iv_rank.getMaster(), iv_rank.getSlave(),
+ PRDF_ERR( PRDF_FUNC "collectStats/calloutHardCes(0x%02x) "
+ "failed on 0x%08x", iv_rank.getKey(),
iv_chip->getHuid() );
break;
}
OpenPOWER on IntegriCloud