Skip to content

Commit

Permalink
PRD: IPL DRAM Repairs cleanup
Browse files Browse the repository at this point in the history
Change-Id: Id0e3d2bea90f71d56df44ccab0506a28cf2017ff
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/36865
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/37047
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
zane131 committed Feb 27, 2017
1 parent 5555ba4 commit 979413b
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 22 deletions.
9 changes: 9 additions & 0 deletions src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
Expand Up @@ -82,6 +82,15 @@ void calloutMemUe<TYPE_MBA>( ExtensibleChip * i_chip, const MemRank & i_rank,
{
PRDF_ASSERT( TYPE_MBA == i_chip->getType() );

// TODO: RTC 169933 During Memory Diagnostics we'll want to call the
// mssIplUeIsolation() HWP so that we can isolate to a single DIMM if
// possible. This may be a difficult task to do at this point in the
// code because it will run a maintenance command on the Centaur,
// which may require some cleanup of the previous command. Since there
// are no plans to support IS DIMMs attached to a Centaur in P9, we
// may be able to get rid of this requirement because the FRU will be
// the same regardless if one or two logical DIMMs are called out.

MemoryMru memmru ( i_chip->getTrgt(), i_rank, MemoryMruData::CALLOUT_RANK );
io_sc.service_data->SetCallout( memmru );
}
Expand Down
26 changes: 26 additions & 0 deletions src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H
Expand Up @@ -38,6 +38,10 @@
#include <prdfP9McbistDataBundle.H>
#endif

#if defined(__HOSTBOOT_MODULE) && !defined(__HOSTBOOT_RUNTIME)
#include <prdfMemIplCeStats.H>
#endif

namespace PRDF
{

Expand Down Expand Up @@ -72,6 +76,21 @@ class McaDataBundle : public DataBundle

#endif

#if defined(__HOSTBOOT_MODULE) && !defined(__HOSTBOOT_RUNTIME)

/** @return The IPL CE statistics object. */
MemIplCeStats<TARGETING::TYPE_MCA> * getIplCeStats()
{
if ( nullptr == iv_iplCeStats )
{
iv_iplCeStats = new MemIplCeStats<TARGETING::TYPE_MCA>( iv_chip );
}

return iv_iplCeStats;
}

#endif

private: // functions

// Don't allow copy or assignment.
Expand All @@ -82,6 +101,13 @@ class McaDataBundle : public DataBundle

ExtensibleChip * iv_chip; // This MCA.

#if defined(__HOSTBOOT_MODULE) && !defined(__HOSTBOOT_RUNTIME)

/** MNFG IPL CE statistics. */
MemIplCeStats<TARGETING::TYPE_MCA> * iv_iplCeStats = nullptr;

#endif

public: // instance variables

MemCeTable<TARGETING::TYPE_MCA> iv_ceTable; ///< CE table for FFDC
Expand Down
4 changes: 2 additions & 2 deletions src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
Expand Up @@ -62,8 +62,6 @@ uint32_t MemTdCtlr<T>::handleCmdComplete( STEP_CODE_DATA_STRUCT & io_sc )
break;
}

collectStateCaptureData( io_sc, TD_CTLR_DATA::START );

#else // IPL only

PRDF_ASSERT( isInMdiaMode() ); // MDIA must be running.
Expand All @@ -78,6 +76,8 @@ uint32_t MemTdCtlr<T>::handleCmdComplete( STEP_CODE_DATA_STRUCT & io_sc )

#endif

collectStateCaptureData( io_sc, TD_CTLR_DATA::START );

if ( nullptr == iv_curProcedure )
{
// There are no TD procedures currently in progress.
Expand Down
4 changes: 2 additions & 2 deletions src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
Expand Up @@ -188,11 +188,11 @@ uint32_t __checkEcc( ExtensibleChip * i_chip, const MemRank & i_rank,
io_queue.push( e );
}
else if ( isMfgCeCheckingEnabled() &&
(0 != (eccAttns & MAINT_HARD_NCE_ETE)) )
(0 != (eccAttns & MAINT_HARD_NCE_ETE)) )
{
io_sc.service_data->AddSignatureList( trgt, PRDFSIG_MaintHARD_CTE );

// TODO RTC 136128
// TODO RTC 169935
// - Query the per-symbol counters for the hard CE symbol (there
// should be only one).
// - Add the symbol to the callout list (via MemoryMru).
Expand Down
18 changes: 9 additions & 9 deletions src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
Expand Up @@ -51,8 +51,8 @@ uint32_t TpsEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
#define PRDF_FUNC "[TpsEvent<TYPE_MCA>::nextStep] "

uint32_t o_rc = SUCCESS;
o_done = true;
MemIplCeStats<TYPE_MCA> ceStats( iv_chip );

o_done = false;

do
{
Expand All @@ -77,11 +77,13 @@ uint32_t TpsEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
else
{
//collect the CE statistics for later analysis use
o_rc = ceStats.collectStats( iv_rank );
McaDataBundle * db = getMcaDataBundle( iv_chip );
o_rc = db->getIplCeStats()->collectStats( iv_rank );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Call to 'ceStats.collectStats' failed "
"on chip: 0x%08x", iv_chip->getHuid() );
PRDF_ERR( PRDF_FUNC "collectStats(m%ds%d) failed on 0x%08x",
iv_rank.getMaster(), iv_rank.getSlave(),
iv_chip->getHuid() );
break;
}

Expand Down Expand Up @@ -111,10 +113,8 @@ uint32_t TpsEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
PRDFSIG_MaintIUE );
}

