summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSachin Gupta <sgupta2m@in.ibm.com>2013-10-21 16:20:14 +0530
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-11-07 15:12:08 -0600
commitd82748d2b7fdb0a783f7bf024bba662ab83a6bb9 (patch)
tree9d8d73730a67bcb2d99ebd731e7ab5af650d329e
parent37dbb4a827b19ba0634b38542c294106e3d70b25 (diff)
downloadtalos-hostboot-d82748d2b7fdb0a783f7bf024bba662ab83a6bb9.tar.gz
talos-hostboot-d82748d2b7fdb0a783f7bf024bba662ab83a6bb9.zip
PRD: Prefetch UE support
Change-Id: I7555a8d7f4a53d0501d4d8c12420773cb58fe895 RTC: 88468 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/6760 Tested-by: Jenkins Server 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/7085
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule19
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C57
2 files changed, 58 insertions, 18 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 26efe8a9e..3282af428 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
@@ -1034,14 +1034,12 @@ group gMbsEccFir filter priority(19,41) # UEs highest priority
/** MBA0_MBSECCFIR[43]
* MBECCFIR_PREFETCH_MEMORY_UE
*/
- #TODO via RTC 47289 ( CE/UE isolation )
- (Mba0_MbsEccFir, bit(43)) ? TBDDefaultCallout;
+ (Mba0_MbsEccFir, bit(43)) ? analyzeFetchPreUe0;
/** MBA1_MBSECCFIR[43]
* MBECCFIR_PREFETCH_MEMORY_UE
*/
- #TODO via RTC 47289 ( CE/UE isolation )
- (Mba1_MbsEccFir, bit(43)) ? TBDDefaultCallout;
+ (Mba1_MbsEccFir, bit(43)) ? analyzeFetchPreUe1;
/** MBA0_MBSECCFIR[44]
* MBECCFIR_MEMORY_RCD_PARITY_ERROR
@@ -1367,14 +1365,17 @@ actionclass analyzeFetchNce0 { funccall("AnalyzeFetchNce0"); };
/** Analyze a fetch NCE on MBA1 */
actionclass analyzeFetchNce1 { funccall("AnalyzeFetchNce1"); };
-# TODO: RTC 23125 The RAS spreadsheet action is RCE is: "Threshold per rank 8/24
-# make a callout of DIMM pair". Needs discussion.
-
/** Analyze a fetch RCE on MBA0 */
-actionclass analyzeFetchRce0 { funccall("AnalyzeFetchRce0"); threshold32pday; };
+actionclass analyzeFetchRce0 { funccall("AnalyzeFetchRce0"); };
/** Analyze a fetch RCE on MBA1 */
-actionclass analyzeFetchRce1 { funccall("AnalyzeFetchRce1"); threshold32pday; };
+actionclass analyzeFetchRce1 { funccall("AnalyzeFetchRce1"); };
+
+/** Analyze a PreFetch Ue on MBA0 */
+actionclass analyzeFetchPreUe0 { funccall("AnalyzeFetchPreUe0"); };
+
+/** Analyze a PreFetch Ue on MBA1 */
+actionclass analyzeFetchPreUe1 { funccall("AnalyzeFetchPreUe1"); };
/** Analyze a fetch UE on MBA0 */
actionclass analyzeFetchUe0 { funccall("AnalyzeFetchUe0"); threshold1; };
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C
index 144b966df..7ae2e4d22 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C
@@ -642,16 +642,18 @@ int32_t AnalyzeFetchNce( ExtensibleChip * i_membChip,
//------------------------------------------------------------------------------
/**
- * @brief MBSECCFIR[17] - Fetch Retry CE (RCE).
+ * @brief Fetch Retry CE / Prefetch UE Errors.
* @param i_membChip A Centaur chip.
* @param i_sc The step code data struct.
* @param i_mbaPos The MBA position.
+ * @param isRceError True for RCE error false otherwise.
* @return SUCCESS
*/
-int32_t AnalyzeFetchRce( ExtensibleChip * i_membChip,
- STEP_CODE_DATA_STRUCT & i_sc, uint32_t i_mbaPos )
+int32_t AnalyzeFetchRcePue( ExtensibleChip * i_membChip,
+ STEP_CODE_DATA_STRUCT & i_sc, uint32_t i_mbaPos,
+ bool isRceError )
{
- #define PRDF_FUNC "[AnalyzeFetchRce] "
+ #define PRDF_FUNC "[AnalyzeFetchRcePue] "
int32_t l_rc = SUCCESS;
@@ -667,19 +669,38 @@ int32_t AnalyzeFetchRce( ExtensibleChip * i_membChip,
l_rc = FAIL; break;
}
+ CenMbaDataBundle * mbadb = getMbaDataBundle( mbaChip );
+
CenAddr addr;
- l_rc = getCenReadAddr( i_membChip, i_mbaPos, READ_RCE_ADDR, addr );
+ if( isRceError )
+ l_rc = getCenReadAddr( i_membChip, i_mbaPos, READ_RCE_ADDR, addr );
+ else
+ l_rc = getCenReadAddr( i_membChip, i_mbaPos, READ_UE_ADDR, addr );
+
if ( SUCCESS != l_rc )
{
PRDF_ERR( PRDF_FUNC"getCenReadAddr() failed" );
break;
}
+ CenRank rank = addr.getRank();
// Callout the rank and the attached MBA.
- MemoryMru memmru ( mbaChip->GetChipHandle(), addr.getRank(),
- MemoryMruData::CALLOUT_RANK_AND_MBA );
+ MemoryMru memmru ( mbaChip->GetChipHandle(), rank,
+ MemoryMruData::CALLOUT_RANK );
i_sc.service_data->SetCallout( memmru );
+ // Add the entry to rce table and take action as per rce table rules.
+ if ( mbadb->iv_rceTable.addEntry( rank , i_sc ))
+ {
+ // Tell TD controller to handle TPS event.
+ l_rc = mbadb->iv_tdCtlr.handleTdEvent( i_sc, rank,
+ CenMbaTdCtlrCommon::TPS_EVENT );
+ if ( SUCCESS != l_rc )
+ {
+ PRDF_ERR( PRDF_FUNC"handleTdEvent() failed." );
+ break;
+ }
+ }
} while (0);
// Add ECC capture data for FFDC.
@@ -1019,13 +1040,31 @@ PRDF_PLUGIN_DEFINE( Membuf, AnalyzeFetch##TYPE##MBA );
PLUGIN_FETCH_ECC_ERROR( Nce, 0 )
PLUGIN_FETCH_ECC_ERROR( Nce, 1 )
-PLUGIN_FETCH_ECC_ERROR( Rce, 0 )
-PLUGIN_FETCH_ECC_ERROR( Rce, 1 )
PLUGIN_FETCH_ECC_ERROR( Ue, 0 )
PLUGIN_FETCH_ECC_ERROR( Ue, 1 )
#undef PLUGIN_FETCH_ECC_ERROR
+// Handling for RCE and prefetch UE is similar.
+// So use common macro and function ( AnalyzeFetchRcePue ).
+
+#define PLUGIN_FETCH_RCE_PREUE_ERROR( TYPE, MBA, IS_RCE ) \
+int32_t AnalyzeFetch##TYPE##MBA( ExtensibleChip * i_membChip, \
+ STEP_CODE_DATA_STRUCT & i_sc ) \
+{ \
+ return AnalyzeFetchRcePue( i_membChip, i_sc, MBA, IS_RCE ); \
+} \
+PRDF_PLUGIN_DEFINE( Membuf, AnalyzeFetch##TYPE##MBA );
+
+// This is bit inefficient. 1st and 3rd arguement have 1 to 1
+// mapping. But to keep macro expansion simple, using extra argument.
+PLUGIN_FETCH_RCE_PREUE_ERROR( Rce, 0, true )
+PLUGIN_FETCH_RCE_PREUE_ERROR( Rce, 1, true )
+PLUGIN_FETCH_RCE_PREUE_ERROR( PreUe, 0, false )
+PLUGIN_FETCH_RCE_PREUE_ERROR( PreUe, 1, false )
+
+#undef PLUGIN_FETCH_RCE_PREUE_ERROR
+
// Define the plugins for memory MPE errors.
#define PLUGIN_MEMORY_MPE_ERROR( MBA, RANK ) \
int32_t AnalyzeFetchMpe##MBA##_##RANK( ExtensibleChip * i_membChip, \
OpenPOWER on IntegriCloud