diff options
Diffstat (limited to 'src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_rt.C')
-rwxr-xr-x | src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_rt.C | 240 |
1 files changed, 0 insertions, 240 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_rt.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_rt.C index f3ee6884f..a2bc9ca83 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_rt.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_rt.C @@ -76,246 +76,6 @@ CenMbaTdCtlr::FUNCS CenMbaTdCtlr::cv_cmdCompleteFuncs[] = // Private Functions //------------------------------------------------------------------------------ -int32_t CenMbaTdCtlr::analyzeVcmPhase1( STEP_CODE_DATA_STRUCT & io_sc, - const CenAddr & i_stopAddr, - const CenAddr & i_endAddr ) -{ - #define PRDF_FUNC "[CenMbaTdCtlr::analyzeVcmPhase1] " - - int32_t o_rc = SUCCESS; - - do - { - if ( VCM_PHASE_1 != iv_tdState ) - { - PRDF_ERR( PRDF_FUNC "Invalid state machine configuration" ); - o_rc = FAIL; break; - } - - // Add the mark to the callout list. - CalloutUtil::calloutMark( iv_mbaTrgt, iv_rank, iv_mark, io_sc ); - - // Check for any ECC errors that occurred during the procedure. - 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 ) - { - o_rc = handleUe_Td( io_sc, i_stopAddr ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "handleUe_Td() failed" ); - break; - } - - // Abort the procedure. - iv_tdState = NO_OP; - break; - } - - if ( eccErrorMask & RETRY_CTE ) - { - o_rc = handleRceEte_Td( io_sc ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "handleRceEte_Td() failed" ); - break; - } - } - - // If the scrub stopped on the last address of the rank, start the next - // TD procedure. Otherwise, resume background scrubbing. This is needed - // for attentions like retry CTEs where, due to a hardware issue, must - // report the attention immediately and cannot wait for the scrub to get - // to the end of the rank. - - if ( i_endAddr == i_stopAddr ) - { - // Start VCM Phase 2 - o_rc = startVcmPhase2( io_sc ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "startVcmPhase2() failed" ); - break; - } - } - else - { - // Restart the scrub on the next address. - o_rc = resumeScrub( io_sc, eccErrorMask ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "resumeScrub() failed" ); - break; - } - } - - } while(0); - - // If this TD procedure was aborted, execute TD complete sequence. - if ( (iv_tdState == NO_OP) && (SUCCESS == o_rc) ) - { - o_rc = handleTdComplete( io_sc ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "handleTdComplete() failed" ); - } - } - - return o_rc; - - #undef PRDF_FUNC -} - -//------------------------------------------------------------------------------ - -int32_t CenMbaTdCtlr::analyzeVcmPhase2( STEP_CODE_DATA_STRUCT & io_sc, - const CenAddr & i_stopAddr, - const CenAddr & i_endAddr ) -{ - #define PRDF_FUNC "[CenMbaTdCtlr::analyzeVcmPhase2] " - - int32_t o_rc = SUCCESS; - - do - { - if ( VCM_PHASE_2 != iv_tdState ) - { - PRDF_ERR( PRDF_FUNC "Invalid state machine configuration" ); - o_rc = FAIL; break; - } - - // Add the mark to the callout list. - CalloutUtil::calloutMark( iv_mbaTrgt, iv_rank, iv_mark, io_sc ); - - // Check for any ECC errors that occurred during the procedure. - 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 ) - { - o_rc = handleUe_Td( io_sc, i_stopAddr ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "handleUe_Td() failed" ); - break; - } - - // Abort the procedure. - iv_tdState = NO_OP; - break; - } - - if ( eccErrorMask & RETRY_CTE ) - { - o_rc = handleRceEte_Td( io_sc ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "handleRceEte_Td() failed" ); - break; - } - } - - if ( eccErrorMask & MCE ) - { - // Chip mark is verified. - // Do callouts, VPD updates, and start DRAM sparing, if possible. - o_rc = handleMCE_VCM2( io_sc ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "handleMCE_VCM2() failed" ); - break; - } - } - else if ( i_endAddr == i_stopAddr ) - { - // Chip mark verification failed. - setTdSignature( io_sc, PRDFSIG_VcmFalseAlarm ); - - // In manufacturing, this error log will be predictive. - if ( areDramRepairsDisabled() ) - { - io_sc.service_data->setServiceCall(); - iv_tdState = NO_OP; // Move on to the next TD procedure. - break; - } - - // Increment the false alarm count and threshold. if needed. - if ( iv_vcmRankData.incFalseAlarm(iv_rank, io_sc) ) - { - io_sc.service_data->AddSignatureList( iv_mbaTrgt, - PRDFSIG_VcmFalseAlarmExceeded ); - - // Treat the chip mark as verified. - o_rc = handleMCE_VCM2( io_sc ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "handleMCE_VCM2() failed" ); - } - } - else - { - // Remove chip mark from hardware. - iv_mark.clearCM(); - - // There is small time window where hardware places a chip mark - // immediately after it is removed, but before the HWP procedure - // can query the FIR registers. In this case, we will simply - // allow the write to be 'blocked' and handle the new chip mark - // in a separate attention. - bool allowWriteBlocked = true; - bool blocked; // Currently ignored. - o_rc = mssSetMarkStore( iv_mbaTrgt, iv_rank, iv_mark, blocked, - allowWriteBlocked ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "mssSetMarkStore() failed" ); - break; - } - - iv_tdState = NO_OP; // Move on to the next TD procedure. - } - } - else - { - // Restart the scrub on the next address. - o_rc = resumeScrub( io_sc, eccErrorMask ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "resumeScrub() failed" ); - break; - } - } - - } while(0); - - // If this TD procedure was aborted, execute TD complete sequence. - if ( (iv_tdState == NO_OP) && (SUCCESS == o_rc) ) - { - o_rc = handleTdComplete( io_sc ); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "handleTdComplete() failed" ); - } - } - - return o_rc; - - #undef PRDF_FUNC -} - -//------------------------------------------------------------------------------ - int32_t CenMbaTdCtlr::analyzeDsdPhase1( STEP_CODE_DATA_STRUCT & io_sc, const CenAddr & i_stopAddr, const CenAddr & i_endAddr ) |