diff options
author | Caleb Palmer <cnpalmer@us.ibm.com> | 2017-03-31 09:17:33 -0500 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2017-04-07 10:54:14 -0400 |
commit | 67fc1db3a20f0994b7e74bff665b9601ed140596 (patch) | |
tree | 9d4703a9382b312bea8e32bafda4ae1e73bc1a7c /src | |
parent | 228beb530edca5dfad960d81e9fb33aa06fac5cc (diff) | |
download | talos-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.C | 37 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H | 4 |
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 }; |