Skip to content

Commit

Permalink
PRD: Axone Restore DRAM Repairs support
Browse files Browse the repository at this point in the history
Change-Id: I6a705fc2429b1b49b766f72d1ace818ad8b9b87d
RTC: 199034
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/80168
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Benjamen G. Tyner <ben.tyner@ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81058
Reviewed-by: Zane C Shelley <zshelle@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-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 Jul 30, 2019
1 parent 6751459 commit b731bda
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 38 deletions.
2 changes: 1 addition & 1 deletion src/include/usr/diag/prdf/prdfMain_ipl.H
Expand Up @@ -48,7 +48,7 @@ extern errlHndl_t noLock_initialize();

/**
* @brief Restores hardware DRAM repairs to reflect what is stored in VPD.
* @param i_trgt An MBA or MCA target.
* @param i_trgt An MBA, MCA, or OCMB target.
* @return Non-SUCCESS if conditions are such that a callout had to be made,
* SUCCESS otherwise.
*/
Expand Down
4 changes: 2 additions & 2 deletions src/usr/diag/prdf/common/plat/prdfTargetServices.H
Expand Up @@ -321,8 +321,8 @@ TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_trgt,
/**
* @param i_trgt The target MBA, MCA, OCMB_CHIP, or MEM_PORT.
* @param i_rank The target rank.
* @param i_port Port select, only needed for MBA. MCA and MEM_PORT are
* targets equivalent to the port already.
* @param i_port Port select, only needed for MBA and OCMB_CHIP. MCA and
* MEM_PORT are targets equivalent to the port already.
* @return The DIMM connected to the target and rank on a port.
*/
TARGETING::TargetHandle_t getConnectedDimm( TARGETING::TargetHandle_t i_trgt,
Expand Down
87 changes: 56 additions & 31 deletions src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C
Expand Up @@ -171,11 +171,7 @@ void commitSoftError( uint32_t i_reasonCode, TargetHandle_t i_trgt,
//------------------------------------------------------------------------------

template<TARGETING::TYPE T>
bool processRepairedRanks( TargetHandle_t i_trgt, uint8_t i_repairedRankMask );

template<>
bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
uint8_t i_repairedRankMask )
bool processRepairedRanks( TargetHandle_t i_trgt, uint8_t i_repairedRankMask )
{
#define PRDF_FUNC "[processRepairedRanks] "

Expand All @@ -194,7 +190,7 @@ bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
// map value has no significance.
std::map<TargetHandle_t, uint32_t> calloutList;

ExtensibleChip * mcaChip = (ExtensibleChip *)systemPtr->GetChip(i_trgt);
ExtensibleChip * chip = (ExtensibleChip *)systemPtr->GetChip(i_trgt);

for ( uint8_t r = 0; r < MASTER_RANKS_PER_PORT; ++r )
{
Expand All @@ -206,20 +202,18 @@ bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
MemRank rank ( r );

MemMark cm;
if ( SUCCESS != MarkStore::readChipMark<TYPE_MCA>( mcaChip, rank,
cm ) )
if ( SUCCESS != MarkStore::readChipMark<T>( chip, rank, cm ) )
{
PRDF_ERR( PRDF_FUNC "readChipMark<TYPE_MCA>(0x%08x,0x%02x) "
"failed", mcaChip->getHuid(), rank.getKey() );
PRDF_ERR( PRDF_FUNC "readChipMark<T>(0x%08x,0x%02x) "
"failed", chip->getHuid(), rank.getKey() );
continue; // skip this rank
}

MemMark sm;
if ( SUCCESS != MarkStore::readSymbolMark<TYPE_MCA>( mcaChip, rank,
sm ) )
if ( SUCCESS != MarkStore::readSymbolMark<T>( chip, rank, sm ) )
{
PRDF_ERR( PRDF_FUNC "readSymbolMark<TYPE_MCA>(0x%08x,0x%02x) "
"failed", mcaChip->getHuid(), rank.getKey() );
PRDF_ERR( PRDF_FUNC "readSymbolMark<T>(0x%08x,0x%02x) "
"failed", chip->getHuid(), rank.getKey() );
continue; // skip this rank
}

Expand All @@ -229,9 +223,8 @@ bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,

if ( NULL == errl )
{
errl = createErrl<TYPE_MCA>( PRDF_DETECTED_FAIL_HARDWARE,
i_trgt,
PRDFSIG_RdrRepairsUsed );
errl = createErrl<T>( PRDF_DETECTED_FAIL_HARDWARE,
i_trgt, PRDFSIG_RdrRepairsUsed );
}

std::vector<MemSymbol> symList;
Expand Down Expand Up @@ -261,23 +254,31 @@ bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
// Callout all DIMMs in the map.
for ( auto const & dimm : calloutList )
{
__calloutDimm<TYPE_MCA>( errl, i_trgt, dimm.first );
__calloutDimm<T>( errl, i_trgt, dimm.first );
}

// Commit the error log, if needed.
commitErrl<TYPE_MCA>( errl, i_trgt );
commitErrl<T>( errl, i_trgt );

// Commit an additional error log indicating something failed in the
// analysis, if needed.
commitSoftError<TYPE_MCA>( PRDF_DETECTED_FAIL_SOFTWARE, i_trgt,
PRDFSIG_RdrInternalFail, analysisErrors );
commitSoftError<T>( PRDF_DETECTED_FAIL_SOFTWARE, i_trgt,
PRDFSIG_RdrInternalFail, analysisErrors );
}while(0);

return o_calloutMade;

#undef PRDF_FUNC
}


template
bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
uint8_t i_repairedRankMask );
template
bool processRepairedRanks<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt,
uint8_t i_repairedRankMask );

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

