summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2017-03-31 09:17:33 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2017-04-07 10:54:14 -0400
commit67fc1db3a20f0994b7e74bff665b9601ed140596 (patch)
tree9d4703a9382b312bea8e32bafda4ae1e73bc1a7c /src
parent228beb530edca5dfad960d81e9fb33aa06fac5cc (diff)
downloadtalos-hostboot-67fc1db3a20f0994b7e74bff665b9601ed140596.tar.gz
talos-hostboot-67fc1db3a20f0994b7e74bff665b9601ed140596.zip
PRD: Update IUE threshold to be per DIMM
Change-Id: I3d4dd61d1a0f86bf77afbd0f2d11902d7f681f42 RTC: 165383 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/38711 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: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/38832 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/common/plat/mem/prdfMemEccAnalysis.C37
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H4
2 files changed, 27 insertions, 14 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
index 1cf7ab1af..d2746f138 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
@@ -76,12 +76,13 @@ uint32_t iuePortFail(ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc)
uint32_t o_rc = SUCCESS;
- do
- {
- McaDataBundle * db = getMcaDataBundle( i_chip );
+ McaDataBundle * db = getMcaDataBundle( i_chip );
+ // Loop through all our thresholds
+ for ( auto & th : db->iv_iueTh )
+ {
// If threshold reached
- if ( db->iv_iueTh.thReached(io_sc) )
+ if ( th.second.thReached(io_sc) )
{
// trigger a port fail
// set FARB0[59] - MBA_FARB0Q_CFG_INJECT_PARITY_ERR_CONSTANT and
@@ -92,8 +93,8 @@ uint32_t iuePortFail(ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc)
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Read() FARB0 failed: i_chip=0x%08x",
- i_chip->getHuid() );
- break;
+ i_chip->getHuid() );
+ continue;
}
farb0->SetBit(59);
@@ -104,14 +105,18 @@ uint32_t iuePortFail(ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc)
{
PRDF_ERR( PRDF_FUNC "Write() FARB0 failed: i_chip=0x%08x",
i_chip->getHuid() );
- break;
+ continue;
}
- // reset threshold to prevent issuing multiple port failures on the
- // same port
- db->iv_iueTh.reset();
+ // reset thresholds to prevent issuing multiple port failures on
+ // the same port
+ for ( auto & resetTh : db->iv_iueTh )
+ {
+ resetTh.second.reset();
+ }
+ break;
}
- }while(0);
+ }
return o_rc;
@@ -665,8 +670,16 @@ uint32_t __analyzeIue( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc,
MemoryMru memmru(trgt, rank, MemoryMruData::CALLOUT_RANK);
io_sc.service_data->SetCallout( memmru );
+ uint8_t ds = rank.getDimmSlct();
+
+ // Initialize threshold if it doesn't exist yet
+ if ( 0 == db->iv_iueTh.count(ds) )
+ {
+ db->iv_iueTh[ds] = TimeBasedThreshold( getIueTh() );
+ }
+
// increment the threshold - check if at threshold
- if ( db->iv_iueTh.inc(io_sc) )
+ if ( db->iv_iueTh[ds].inc(io_sc) )
{
// Make the error log predictive
io_sc.service_data->setServiceCall();
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H b/src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H
index b2fb02c32..9dd9f632a 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H
+++ b/src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H
@@ -120,8 +120,8 @@ class McaDataBundle : public DataBundle
/** Threshold table for RCD parity errors. */
TimeBasedThreshold iv_rcdParityTh = TimeBasedThreshold( getRcdParityTh() );
- /** Threshold table for IUEs. */
- TimeBasedThreshold iv_iueTh = TimeBasedThreshold( getIueTh() );
+ /** Threshold table for IUEs. Threshold per DIMM */
+ std::map<uint8_t, TimeBasedThreshold> iv_iueTh;
#endif
};
OpenPOWER on IntegriCloud