diff options
author | Sachin Gupta <sgupta2m@in.ibm.com> | 2013-10-16 12:15:47 +0530 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-12-06 10:00:33 -0600 |
commit | 9b2e717aaef935f17dff886bd69da18b93e8082c (patch) | |
tree | 607966dbe0a608e5cbbc7944ff48dac3ba2f3393 /src/usr/diag/prdf/common | |
parent | 0f417a36166cfadd60a63120424342445979dbb4 (diff) | |
download | talos-hostboot-9b2e717aaef935f17dff886bd69da18b93e8082c.tar.gz talos-hostboot-9b2e717aaef935f17dff886bd69da18b93e8082c.zip |
PRD: Support scrub UE/CE attentions
Change-Id: I4a6fd6003b48e9c2cc0e806365e75d989712da47
RTC: 87718
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/6689
Tested-by: Jenkins Server
Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com>
Reviewed-by: Christopher T. Phan <cphan@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7488
Diffstat (limited to 'src/usr/diag/prdf/common')
7 files changed, 36 insertions, 171 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule b/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule index 3282af428..269a3fd8c 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule @@ -871,85 +871,15 @@ group gMbsEccFir filter priority(19,41) # UEs highest priority */ (Mba1_MbsEccFir, bit(19)) ? analyzeFetchUe1; - /** MBA0_MBSECCFIR[20] - * Maintenance chip mark on rank 0 + /** MBA0_MBSECCFIR[20:27] + * Maintenance chip mark */ - (Mba0_MbsEccFir, bit(20)) ? analyzeMaintMpe0_0; + (Mba0_MbsEccFir, bit(20|21|22|23|24|25|26|27)) ? defaultMaskedError; - /** MBA1_MBSECCFIR[20] - * Maintenance chip mark on rank 0 + /** MBA1_MBSECCFIR[20:27] + * Maintenance chip mark */ - (Mba1_MbsEccFir, bit(20)) ? analyzeMaintMpe1_0; - - /** MBA0_MBSECCFIR[21] - * Maintenance chip mark on rank 1 - */ - (Mba0_MbsEccFir, bit(21)) ? analyzeMaintMpe0_1; - - /** MBA1_MBSECCFIR[21] - * Maintenance chip mark on rank 1 - */ - (Mba1_MbsEccFir, bit(21)) ? analyzeMaintMpe1_1; - - /** MBA0_MBSECCFIR[22] - * Maintenance chip mark on rank 2 - */ - (Mba0_MbsEccFir, bit(22)) ? analyzeMaintMpe0_2; - - /** MBA1_MBSECCFIR[22] - * Maintenance chip mark on rank 2 - */ - (Mba1_MbsEccFir, bit(22)) ? analyzeMaintMpe1_2; - - /** MBA0_MBSECCFIR[23] - * Maintenance chip mark on rank 3 - */ - (Mba0_MbsEccFir, bit(23)) ? analyzeMaintMpe0_3; - - /** MBA1_MBSECCFIR[23] - * Maintenance chip mark on rank 3 - */ - (Mba1_MbsEccFir, bit(23)) ? analyzeMaintMpe1_3; - - /** MBA0_MBSECCFIR[24] - * Maintenance chip mark on rank 4 - */ - (Mba0_MbsEccFir, bit(24)) ? analyzeMaintMpe0_4; - - /** MBA1_MBSECCFIR[24] - * Maintenance chip mark on rank 4 - */ - (Mba1_MbsEccFir, bit(24)) ? analyzeMaintMpe1_4; - - /** MBA0_MBSECCFIR[25] - * Maintenance chip mark on rank 5 - */ - (Mba0_MbsEccFir, bit(25)) ? analyzeMaintMpe0_5; - - /** MBA1_MBSECCFIR[25] - * Maintenance chip mark on rank 5 - */ - (Mba1_MbsEccFir, bit(25)) ? analyzeMaintMpe1_5; - - /** MBA0_MBSECCFIR[26] - * Maintenance chip mark on rank 6 - */ - (Mba0_MbsEccFir, bit(26)) ? analyzeMaintMpe0_6; - - /** MBA1_MBSECCFIR[26] - * Maintenance chip mark on rank 6 - */ - (Mba1_MbsEccFir, bit(26)) ? analyzeMaintMpe1_6; - - /** MBA0_MBSECCFIR[27] - * Maintenance chip mark on rank 7 - */ - (Mba0_MbsEccFir, bit(27)) ? analyzeMaintMpe0_7; - - /** MBA1_MBSECCFIR[27] - * Maintenance chip mark on rank 7 - */ - (Mba1_MbsEccFir, bit(27)) ? analyzeMaintMpe1_7; + (Mba1_MbsEccFir, bit(20|21|22|23|24|25|26|27)) ? defaultMaskedError; /** MBA0_MBSECCFIR[28:35] * Reserved @@ -1014,12 +944,12 @@ group gMbsEccFir filter priority(19,41) # UEs highest priority /** MBA0_MBSECCFIR[41] * Maintenance UE */ - (Mba0_MbsEccFir, bit(41)) ? analyzeMaintUe0; + (Mba0_MbsEccFir, bit(41)) ? defaultMaskedError; /** MBA1_MBSECCFIR[41] * Maintenance UE */ - (Mba1_MbsEccFir, bit(41)) ? analyzeMaintUe1; + (Mba1_MbsEccFir, bit(41)) ? defaultMaskedError; /** MBA0_MBSECCFIR[42] * MBECCFIR_MPE_DURING_USE_MAINTENANCE_MARK_MODE @@ -1383,60 +1313,6 @@ actionclass analyzeFetchUe0 { funccall("AnalyzeFetchUe0"); threshold1; }; /** Analyze a fetch UE on MBA1 */ actionclass analyzeFetchUe1 { funccall("AnalyzeFetchUe1"); threshold1; }; -/** Analyze a maintenance MPE on MBA0 rank 0 */ -actionclass analyzeMaintMpe0_0 { funccall("AnalyzeMaintMpe0_0"); }; - -/** Analyze a maintenance MPE on MBA1 rank 0 */ -actionclass analyzeMaintMpe1_0 { funccall("AnalyzeMaintMpe1_0"); }; - -/** Analyze a maintenance MPE on MBA0 rank 1 */ -actionclass analyzeMaintMpe0_1 { funccall("AnalyzeMaintMpe0_1"); }; - -/** Analyze a maintenance MPE on MBA1 rank 1 */ -actionclass analyzeMaintMpe1_1 { funccall("AnalyzeMaintMpe1_1"); }; - -/** Analyze a maintenance MPE on MBA0 rank 2 */ -actionclass analyzeMaintMpe0_2 { funccall("AnalyzeMaintMpe0_2"); }; - -/** Analyze a maintenance MPE on MBA1 rank 2 */ -actionclass analyzeMaintMpe1_2 { funccall("AnalyzeMaintMpe1_2"); }; - -/** Analyze a maintenance MPE on MBA0 rank 3 */ -actionclass analyzeMaintMpe0_3 { funccall("AnalyzeMaintMpe0_3"); }; - -/** Analyze a maintenance MPE on MBA1 rank 3 */ -actionclass analyzeMaintMpe1_3 { funccall("AnalyzeMaintMpe1_3"); }; - -/** Analyze a maintenance MPE on MBA0 rank 4 */ -actionclass analyzeMaintMpe0_4 { funccall("AnalyzeMaintMpe0_4"); }; - -/** Analyze a maintenance MPE on MBA1 rank 4 */ -actionclass analyzeMaintMpe1_4 { funccall("AnalyzeMaintMpe1_4"); }; - -/** Analyze a maintenance MPE on MBA0 rank 5 */ -actionclass analyzeMaintMpe0_5 { funccall("AnalyzeMaintMpe0_5"); }; - -/** Analyze a maintenance MPE on MBA1 rank 5 */ -actionclass analyzeMaintMpe1_5 { funccall("AnalyzeMaintMpe1_5"); }; - -/** Analyze a maintenance MPE on MBA0 rank 6 */ -actionclass analyzeMaintMpe0_6 { funccall("AnalyzeMaintMpe0_6"); }; - -/** Analyze a maintenance MPE on MBA1 rank 6 */ -actionclass analyzeMaintMpe1_6 { funccall("AnalyzeMaintMpe1_6"); }; - -/** Analyze a maintenance MPE on MBA0 rank 7 */ -actionclass analyzeMaintMpe0_7 { funccall("AnalyzeMaintMpe0_7"); }; - -/** Analyze a maintenance MPE on MBA1 rank 7 */ -actionclass analyzeMaintMpe1_7 { funccall("AnalyzeMaintMpe1_7"); }; - -/** Analyze a maintenance UE on MBA0 */ -actionclass analyzeMaintUe0 { funccall("AnalyzeMaintUe0"); threshold1; }; - -/** Analyze a maintenance UE on MBA1 */ -actionclass analyzeMaintUe1 { funccall("AnalyzeMaintUe1"); threshold1; }; - /** Callout 2nd Level Medium, set SUE generation point */ actionclass callout2ndLvlMedThr1UE { callout2ndLvlMed; threshold1;SUEGenerationPoint; }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaExtraSig.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaExtraSig.H index c90f164c5..3bc185574 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaExtraSig.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaExtraSig.H @@ -45,6 +45,8 @@ PRDR_ERROR_SIGNATURE(MaintHARD_CTE, 0xffff0012, "", "Maintenance HARD CTE"); PRDR_ERROR_SIGNATURE(MaintSOFT_CTE, 0xffff0013, "", "Maintenance SOFT CTE"); PRDR_ERROR_SIGNATURE(MaintINTER_CTE, 0xffff0014, "", "Maintenance INTER CTE"); PRDR_ERROR_SIGNATURE(MaintRETRY_CTE, 0xffff0015, "", "Maintenance RETRY CTE"); +PRDR_ERROR_SIGNATURE(MaintNCE_CTE, 0xffff0016, "", + "Maintenance SOFT/HARD/INTER CTE"); PRDR_ERROR_SIGNATURE(VcmVerified, 0xffff0020, "", "VCM: verified"); PRDR_ERROR_SIGNATURE(VcmFalseAlarm, 0xffff0021, "", "VCM: false alarm"); diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C index 73759314c..58782055b 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C @@ -116,8 +116,7 @@ int32_t CenMbaTdCtlrCommon::cleanupPrevCmd() firand->ClearBit(0); // Maintenance command complete firand->ClearBit(8); // Maintenance command complete (DD1.0 workaround) - int32_t l_rc = firand->Write(); - if ( SUCCESS != l_rc ) + if ( SUCCESS != firand->Write() ) { PRDF_ERR( PRDF_FUNC"Write() failed on MBASPA_AND" ); o_rc = FAIL; @@ -693,6 +692,5 @@ void CenMbaTdCtlrCommon::setTdSignature( STEP_CODE_DATA_STRUCT & io_sc, io_sc.service_data->SetErrorSig( i_sig ); } - } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H index 77ce9a8ab..7f48bc758 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H @@ -166,7 +166,6 @@ class CenMbaTdCtlrCommon virtual int32_t handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc, const CenRank & i_rank, const TdType i_event ) = 0; - protected: // functions /** diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMemUtils.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMemUtils.H index 1b77c607a..d851d8a02 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMemUtils.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMemUtils.H @@ -77,6 +77,7 @@ struct SymbolData }; typedef std::vector<SymbolData> MaintSymbols; + /** * @brief Checks CE stats on a MBA. * @param i_mbaChip MBA chip. @@ -84,16 +85,19 @@ typedef std::vector<SymbolData> MaintSymbols; * @param i_rank Rank for which stat collection will be done. * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. */ -int32_t collectCeStats( ExtensibleChip *i_mbaChip, MaintSymbols &o_maintStats, - const CenRank & i_rank ); +int32_t collectCeStats( ExtensibleChip * i_mbaChip, MaintSymbols & o_maintStats, + const CenRank & i_rank ); + /** * @brief Gets DRAM size for an MBA. * @param i_mbaChip MBA chip. * @param o_size size for a DRAM. * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. */ -int32_t getDramSize( ExtensibleChip *i_mbaChip, uint8_t & o_size ); +int32_t getDramSize( ExtensibleChip * i_mbaChip, uint8_t & o_size ); + +} // end namespace MemUtils -} // namespace MemUtils } // end namespace PRDF + #endif diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C index 18011256c..4a510f5f6 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C @@ -394,7 +394,7 @@ PRDF_PLUGIN_DEFINE( Membuf, checkSpareBit ); * @return SUCCESS */ int32_t AnalyzeMpe( ExtensibleChip * i_membChip, STEP_CODE_DATA_STRUCT & i_sc, - uint32_t i_mbaPos, uint8_t i_rank, bool isFetchError ) + uint32_t i_mbaPos, uint8_t i_rank ) { #define PRDF_FUNC "[AnalyzeMpe] " @@ -415,32 +415,26 @@ int32_t AnalyzeMpe( ExtensibleChip * i_membChip, STEP_CODE_DATA_STRUCT & i_sc, CenMbaDataBundle * mbadb = getMbaDataBundle( mbaChip ); TargetHandle_t mbaTrgt = mbaChip->GetChipHandle(); - // Add address to UE table. - if ( isFetchError ) + CenAddr addr; + l_rc = getCenReadAddr( i_membChip, i_mbaPos, READ_MPE_ADDR, addr ); + if ( SUCCESS != l_rc ) { - CenAddr addr; - l_rc = getCenReadAddr( i_membChip, i_mbaPos, READ_MPE_ADDR, addr ); - if ( SUCCESS != l_rc ) - { - PRDF_ERR( PRDF_FUNC"getCenReadAddr() failed" ); - break; - } - mbadb->iv_ueTable.addEntry( UE_TABLE::FETCH_MPE, addr ); + PRDF_ERR( PRDF_FUNC"getCenReadAddr() failed" ); + break; } - else + + // If the address does not match the rank that reported the attention, + // there are multiple MPE attentions and the address was overwritten. + // In this case, add an invalid dummy address to the UE table. + if ( addr.getRank().getMaster() != i_rank ) { - CenAddr addr; - l_rc = getCenMaintStartAddr( mbaChip, addr ); - if ( SUCCESS != l_rc ) - { - PRDF_ERR( PRDF_FUNC"getCenMaintStartAddr() failed" ); - break; - } - mbadb->iv_ueTable.addEntry( UE_TABLE::SCRUB_MPE, addr ); + addr = CenAddr( i_rank, 0, 0xffffffff, 0xffffffff, 0xffffffff ); } + mbadb->iv_ueTable.addEntry( UE_TABLE::FETCH_MPE, addr ); + // Get the current mark in hardware. - CenRank rank ( i_rank ); + CenRank rank ( addr.getRank() ); CenMark mark; l_rc = mssGetMarkStore( mbaTrgt, rank, mark ); if ( SUCCESS != l_rc ) @@ -1070,16 +1064,9 @@ PLUGIN_FETCH_RCE_PREUE_ERROR( PreUe, 1, false ) int32_t AnalyzeFetchMpe##MBA##_##RANK( ExtensibleChip * i_membChip, \ STEP_CODE_DATA_STRUCT & i_sc ) \ { \ - return AnalyzeMpe( i_membChip, i_sc, MBA, RANK, true ); \ -} \ -PRDF_PLUGIN_DEFINE( Membuf, AnalyzeFetchMpe##MBA##_##RANK ); \ -\ -int32_t AnalyzeMaintMpe##MBA##_##RANK( ExtensibleChip * i_membChip, \ - STEP_CODE_DATA_STRUCT & i_sc ) \ -{ \ - return AnalyzeMpe( i_membChip, i_sc, MBA, RANK, false ); \ + return AnalyzeMpe( i_membChip, i_sc, MBA, RANK ); \ } \ -PRDF_PLUGIN_DEFINE( Membuf, AnalyzeMaintMpe##MBA##_##RANK ); +PRDF_PLUGIN_DEFINE( Membuf, AnalyzeFetchMpe##MBA##_##RANK ); PLUGIN_MEMORY_MPE_ERROR( 0, 0 ) PLUGIN_MEMORY_MPE_ERROR( 0, 1 ) diff --git a/src/usr/diag/prdf/common/prd_pegasus.mk b/src/usr/diag/prdf/common/prd_pegasus.mk index 7f40dc710..f7b2eac4c 100755 --- a/src/usr/diag/prdf/common/prd_pegasus.mk +++ b/src/usr/diag/prdf/common/prd_pegasus.mk @@ -30,7 +30,6 @@ PRDF_RULE_PLUGINS_PEGASUS = \ prdfCenMba.o \ prdfPlatCenMba.o \ prdfCenMembuf.o \ - prdfPlatCenMembuf.o \ prdfP8TodPlugins.o \ prdfCenPll.o |