diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2018-05-22 12:49:10 -0500 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2018-05-30 11:35:43 -0400 |
commit | 47e9c9b12017dcb6b2297d5453241defa438f753 (patch) | |
tree | 9ba213181f51ad39d4ff3f523c0795f8c9112c84 | |
parent | a8f19539edc57e6d3ffa3b05f2342c649ed23415 (diff) | |
download | talos-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.H | 12 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfMemTps_rt.C | 40 |
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; |