summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2017-08-17 15:55:39 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2017-08-23 14:55:57 -0400
commit6ab7b4d297dfc07fe524327569b62c8741faee22 (patch)
treec543f044cb6c4620e7ef2e73d66f0221d5753175 /src
parent24221c6d32c1c763b171f9169939f630dda7fc69 (diff)
downloadtalos-hostboot-6ab7b4d297dfc07fe524327569b62c8741faee22.tar.gz
talos-hostboot-6ab7b4d297dfc07fe524327569b62c8741faee22.zip
PRD: don't query per-symbol counters in broadcast mode
Change-Id: I42c8348df5f4b5ae846a2fb7d821d5eb07c3949e Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/44760 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45000 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-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/prdfMemScrubUtils.C3
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.H4
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C34
3 files changed, 22 insertions, 19 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C b/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C
index ebe116431..5e1efccc8 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C
@@ -289,6 +289,8 @@ uint32_t checkEccFirs<TYPE_MCA>( ExtensibleChip * i_chip,
if ( 0 != mcaeccfir->GetBitFieldJustified(20,8) )
o_eccAttns |= MAINT_MPE;
+ if ( mcaeccfir->IsBitSet(28) ) o_eccAttns |= MAINT_NCE;
+ if ( mcaeccfir->IsBitSet(29) ) o_eccAttns |= MAINT_TCE;
if ( mcaeccfir->IsBitSet(30) ) o_eccAttns |= MAINT_SCE;
if ( mcaeccfir->IsBitSet(31) ) o_eccAttns |= MAINT_MCE;
if ( mcaeccfir->IsBitSet(34) ) o_eccAttns |= MAINT_UE;
@@ -354,6 +356,7 @@ uint32_t checkEccFirs<TYPE_MBA>( ExtensibleChip * i_chip,
if ( 0 != mbseccfir->GetBitFieldJustified(20,8) )
o_eccAttns |= MAINT_MPE;
+ if ( mbseccfir->IsBitSet(36) ) o_eccAttns |= MAINT_NCE;
if ( mbseccfir->IsBitSet(37) ) o_eccAttns |= MAINT_SCE;
if ( mbseccfir->IsBitSet(38) ) o_eccAttns |= MAINT_MCE;
if ( mbseccfir->IsBitSet(41) ) o_eccAttns |= MAINT_UE;
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.H b/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.H
index 881a5b1fd..c81c6b4a7 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.H
+++ b/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.H
@@ -126,6 +126,10 @@ enum MaintEccAttns
// Nimbus only
MAINT_IUE = 0x0080, ///< Intermittent UE
MAINT_IMPE = 0x0040, ///< Intermittent chip mark
+
+ // Maintenance CEs
+ MAINT_NCE = 0x0020, ///< CE
+ MAINT_TCE = 0x0010, ///< CE on two symbols (Nimbus only)
};
/**
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
index 64719bf5f..e6d769b6c 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
@@ -190,28 +190,24 @@ uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
}
}
else if ( isMfgCeCheckingEnabled() &&
- (0 != (eccAttns & MAINT_HARD_NCE_ETE)) )
+ (0 != (eccAttns & MAINT_HARD_NCE_ETE)) &&
+ ( (0 != (eccAttns & MAINT_NCE)) ||
+ (0 != (eccAttns & MAINT_TCE)) ) )
{
- io_sc.service_data->AddSignatureList( trgt, PRDFSIG_MaintHARD_CTE );
+ // NOTE: The MAINT_HARD_NCE_ETE attention is reported on the MCBIST.
+ // If the command is run in broadcast mode, we may end up
+ // doing TPS on all four ports when only one port has the CE.
+ // Therefore, we must check for MAINT_NCE or MAINT_TCE, which
+ // are found on the MCA, to determine if this MCA need a TPS
+ // procedure.
- // 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 "MemUtils::collectCeStats(0x%08x,m%ds%d) "
- "failed", i_chip->GetId(), rank.getMaster(),
- rank.getSlave() );
- break;
- }
+ io_sc.service_data->AddSignatureList( trgt, PRDFSIG_MaintHARD_CTE );
- // 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 );
- }
+ // NOTE: Normally we would add each symbol in the per-symbol
+ // counters to the callout list for FFDC, but the results are
+ // a bit undefined in broadcast mode. Since this should not be
+ // a predictive error log, it is fine to have no callouts for
+ // now.
// Add a TPS procedure to the queue.
TdEntry * e = new TpsEvent<T>{ i_chip, rank };
OpenPOWER on IntegriCloud