//Add the rank to the callout list
MemoryMru memmru(iv_chip->getTrgt(), iv_rank,
MemoryMruData::CALLOUT_RANK);
io_sc.service_data->SetCallout( memmru );
//Add the rank to the callout list (via MemoryMru)
MemEcc::calloutMemUe<TYPE_MCA>( iv_chip, iv_rank, io_sc );

//Make the error log predictive
io_sc.service_data->setServiceCall();
Expand Down
15 changes: 9 additions & 6 deletions src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
Expand Up @@ -63,8 +63,8 @@ uint32_t VcmEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
o_rc = startVcmPhase1<TYPE_MCA>( iv_chip, iv_rank );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Call to 'startVcmPhase1 failed on chip: "
"0x%08x", iv_chip->getHuid() );
PRDF_ERR( PRDF_FUNC "startVcmPhase1(0x%08x, %d) failed",
iv_chip->getHuid(), iv_rank.getMaster() );
break;
}
iv_phase = TD_PHASE_1;
Expand All @@ -77,8 +77,8 @@ uint32_t VcmEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
o_rc = checkEccFirs<TYPE_MCA>( iv_chip, eccAttns );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Call to 'checkEccFirs' failed on chip: "
"0x%08x", iv_chip->getHuid() );
PRDF_ERR( PRDF_FUNC "checkEccFirs(0x%08x) failed",
iv_chip->getHuid() );
break;
}

Expand Down Expand Up @@ -172,9 +172,12 @@ uint32_t VcmEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
io_sc.service_data->setSignature( iv_chip->getHuid(),
PRDFSIG_VcmVerified );

//Update the DRAM repairs VPD to indicate the entire DRAM is bad
//TODO ?????? - updating VPD not yet supported
// If there is a symbol mark on the same DRAM as the newly
// verified chip mark, remove the symbol mark.
// TODO: RTC 164705

// Set entire chip in DRAM Repairs VPD.
// TODO: RTC 169939
}
//else - verification failed
else
Expand Down
6 changes: 3 additions & 3 deletions src/usr/diag/prdf/prdfMain_ipl.C
Expand Up @@ -33,11 +33,11 @@

#include <prdfMain.H>

//#include <prdfCenMbaDataBundle.H> TODO RTC 136128
//#include <prdfCenMbaDataBundle.H> TODO RTC 159628
#include <prdfExtensibleChip.H>
#include <prdfErrlUtil.H>
#include <prdfPlatServices.H>
//#include <prdfMbaDomain.H> TODO RTC 136128
//#include <prdfMbaDomain.H> TODO RTC 159628
#include <prdfP9McbistDomain.H>
#include <iipSystem.h>

Expand Down Expand Up @@ -74,7 +74,7 @@ int32_t analyzeIplCEStats( TargetHandle_t i_mba, bool &o_calloutMade )

PRDF_ENTER( PRDF_FUNC "(0x%08x)", getHuid(i_mba) );

/* TODO RTC 136128
/* TODO RTC 159628
// will unlock when going out of scope
PRDF_SYSTEM_SCOPELOCK;
Expand Down

0 comments on commit 979413b

Please sign in to comment.