diff options
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C | 7 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C | 52 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C | 18 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr_ipl.C | 542 |
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 |