summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/plat/pegasus
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/diag/prdf/common/plat/pegasus')
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule140
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaExtraSig.H2
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C4
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H1
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMemUtils.H12
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C47
6 files changed, 36 insertions, 170 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 )
OpenPOWER on IntegriCloud