diff options
Diffstat (limited to 'src/usr/diag/prdf')
-rwxr-xr-x | src/usr/diag/prdf/common/plat/mem/prdfMemoryMru.C | 31 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfMemScrubUtils.C | 5 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C | 8 |
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 |