Skip to content

Commit

Permalink
PRD: Callout row repairs when all repairs used
Browse files Browse the repository at this point in the history
Change-Id: I518c1dc83727d7df71805e268ae71fea04adb799
CQ: SW453829
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/70195
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/70295
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
  • Loading branch information
cnpalmer authored and zane131 committed Jan 16, 2019
1 parent e3ceaa6 commit fba889a
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions src/usr/diag/prdf/common/plat/mem/prdfMemMark.C
Original file line number Diff line number Diff line change
Expand Up @@ -957,6 +957,45 @@ void __addCallout( ExtensibleChip * i_chip, const MemRank & i_rank,

//------------------------------------------------------------------------------

template<TARGETING::TYPE T>
uint32_t __addRowRepairCallout( ExtensibleChip * i_chip,
const MemRank & i_rank,
STEP_CODE_DATA_STRUCT & io_sc )
{
#define PRDF_FUNC "[__addRowRepairCallout] "

uint32_t o_rc = SUCCESS;

// Get the dimms on this rank on either port.
TargetHandleList dimmList = getConnectedDimms( i_chip->getTrgt(), i_rank );

// Check for row repairs on each dimm.
for ( auto const & dimm : dimmList )
{
MemRowRepair rowRepair;
o_rc = getRowRepairData<T>( dimm, i_rank, rowRepair );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "getRowRepairData(0x%08x, 0x%02x)",
PlatServices::getHuid(dimm), i_rank.getKey() );
break;
}

// If the row repair is valid, add it to the callout list.
if ( rowRepair.isValid() )
{
io_sc.service_data->SetCallout( dimm );
}
}

return o_rc;

#undef PRDF_FUNC

}

//------------------------------------------------------------------------------

template<TARGETING::TYPE T>
uint32_t __applyRasPolicies( ExtensibleChip * i_chip, const MemRank & i_rank,
STEP_CODE_DATA_STRUCT & io_sc,
Expand Down Expand Up @@ -1033,6 +1072,16 @@ uint32_t __applyRasPolicies<TYPE_MBA>( ExtensibleChip * i_chip,
__addCallout( i_chip, i_rank, sp1, io_sc );
__addCallout( i_chip, i_rank, ecc, io_sc );

// Add the row repairs to the callout list if they exist
o_rc = __addRowRepairCallout<TARGETING::TYPE_MBA>( i_chip, i_rank,
io_sc );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "__addRowRepairCallout(0x%08x,0x%02x) "
"failed.", i_chip->getHuid(), i_rank.getKey() );
break;
}

// If the chip mark is on a spare then the spare is bad and hardware
// can not steer it to another DRAM even if one is available (e.g.
// the ECC spare). In this this case, make error log predictive.
Expand Down

0 comments on commit fba889a

Please sign in to comment.