summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2018-05-22 00:02:59 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2018-05-30 11:35:47 -0400
commit82083635acda9764104d631f4948c8cf71335d47 (patch)
tree32f30722aa75779337aa60b696ed5c463a1768bb
parent47e9c9b12017dcb6b2297d5453241defa438f753 (diff)
downloadtalos-hostboot-82083635acda9764104d631f4948c8cf71335d47.tar.gz
talos-hostboot-82083635acda9764104d631f4948c8cf71335d47.zip
PRD: TPS analyzeCeStats() for Centaur
Change-Id: Icdd56862d47e0de4c2607eae71cfe9004bdd2fbb Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59185 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/59519 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>
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTps.H6
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C52
2 files changed, 50 insertions, 8 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTps.H b/src/usr/diag/prdf/plat/mem/prdfMemTps.H
index 3c399953e..53c7c85bc 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTps.H
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTps.H
@@ -189,11 +189,11 @@ class TpsEvent : public TdEntry
CeCount & io_singleSymCount, STEP_CODE_DATA_STRUCT & io_sc );
/**
- * @brief Does isolation for CE attentions.
- * @param io_sc The step code data struct.
+ * @brief Analyzes the maintenance CE statistics.
+ * @param io_sc The step code data struct.
* @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
*/
- uint32_t analyzeCe( STEP_CODE_DATA_STRUCT & io_sc );
+ uint32_t analyzeCeStats( STEP_CODE_DATA_STRUCT & io_sc );
#endif // __HOSTBOOT_RUNTIME
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C b/src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C
index cd725ccf6..3c1fe2290 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C
@@ -1042,9 +1042,9 @@ uint32_t TpsEvent<TYPE_MCA>::getSymbolCeCounts( CeCount & io_badDqCount,
//------------------------------------------------------------------------------
template <>
-uint32_t TpsEvent<TYPE_MCA>::analyzeCe( STEP_CODE_DATA_STRUCT & io_sc )
+uint32_t TpsEvent<TYPE_MCA>::analyzeCeStats( STEP_CODE_DATA_STRUCT & io_sc )
{
- #define PRDF_FUNC "[TpsEvent<TYPE_MCA>::analyzeCe] "
+ #define PRDF_FUNC "[TpsEvent<TYPE_MCA>::analyzeCeStats] "
uint32_t o_rc = SUCCESS;
@@ -1128,10 +1128,10 @@ uint32_t TpsEvent<TYPE_MCA>::analyzePhase( STEP_CODE_DATA_STRUCT & io_sc,
if ( o_done ) break;
// Analyze CEs
- o_rc = analyzeCe( io_sc );
+ o_rc = analyzeCeStats( io_sc );
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC "analyzeCe() failed." );
+ PRDF_ERR( PRDF_FUNC "analyzeCeStats() failed." );
break;
}
@@ -1258,6 +1258,26 @@ uint32_t TpsEvent<TYPE_MBA>::analyzeEccErrors( const uint32_t & i_eccAttns,
//------------------------------------------------------------------------------
template<>
+uint32_t TpsEvent<TYPE_MBA>::analyzeCeStats( STEP_CODE_DATA_STRUCT & io_sc )
+{
+ #define PRDF_FUNC "[TpsEvent::analyzeCeStats] "
+
+ uint32_t o_rc = SUCCESS;
+
+ do
+ {
+ // TODO: analyze the CE statistics
+
+ } while (0);
+
+ return o_rc;
+
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
+
+template<>
uint32_t TpsEvent<TYPE_MBA>::analyzePhase( STEP_CODE_DATA_STRUCT & io_sc,
bool & o_done )
{
@@ -1304,7 +1324,29 @@ uint32_t TpsEvent<TYPE_MBA>::analyzePhase( STEP_CODE_DATA_STRUCT & io_sc,
// starting the next phase.
iv_canResumeScrub = !lastAddr;
- // TODO
+ // Analyze the CE statistics if the command has reached the last
+ // address, there were hard CEs on phase 1 or 2, or there were
+ // soft/intermittent CEs on phase 2.
+ if ( lastAddr || (eccAttns & MAINT_HARD_NCE_ETE) ||
+ ((TD_PHASE_2 == iv_phase) && ((eccAttns & MAINT_INT_NCE_ETE) ||
+ (eccAttns & MAINT_SOFT_NCE_ETE) )) )
+ {
+ o_rc = analyzeCeStats( io_sc );
+ if ( SUCCESS != o_rc )
+ {
+ PRDF_ERR( PRDF_FUNC "analyzeCeStats() failed on 0x%08x,0x%02x",
+ iv_chip->getHuid(), getKey() );
+ break;
+ }
+ }
+
+ // If the command reached the last address, the procedure is complete.
+ if ( lastAddr )
+ {
+ o_done = true;
+
+ // TODO: handle false alarm if needed.
+ }
} while (0);
OpenPOWER on IntegriCloud