summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C
diff options
context:
space:
mode:
authorSachin Gupta <sgupta2m@in.ibm.com>2013-10-16 12:15:47 +0530
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-12-06 10:00:33 -0600
commit9b2e717aaef935f17dff886bd69da18b93e8082c (patch)
tree607966dbe0a608e5cbbc7944ff48dac3ba2f3393 /src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C
parent0f417a36166cfadd60a63120424342445979dbb4 (diff)
downloadtalos-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/plat/pegasus/prdfCenMembuf.C')
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C47
1 files changed, 17 insertions, 30 deletions
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