template<>
Expand Down Expand Up @@ -407,10 +408,7 @@ bool processRepairedRanks<TYPE_MBA>( TargetHandle_t i_trgt,


template<TARGETING::TYPE T>
bool processBadDimms( TargetHandle_t i_trgt, uint8_t i_badDimmMask );

template<>
bool processBadDimms<TYPE_MCA>( TargetHandle_t i_trgt, uint8_t i_badDimmMask )
bool processBadDimms( TargetHandle_t i_trgt, uint8_t i_badDimmMask )
{
#define PRDF_FUNC "[processBadDimms] "

Expand All @@ -436,29 +434,35 @@ bool processBadDimms<TYPE_MCA>( TargetHandle_t i_trgt, uint8_t i_badDimmMask )
{
if ( NULL == errl )
{
errl = createErrl<TYPE_MCA>( PRDF_DETECTED_FAIL_HARDWARE,
i_trgt, PRDFSIG_RdrRepairUnavail );
errl = createErrl<T>( PRDF_DETECTED_FAIL_HARDWARE,
i_trgt, PRDFSIG_RdrRepairUnavail );
}

__calloutDimm<TYPE_MCA>( errl, i_trgt, dimm );
__calloutDimm<T>( errl, i_trgt, dimm );

o_calloutMade = true;
}
}

// Commit the error log, if needed.
commitErrl<TYPE_MCA>( errl, i_trgt );
commitErrl<T>( errl, i_trgt );

// Commit an additional error log indicating something failed in the
// analysis, if needed.
commitSoftError<TYPE_MCA>( PRDF_DETECTED_FAIL_SOFTWARE, i_trgt,
PRDFSIG_RdrInternalFail, analysisErrors );
commitSoftError<T>( PRDF_DETECTED_FAIL_SOFTWARE, i_trgt,
PRDFSIG_RdrInternalFail, analysisErrors );

return o_calloutMade;

#undef PRDF_FUNC
}

template
bool processBadDimms<TYPE_MCA>( TargetHandle_t i_trgt, uint8_t i_badDimmMask );
template
bool processBadDimms<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt,
uint8_t i_badDimmMask );

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

template<>
Expand Down Expand Up @@ -595,6 +599,25 @@ void deployDramSpares<TYPE_MBA>( TargetHandle_t i_trgt,
}
}

template<>
void deployDramSpares<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt,
const std::vector<MemRank> & i_ranks )
{
for ( auto & rank : i_ranks )
{
MemSymbol sym = MemSymbol::fromSymbol( i_trgt, rank, 71 );

int32_t l_rc = mssSetSteerMux<TYPE_OCMB_CHIP>(i_trgt, rank, sym, false);
if ( SUCCESS != l_rc )
{
// mssSetSteerMux() will print a trace and commit the error log,
// however, we need to handle the return code or we get a compile
// warning in Hostboot.
continue;
}
}
}

} // end namespace RDR

//------------------------------------------------------------------------------
Expand Down Expand Up @@ -695,6 +718,8 @@ template
uint32_t restoreDramRepairs<TYPE_MCA>( TargetHandle_t i_trgt );
template
uint32_t restoreDramRepairs<TYPE_MBA>( TargetHandle_t i_trgt );
template
uint32_t restoreDramRepairs<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt );

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

Expand Down
8 changes: 4 additions & 4 deletions src/usr/diag/prdf/plat/prdfPlatServices_ipl.C
Expand Up @@ -211,9 +211,9 @@ uint32_t mssRestoreDramRepairs<TYPE_MBA>( TargetHandle_t i_target,
//------------------------------------------------------------------------------

template<>
uint32_t mssRestoreDramRepairs<TYPE_MEM_PORT>( TargetHandle_t i_target,
uint8_t & o_repairedRankMask,
uint8_t & o_badDimmMask )
uint32_t mssRestoreDramRepairs<TYPE_OCMB_CHIP>( TargetHandle_t i_target,
uint8_t & o_repairedRankMask,
uint8_t & o_badDimmMask )
{
uint32_t o_rc = SUCCESS;

Expand All @@ -223,7 +223,7 @@ uint32_t mssRestoreDramRepairs<TYPE_MEM_PORT>( TargetHandle_t i_target,
fapi2::buffer<uint8_t> tmpRepairedRankMask, tmpBadDimmMask;
FAPI_INVOKE_HWP( errl, mss::restore_repairs,
fapi2::Target<fapi2::TARGET_TYPE_MEM_PORT>( i_target ),
fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>( i_target ),
tmpRepairedRankMask, tmpBadDimmMask );
if ( NULL != errl )
Expand Down

0 comments on commit b731bda

Please sign in to comment.