summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2018-05-22 12:49:10 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2018-05-30 11:35:43 -0400
commit47e9c9b12017dcb6b2297d5453241defa438f753 (patch)
tree9ba213181f51ad39d4ff3f523c0795f8c9112c84
parenta8f19539edc57e6d3ffa3b05f2342c649ed23415 (diff)
downloadtalos-hostboot-47e9c9b12017dcb6b2297d5453241defa438f753.tar.gz
talos-hostboot-47e9c9b12017dcb6b2297d5453241defa438f753.zip
PRD: TPS analyzeEccErrors() for Centaur
Change-Id: I4bdc2aa63de4f59a32fbd962a42836e79b9b9601 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59184 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: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59518
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTps.H12
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C40
2 files changed, 35 insertions, 17 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTps.H b/src/usr/diag/prdf/plat/mem/prdfMemTps.H
index 52e8d58bb..3c399953e 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTps.H
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTps.H
@@ -157,18 +157,6 @@ class TpsEvent : public TdEntry
#ifdef __HOSTBOOT_RUNTIME
/**
- * @brief Does isolation for ECC attentions.
- * @param i_eccAttns Mask of all currently active maintenance attentions.
- * See enum MaintEccAttns for values.
- * @param io_sc The step code data struct.
- * @param o_done True if the procedure is complete or has aborted.
- * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
- */
- uint32_t analyzeEcc( const uint32_t & i_eccAttns,
- STEP_CODE_DATA_STRUCT & io_sc,
- bool & o_done );
-
- /**
* @brief Analyzes the counts that summarize the symbol CE counts.
* @param i_badDqCount Number of nibbles with a bad DQ
* @param i_badChipCount Number of nibbles with a bad Chip
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C b/src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C
index be5ffa43c..cd725ccf6 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C
@@ -328,11 +328,11 @@ uint32_t __updateVpdSumAboveOne( CeCount i_sumAboveOneCount,
//------------------------------------------------------------------------------
template <>
-uint32_t TpsEvent<TYPE_MCA>::analyzeEcc( const uint32_t & i_eccAttns,
+uint32_t TpsEvent<TYPE_MCA>::analyzeEccErrors( const uint32_t & i_eccAttns,
STEP_CODE_DATA_STRUCT & io_sc,
bool & o_done )
{
- #define PRDF_FUNC "[TpsEvent<TYPE_MCA>::analyzeEcc] "
+ #define PRDF_FUNC "[TpsEvent<TYPE_MCA>::analyzeEccErrors] "
uint32_t o_rc = SUCCESS;
@@ -1119,10 +1119,10 @@ uint32_t TpsEvent<TYPE_MCA>::analyzePhase( STEP_CODE_DATA_STRUCT & io_sc,
break;
}
- o_rc = analyzeEcc( eccAttns, io_sc, o_done );
+ o_rc = analyzeEccErrors( eccAttns, io_sc, o_done );
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC "analyzeEcc() failed." );
+ PRDF_ERR( PRDF_FUNC "analyzeEccErrors() failed." );
break;
}
if ( o_done ) break;
@@ -1236,6 +1236,28 @@ uint32_t TpsEvent<TYPE_MCA>::startNextPhase( STEP_CODE_DATA_STRUCT & io_sc )
//##############################################################################
template<>
+uint32_t TpsEvent<TYPE_MBA>::analyzeEccErrors( const uint32_t & i_eccAttns,
+ STEP_CODE_DATA_STRUCT & io_sc,
+ bool & o_done )
+{
+ #define PRDF_FUNC "[TpsEvent::analyzeEccErrors] "
+
+ uint32_t o_rc = SUCCESS;
+
+ do
+ {
+ // TODO: handle MPE, RCE ETE, UE, etc.
+
+ } while (0);
+
+ return o_rc;
+
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
+
+template<>
uint32_t TpsEvent<TYPE_MBA>::analyzePhase( STEP_CODE_DATA_STRUCT & io_sc,
bool & o_done )
{
@@ -1257,7 +1279,15 @@ uint32_t TpsEvent<TYPE_MBA>::analyzePhase( STEP_CODE_DATA_STRUCT & io_sc,
break;
}
- // TODO
+ // Analyze the ECC errors (not CEs), if needed.
+ o_rc = analyzeEccErrors( eccAttns, io_sc, o_done );
+ if ( SUCCESS != o_rc )
+ {
+ PRDF_ERR( PRDF_FUNC "analyzeEccErrors() failed on 0x%08x,0x%02x",
+ iv_chip->getHuid(), getKey() );
+ break;
+ }
+ if ( o_done ) break; // abort the procedure.
// Determine if the command stopped on the last address.
bool lastAddr = false;
OpenPOWER on IntegriCloud