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/plat/pegasus/prdfCenMembuf.C | |
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/plat/pegasus/prdfCenMembuf.C')
-rwxr-xr-x | src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C | 47 |
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 ) |