summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2018-04-15 22:13:45 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2018-04-20 10:33:14 -0400
commit783cff1ba5e3ad8fc315a88122a064465f84f61a (patch)
treea692c8996dd11fec3866a04327e7de15f6364826 /src/usr/diag
parentbebf03bd53673614b709266f1984d8f1275f4374 (diff)
downloadtalos-hostboot-783cff1ba5e3ad8fc315a88122a064465f84f61a.tar.gz
talos-hostboot-783cff1ba5e3ad8fc315a88122a064465f84f61a.zip
PRD: finalize IPL DRAM Repairs support for MBA
Note that this does not include DRAM sparing Change-Id: I8c729b1c79a7060a2dd006cf28005f033dd02e4d RTC: 191367 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57239 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: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57507 CI-Ready: 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> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag')
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C7
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C52
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C18
-rw-r--r--src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr_ipl.C542
4 files changed, 82 insertions, 537 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
index 986edc20c..906b40d0c 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
@@ -26,6 +26,7 @@
#include <prdfMemTdCtlr.H>
// Platform includes
+#include <prdfCenMbaDataBundle.H>
#include <prdfMemAddress.H>
#include <prdfMemCaptureData.H>
#include <prdfMemScrubUtils.H>
@@ -305,11 +306,9 @@ uint32_t __analyzeCmdComplete<TYPE_MBA>( ExtensibleChip * i_chip,
// Update iv_stoppedRank.
o_stoppedRank = __getStopRank<TYPE_MBA>( i_chip, i_addr );
- /* TODO RTC 157888
// Check the MBA for ECC errors.
- return __checkEcc<TYPE_MBA>(i_chip, io_queue, i_addr, o_errorsFound, io_sc);
- */
- return SUCCESS;
+ return __checkEcc<TYPE_MBA, MbaDataBundle *>( i_chip, io_queue, i_addr,
+ o_errorsFound, io_sc );
}
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
index af271ea40..b0901b456 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
@@ -30,6 +30,7 @@
#include <prdfMemTdCtlr.H>
// Platform includes
+#include <prdfCenMbaDataBundle.H>
#include <prdfMemEccAnalysis.H>
#include <prdfMemMark.H>
#include <prdfMemoryMru.H>
@@ -142,6 +143,28 @@ uint32_t MemTdCtlr<T>::defaultStep( STEP_CODE_DATA_STRUCT & io_sc )
//------------------------------------------------------------------------------
+template <TARGETING::TYPE T>
+bool __mnfgCeCheck( uint32_t i_eccAttns );
+
+template<> inline
+bool __mnfgCeCheck<TYPE_MCA>( uint32_t i_eccAttns )
+{
+ // The MAINT_HARD_NCE_ETE attention is reported on the MCBIST. If the
+ // command was run in broadcast mode, we may end up doing TPS on all four
+ // ports when only one port has the CE. Therefore, we must check for
+ // MAINT_NCE or MAINT_TCE, which are found on the MCA, to determine if this
+ // MCA needs a TPS procedure.
+ return ( ( 0 != (i_eccAttns & MAINT_HARD_NCE_ETE) ) &&
+ ( (0 != (i_eccAttns & MAINT_NCE)) ||
+ (0 != (i_eccAttns & MAINT_TCE)) ) );
+}
+
+template<> inline
+bool __mnfgCeCheck<TYPE_MBA>( uint32_t i_eccAttns )
+{
+ return ( 0 != (i_eccAttns & MAINT_HARD_NCE_ETE) );
+}
+
template <TARGETING::TYPE T, typename D>
uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
const MemAddr & i_addr, bool & o_errorsFound,
@@ -200,26 +223,10 @@ uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
break;
}
}
- else if ( isMfgCeCheckingEnabled() &&
- (0 != (eccAttns & MAINT_HARD_NCE_ETE)) &&
- ( (0 != (eccAttns & MAINT_NCE)) ||
- (0 != (eccAttns & MAINT_TCE)) ) )
+ else if ( isMfgCeCheckingEnabled() && __mnfgCeCheck<T>(eccAttns) )
{
- // NOTE: The MAINT_HARD_NCE_ETE attention is reported on the MCBIST.
- // If the command is run in broadcast mode, we may end up
- // doing TPS on all four ports when only one port has the CE.
- // Therefore, we must check for MAINT_NCE or MAINT_TCE, which
- // are found on the MCA, to determine if this MCA need a TPS
- // procedure.
-
io_sc.service_data->AddSignatureList( trgt, PRDFSIG_MaintHARD_CTE );
- // NOTE: Normally we would add each symbol in the per-symbol
- // counters to the callout list for FFDC, but the results are
- // a bit undefined in broadcast mode. Since this should not be
- // a predictive error log, it is fine to have no callouts for
- // now.
-
// Add a TPS procedure to the queue.
TdEntry * e = new TpsEvent<T>{ i_chip, rank };
io_queue.push( e );
@@ -242,13 +249,12 @@ uint32_t __checkEcc<TYPE_MCA, McaDataBundle *>( ExtensibleChip * i_chip,
const MemAddr & i_addr,
bool & o_errorsFound,
STEP_CODE_DATA_STRUCT & io_sc );
-
-/* TODO RTC 157888
template
-uint32_t __checkEcc<TYPE_MBA>( ExtensibleChip * i_chip, TdQueue & io_queue,
- const MemAddr & i_addr, bool & o_errorsFound,
- STEP_CODE_DATA_STRUCT & io_sc );
-*/
+uint32_t __checkEcc<TYPE_MBA, MbaDataBundle *>( ExtensibleChip * i_chip,
+ TdQueue & io_queue,
+ const MemAddr & i_addr,
+ bool & o_errorsFound,
+ STEP_CODE_DATA_STRUCT & io_sc );
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
index 270fa6c31..fb200ac43 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
@@ -34,6 +34,7 @@
#include <UtilHash.H>
// Platform includes
+#include <prdfCenMbaDataBundle.H>
#include <prdfMemEccAnalysis.H>
#include <prdfMemScrubUtils.H>
#include <prdfMemTps.H>
@@ -720,13 +721,16 @@ uint32_t __checkEcc<TYPE_MCA, McaDataBundle *>( ExtensibleChip * i_chip,
const MemAddr & i_addr,
bool & o_errorsFound,
STEP_CODE_DATA_STRUCT & io_sc );
-
-/* TODO RTC 157888
-template
-uint32_t __checkEcc<TYPE_MBA>( ExtensibleChip * i_chip, TdQueue & io_queue,
- const MemAddr & i_addr, bool & o_errorsFound,
- STEP_CODE_DATA_STRUCT & io_sc );
-*/
+template<>
+uint32_t __checkEcc<TYPE_MBA, MbaDataBundle *>( ExtensibleChip * i_chip,
+ TdQueue & io_queue,
+ const MemAddr & i_addr,
+ bool & o_errorsFound,
+ STEP_CODE_DATA_STRUCT & io_sc )
+{
+ // TODO: remove this once runtime support is abled for MBA.
+ return SUCCESS;
+}
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr_ipl.C b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr_ipl.C
index 7555c875d..414717a1b 100644
--- a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr_ipl.C
+++ b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr_ipl.C
@@ -77,121 +77,11 @@ CenMbaTdCtlr::FUNCS CenMbaTdCtlr::cv_cmdCompleteFuncs[] =
int32_t CenMbaTdCtlr::handleCmdCompleteEvent( STEP_CODE_DATA_STRUCT & io_sc )
{
- #define PRDF_FUNC "[CenMbaTdCtlr::handleCmdCompleteEvent] "
-
- int32_t o_rc = SUCCESS;
-
- do
- {
- if ( !isInMdiaMode() )
- {
- PRDF_ERR( PRDF_FUNC "A hostboot maintenance command complete "
- "attention occurred while MDIA was not running." );
- o_rc = FAIL;
- break;
- }
-
- o_rc = initialize();
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "initialize() failed" );
- break;
- }
-
- // Immediately inform MDIA that the command has finished.
- o_rc = mdiaSendEventMsg( iv_mbaTrgt, MDIA::RESET_TIMER );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "mdiaSendEventMsg(RESET_TIMER) failed" );
- break;
- }
-
- // Get address in which the command stopped and the end address.
- // Some analysis is dependent on if the maintenance command has reached
- // the end address or stopped in the middle.
- CenAddr stopAddr;
- o_rc = getCenMaintStartAddr( iv_mbaChip, stopAddr );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "getCenMaintStartAddr() failed" );
- break;
- }
-
- CenAddr endAddr;
- o_rc = getCenMaintEndAddr( iv_mbaChip, endAddr );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "getCenMaintEndAddr() failed" );
- break;
- }
-
- // Call analysis function based on state.
- if ( NULL == cv_cmdCompleteFuncs[iv_tdState] )
- {
- PRDF_ERR( PRDF_FUNC "Function for state %d not supported",
- iv_tdState );
- o_rc = FAIL; break;
- }
-
- o_rc = (this->*cv_cmdCompleteFuncs[iv_tdState])( io_sc, stopAddr,
- endAddr );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "Failed to continue analysis" );
- break;
- }
-
- // Do some cleanup if the TD procedure is complete.
- if ( !isInTdMode() )
- {
- // Clean up the previous command
- // PRD is not starting another command but MDIA might be so clear
- // the counters and FIRs as well.
- o_rc = prepareNextCmd();
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "prepareNextCmd() failed" );
- break;
- }
-
- // Inform MDIA about command complete
- // Note that we only want to send the command complete message if
- // everything above is successful because a bad return code will
- // result in a SKIP_MBA message sent. There is no need to send
- // redundant messages.
- o_rc = signalMdiaCmdComplete();
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "signalMdiaCmdComplete() failed" );
- break;
- }
-
- // Clear out the mark, just in case. This is so we don't
- // accidentally callout this mark on another rank in an error path
- // scenario.
- iv_mark = CenMark();
- }
-
- } while(0);
-
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "Failed." );
- badPathErrorHandling( io_sc );
-
- int32_t l_rc = cleanupPrevCmd(); // Just in case.
- if ( SUCCESS != l_rc )
- PRDF_ERR( PRDF_FUNC "cleanupPrevCmd() failed" );
-
- // Tell MDIA to skip further analysis on this MBA.
- l_rc = mdiaSendEventMsg( iv_mbaTrgt, MDIA::SKIP_MBA );
- if ( SUCCESS != l_rc )
- PRDF_ERR( PRDF_FUNC "mdiaSendEventMsg(SKIP_MBA) failed" );
- }
-
- return o_rc;
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Moved to MemTdCtlr class
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #undef PRDF_FUNC
+ return SUCCESS;
}
//------------------------------------------------------------------------------
@@ -201,66 +91,22 @@ int32_t CenMbaTdCtlr::handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc,
const CenMbaTdCtlrCommon::TdType i_event,
bool i_banTps )
{
- #define PRDF_FUNC "[CenMbaTdCtlr::handleTdEvent] "
-
- // This is a no-op in Hostboot because we can't support Targeted Diagnostics
- // at this time. Instead, print a trace statement indicating the intended
- // request. Note that any VCM request will eventually be found during the
- // initialization of the runtime TD controller.
- PRDF_INF( PRDF_FUNC "TD request found during Hostboot: iv_mbaChip=0x%08x "
- "i_rank=M%dS%d i_event=%d i_banTps=%c", iv_mbaChip->GetId(),
- i_rank.getMaster(), i_rank.getSlave(), i_event,
- i_banTps ? 'T' : 'F' );
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Moved to MemTdCtlr class
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
return SUCCESS;
-
- #undef PRDF_FUNC
}
//------------------------------------------------------------------------------
int32_t CenMbaTdCtlr::startInitialBgScrub()
{
- #define PRDF_FUNC "[CenMbaTdCtlr::startInitialBgScrub] "
-
- int32_t o_rc = SUCCESS;
-
- iv_tdState = NO_OP;
-
- // NOTE: It is possible for a chip mark to have been placed between MDIA
- // and the initial start scrub. Those unverified chip marks will be
- // found in the runtime TD controller's initialize() function. The
- // chip marks will then be verified after the initial fast scrub is
- // complete.
-
- do
- {
- // Should have been initialized during MDIA. If not, there is a serious
- // logic issue.
- if ( !iv_initialized )
- {
- PRDF_ERR( PRDF_FUNC "TD controller not initialized." );
- break;
- }
-
- //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- // Moved to startBgScrub() in prdfPlatServices.C
- //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- } while (0);
-
- if ( SUCCESS != o_rc )
- {
- // Can't use badPathErrorHandling() because there is no SDC created when
- // this function is called.
-
- PRDF_ERR( PRDF_FUNC "iv_mbaChip:0x%08x iv_initialized:%c",
- iv_mbaChip->GetId(), iv_initialized ? 'T' : 'F' );
- }
-
- return o_rc;
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Moved to startBgScrub() in prdfPlatServices.C
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #undef PRDF_FUNC
+ return SUCCESS;
}
//------------------------------------------------------------------------------
@@ -269,30 +115,11 @@ int32_t CenMbaTdCtlr::startInitialBgScrub()
int32_t CenMbaTdCtlr::initialize()
{
- #define PRDF_FUNC "[CenMbaTdCtlr::initialize] "
-
- int32_t o_rc = SUCCESS;
-
- do
- {
- if ( iv_initialized ) break; // nothing to do
-
- // Initialize common instance variables
- o_rc = CenMbaTdCtlrCommon::initialize();
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "CenMbaTdCtlrCommon::initialize() failed" );
- break;
- }
-
- // At this point, the TD controller is initialized.
- iv_initialized = true;
-
- } while (0);
-
- return o_rc;
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Moved to MemTdCtlr class
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #undef PRDF_FUNC
+ return SUCCESS;
}
//------------------------------------------------------------------------------
@@ -301,73 +128,11 @@ int32_t CenMbaTdCtlr::analyzeCmdComplete( STEP_CODE_DATA_STRUCT & io_sc,
const CenAddr & i_stopAddr,
const CenAddr & i_endAddr )
{
- #define PRDF_FUNC "[CenMbaTdCtlr::analyzeCmdComplete] "
-
- int32_t o_rc = SUCCESS;
-
- do
- {
- if ( NO_OP != iv_tdState )
- {
- PRDF_ERR( PRDF_FUNC "Invalid state machine configuration" );
- o_rc = FAIL; break;
- }
-
- // Initialize iv_rank. This must be done before calling other
- // functions as they require iv_rank to be accurate.
- iv_rank = CenRank( i_stopAddr.getRank() );
-
- // Get error condition which caused command to stop
- uint16_t eccErrorMask = NO_ERROR;
- o_rc = checkEccErrors( eccErrorMask, io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "checkEccErrors() failed" );
- break;
- }
-
- if ( eccErrorMask & UE )
- {
- // Handle UE. Highest priority
- o_rc = handleUE( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "handleUE() failed" );
- break;
- }
- }
- else if ( eccErrorMask & MPE )
- {
- o_rc = handleMPE( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "handleMPE() failed");
- break;
- }
- }
- else if ( isMfgCeCheckingEnabled() && (eccErrorMask & HARD_CTE) )
- {
- // During MNFG IPL CE, we will get this condition.
- // During SF read, all CE are reported as Hard CE.
- // So we will only check for Hard CE threshold.
- o_rc = handleMnfgCeEte( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "handleMnfgCeEte() failed" );
- break;
- }
- }
- else
- {
- // If maint cmd completed with no error, don't commit error log.
- io_sc.service_data->setDontCommitErrl();
- }
-
- } while (0);
-
- return o_rc;
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Moved to MemTdCtlr class
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #undef PRDF_FUNC
+ return SUCCESS;
}
//------------------------------------------------------------------------------
@@ -538,75 +303,11 @@ int32_t CenMbaTdCtlr::analyzeTpsPhase1( STEP_CODE_DATA_STRUCT & io_sc,
const CenAddr & i_stopAddr,
const CenAddr & i_endAddr )
{
- #define PRDF_FUNC "[CenMbaTdCtlr::analyzeTpsPhase1] "
-
- int32_t o_rc = SUCCESS;
-
- do
- {
- if ( TPS_PHASE_1 != iv_tdState )
- {
- PRDF_ERR( PRDF_FUNC "Invalid state machine configuration" );
- o_rc = FAIL; break;
- }
-
- CenMbaDataBundle * mbadb = getMbaDataBundle( iv_mbaChip );
-
- o_rc = mbadb->getIplCeStats()->collectStats( iv_rank );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "collectStats() failed");
- break;
- }
-
- // Get error condition which caused command to stop
- uint16_t eccErrorMask = NO_ERROR;
- o_rc = checkEccErrors( eccErrorMask, io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "checkEccErrors() failed" );
- break;
- }
-
- if ( ( eccErrorMask & UE ) || ( eccErrorMask & RETRY_CTE ))
- {
- // Handle UE. Highest priority
- o_rc = handleUE( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "handleUE() failed" );
- break;
- }
- }
- else if ( eccErrorMask & MPE )
- {
- o_rc = handleMPE( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "handleMPE() failed");
- break;
- }
- }
- else
- {
- // No error found so add rank to callout list, just in case.
- MemoryMru memmru (iv_mbaTrgt, iv_rank, MemoryMruData::CALLOUT_RANK);
- io_sc.service_data->SetCallout( memmru );
-
- // Start TPS Phase 2
- o_rc = startTpsPhase2( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "startTpsPhase2() failed" );
- break;
- }
- }
-
- } while (0);
-
- return o_rc;
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Moved to TpsEvent class
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #undef PRDF_FUNC
+ return SUCCESS;
}
//------------------------------------------------------------------------------
@@ -615,71 +316,11 @@ int32_t CenMbaTdCtlr::analyzeTpsPhase2( STEP_CODE_DATA_STRUCT & io_sc,
const CenAddr & i_stopAddr,
const CenAddr & i_endAddr )
{
- #define PRDF_FUNC "[CenMbaTdCtlr::analyzeTpsPhase2] "
-
- int32_t o_rc = SUCCESS;
-
- do
- {
- if ( TPS_PHASE_2 != iv_tdState )
- {
- PRDF_ERR( PRDF_FUNC "Invalid state machine configuration" );
- o_rc = FAIL; break;
- }
-
- CenMbaDataBundle * mbadb = getMbaDataBundle( iv_mbaChip );
-
- o_rc = mbadb->getIplCeStats()->calloutHardCes( iv_rank );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "calloutHardCes() failed");
- break;
- }
-
- // Get error condition which caused command to stop
- uint16_t eccErrorMask = NO_ERROR;
- o_rc = checkEccErrors( eccErrorMask, io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "checkEccErrors() failed" );
- break;
- }
-
- if ( ( eccErrorMask & UE ) || ( eccErrorMask & RETRY_CTE ))
- {
- // Handle UE. Highest priority
- o_rc = handleUE( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "handleUE() failed" );
- break;
- }
- }
- else if ( eccErrorMask & MPE )
- {
- o_rc = handleMPE( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "handleMPE() failed");
- break;
- }
- }
- else
- {
- // No error found so add rank to callout list, just in case.
- MemoryMru memmru (iv_mbaTrgt, iv_rank, MemoryMruData::CALLOUT_RANK);
- io_sc.service_data->SetCallout( memmru );
-
- io_sc.service_data->AddSignatureList( iv_mbaTrgt,
- PRDFSIG_EndTpsPhase2 );
- iv_tdState = NO_OP;
- }
-
- } while (0);
-
- return o_rc;
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Moved to TpsEvent class
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #undef PRDF_FUNC
+ return SUCCESS;
}
//------------------------------------------------------------------------------
@@ -763,138 +404,33 @@ int32_t CenMbaTdCtlr::handleUE( STEP_CODE_DATA_STRUCT & io_sc )
int32_t CenMbaTdCtlr::handleMPE( STEP_CODE_DATA_STRUCT & io_sc )
{
- #define PRDF_FUNC "[CenMbaTdCtlr::handleMPE] "
-
- int32_t o_rc = SUCCESS;
-
- setTdSignature( io_sc, PRDFSIG_MaintMPE );
-
- do
- {
- // Get the current marks in hardware.
- o_rc = mssGetMarkStore( iv_mbaTrgt, iv_rank, iv_mark );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "mssGetMarkStore() failed");
- break;
- }
-
- if ( !iv_mark.getCM().isValid() )
- {
- PRDF_ERR( PRDF_FUNC "No valid chip mark to verify");
- o_rc = FAIL; break;
- }
-
- CalloutUtil::calloutMark( iv_mbaTrgt, iv_rank, iv_mark, io_sc );
-
- // Start VCM procedure
- o_rc = startVcmPhase1( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "startVcmPhase1() failed" );
- break;
- }
-
- } while(0);
-
- return o_rc;
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // moved to MemEcc::handleMpe()
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #undef PRDF_FUNC
+ return SUCCESS;
}
//------------------------------------------------------------------------------
int32_t CenMbaTdCtlr::handleMnfgCeEte( STEP_CODE_DATA_STRUCT & io_sc )
{
- #define PRDF_FUNC "[CenMbaTdCtlr::handleMnfgCeEte] "
-
- using namespace CalloutUtil;
-
- int32_t o_rc = SUCCESS;
-
- do
- {
- MemUtils::MaintSymbols symData; CenSymbol junk;
- o_rc = MemUtils::collectCeStats( iv_mbaChip, iv_rank, symData, junk);
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "MemUtils::collectCeStats() failed. MBA:0x%08x",
- iv_mbaChip->GetId() );
- break;
- }
-
- // As HW threshold is set as 1 in mdia, we should only get one symbol
- // here. If there is no symbol, that is an HW error.
- if( 0 == symData.size() )
- {
- PRDF_ERR( PRDF_FUNC " symData size is 0. MBA:0x%08x",
- iv_mbaChip->GetId() );
- o_rc = FAIL; break;
- }
-
- // Callout the symbol.
- MemoryMru memmru ( iv_mbaTrgt, iv_rank, symData[0].symbol );
- io_sc.service_data->SetCallout( memmru );
-
- // Start TPS Phase 1
- o_rc = startTpsPhase1( io_sc );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "startTpsPhase1() failed" );
- break;
- }
-
- } while(0);
-
- return o_rc;
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Moved to TpsEvent class
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #undef PRDF_FUNC
+ return SUCCESS;
}
//------------------------------------------------------------------------------
int32_t CenMbaTdCtlr::signalMdiaCmdComplete()
{
- #define PRDF_FUNC "[CenMbaTdCtlr::signalMdiaCmdComplete] "
-
- int32_t o_rc = SUCCESS;
-
- do
- {
- // Determine for MDIA whether or not the command finished at the end of
- // the last rank or if the command will need to be restarted.
-
- // Get the last address of the last rank in memory.
- CenAddr junk, allEndAddr;
- o_rc = getMemAddrRange( iv_mbaTrgt, junk, allEndAddr );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "getMemAddrRange() failed" );
- break;
- }
-
- // Need to compare the address in which the command stopped.
- CenAddr stoppedAddr;
- o_rc = getCenMaintStartAddr( iv_mbaChip, stoppedAddr );
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "cenGetMaintAddr() failed" );
- break;
- }
-
- // The actual message will need to be sent in post analysis after the
- // FIR bits have been cleared.
- CenMbaDataBundle * mbadb = getMbaDataBundle( iv_mbaChip );
- mbadb->iv_sendCmdCompleteMsg = true;
- mbadb->iv_cmdCompleteMsgData =
- (allEndAddr == stoppedAddr) ? MDIA::COMMAND_COMPLETE
- : MDIA::COMMAND_STOPPED;
-
- } while(0);
-
- return o_rc;
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Moved to MemTdCtlr class
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- #undef PRDF_FUNC
+ return SUCCESS;
}
} // end namespace PRDF
OpenPOWER on IntegriCloud