summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/diag/prdf')
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/mem/prdfMemoryMru.C31
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C5
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C8
3 files changed, 21 insertions, 23 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemoryMru.C b/src/usr/diag/prdf/common/plat/mem/prdfMemoryMru.C
index f4bbe6648..d063caa10 100755
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemoryMru.C
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemoryMru.C
@@ -243,26 +243,29 @@ TargetHandleList MemoryMru::getCalloutList() const
}
else if ( TARGETING::TYPE_MCA == getTargetType(iv_target) )
{
- if ( NO_SPECIAL_CALLOUT != iv_special )
+ if ( CALLOUT_ALL_MEM == iv_special )
{
- switch ( iv_special )
+ o_list = getConnected( iv_target, TYPE_DIMM );
+ }
+ else if ( (CALLOUT_RANK == iv_special) ||
+ (NO_SPECIAL_CALLOUT == iv_special) )
+ {
+ // Rank callouts and symbol callouts both callout a single DIMM.
+ uint32_t ds = iv_rank.getDimmSlct();
+ TargetHandle_t dimm = getConnectedChild( iv_target,
+ TYPE_DIMM, ds );
+ if ( nullptr == dimm )
{
- case CALLOUT_RANK:
- o_list.push_back(getConnectedChild(iv_target, TYPE_DIMM,
- iv_rank.getDimmSlct()) );
- break;
- case CALLOUT_ALL_MEM:
- o_list = getConnected( iv_target, TYPE_DIMM );
- break;
- default:
- PRDF_ERR( PRDF_FUNC "MemoryMruData::Callout 0x%02x not "
- "supported", iv_special );
+ PRDF_ERR( PRDF_FUNC "getConnectedChild(0x%08x,%d) returned "
+ "nullptr", getHuid(iv_target), ds );
}
+ else
+ o_list.push_back( dimm );
}
else
{
- o_list.push_back(getConnectedChild(iv_target, TYPE_DIMM,
- iv_rank.getDimmSlct()) );
+ PRDF_ERR( PRDF_FUNC "MemoryMruData::Callout 0x%02x not "
+ "supported", iv_special );
}
}
else
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C b/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C
index ad442f82d..ebe116431 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C
@@ -189,11 +189,8 @@ uint32_t clearEccFirs<TYPE_MCBIST>( ExtensibleChip * i_chip )
0xf83fffffffffffffull );
if ( SUCCESS != o_rc ) break;
- for ( uint32_t p = 0; p < MAX_PORT_PER_MCBIST; p++ )
+ for ( auto mcaChip : getConnected(i_chip, TYPE_MCA) )
{
- ExtensibleChip * mcaChip = getConnectedChild( i_chip, TYPE_MCA, p );
- if ( nullptr == mcaChip ) continue;
-
// Maintenance AUEs/IAUEs will be reported as system checkstops.
// Maintenance IMPEs will be reported as recoverable attentions at
// all times. Maintence IUEs will be masked during Memory
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
index fbd3526c4..6454ed7fe 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
@@ -384,9 +384,8 @@ uint32_t MemTdCtlr<TYPE_MCBIST>::maskEccAttns()
uint32_t o_rc = SUCCESS;
// Loop through all MCAs.
- for ( uint32_t ps = 0; ps < MAX_PORT_PER_MCBIST; ps++ )
+ for ( auto mcaChip : getConnected(iv_chip, TYPE_MCA) )
{
- ExtensibleChip * mcaChip = getConnectedChild( iv_chip, TYPE_MCA, ps );
SCAN_COMM_REGISTER_CLASS * mask =
mcaChip->getRegister( "MCAECCFIR_MASK_OR" );
@@ -421,9 +420,8 @@ uint32_t MemTdCtlr<TYPE_MCBIST>::unmaskEccAttns()
// thresholded so clear and unmask them as well.
// Loop through all MCAs.
- for ( uint32_t ps = 0; ps < MAX_PORT_PER_MCBIST; ps++ )
+ for ( auto mcaChip : getConnected(iv_chip, TYPE_MCA) )
{
- ExtensibleChip * mcaChip = getConnectedChild( iv_chip, TYPE_MCA, ps );
SCAN_COMM_REGISTER_CLASS * fir =
mcaChip->getRegister( "MCAECCFIR_AND" );
SCAN_COMM_REGISTER_CLASS * mask =
@@ -433,7 +431,7 @@ uint32_t MemTdCtlr<TYPE_MCBIST>::unmaskEccAttns()
// Don't clear the NCE and TCE attentions if specified to save the mask
// in the iv_saveEccMask array.
- if ( !iv_saveEccMask[ps] )
+ if ( !iv_saveEccMask[mcaChip->getPos()%MAX_PORT_PER_MCBIST] )
{
fir->ClearBit(8); mask->ClearBit(8); // Mainline read NCE
fir->ClearBit(9); mask->ClearBit(9); // Mainline read TCE
OpenPOWER on IntegriCloud