diff options
Diffstat (limited to 'src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H')
-rw-r--r-- | src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H | 459 |
1 files changed, 0 insertions, 459 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H deleted file mode 100644 index 11b810df1..000000000 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H +++ /dev/null @@ -1,459 +0,0 @@ -/* IBM_PROLOG_BEGIN_TAG */ -/* This is an automatically generated prolog. */ -/* */ -/* $Source: src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H $ */ -/* */ -/* OpenPOWER HostBoot Project */ -/* */ -/* Contributors Listed Below - COPYRIGHT 2013,2016 */ -/* [+] International Business Machines Corp. */ -/* */ -/* */ -/* Licensed under the Apache License, Version 2.0 (the "License"); */ -/* you may not use this file except in compliance with the License. */ -/* You may obtain a copy of the License at */ -/* */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/* */ -/* Unless required by applicable law or agreed to in writing, software */ -/* distributed under the License is distributed on an "AS IS" BASIS, */ -/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ -/* implied. See the License for the specific language governing */ -/* permissions and limitations under the License. */ -/* */ -/* IBM_PROLOG_END_TAG */ - -/** @file prdfCenMbaTdCtlr_common.H - * @brief The common implementation of the MBA TD Controller. - */ - -#ifndef __prdfCenMbaTdCtlr_common_H -#define __prdfCenMbaTdCtlr_common_H - -// Framework includes -#include <iipServiceDataCollector.h> -#include <prdf_types.h> -#include <prdfPlatServices.H> - -// Pegasus includes -#include <prdfCenAddress.H> -#include <prdfMemConst.H> -#include <prdfCenMarkstore.H> -#include <prdfCenMbaExtraSig.H> - -namespace PRDF -{ - -class ExtensibleChip; - -/** - * @brief A state machine for memory targeted diagnostics. - */ -class CenMbaTdCtlrCommon -{ - public: // constants, enums - - /** - * @brief This enum will be used to indicate type of TD event requested to - * be handled. - * @note The order of the enums values is important. It is used for - * sorting the TdQueue by event type priority. - */ - enum TdType - { - VCM_EVENT = 0, ///< A Verify Chip Mark event. - TPS_EVENT, ///< A Two-Phase Scrub event. - }; - - protected: // constants, enums - - /** - * @brief Lists all possible states of TD controller - * @note These enums are used as array indexes to cv_cmdCompleteFuncs and - * the last entry will be used to get the size of the array. - */ - enum TdState - { - NO_OP = 0, ///< No TD procedures in place. - VCM_PHASE_1, ///< Verify Chip Mark phase 1. - VCM_PHASE_2, ///< Verify Chip Mark phase 2. - DSD_PHASE_1, ///< DRAM Spare Deploy phase 1. - DSD_PHASE_2, ///< DRAM Spare Deploy phase 2. - TPS_PHASE_1, ///< Two-Phase Scrub phase 1. - TPS_PHASE_2, ///< Two-Phase Scrub phase 2. - MAX_TD_STATE ///< The maximum number of TD states. - }; - - enum EccErrorMask - { - NO_ERROR = 0, ///< No ECC errors found - UE = 0x01, ///< UE - MPE = 0x02, ///< Chip mark placed - MCE = 0x04, ///< CE on chip mark - HARD_CTE = 0x08, ///< Hard CE threshold exceeed - SOFT_CTE = 0x10, ///< Soft CE threshold exceeed - INTER_CTE = 0x20, ///< Intermittent CE threshold exceeed - RETRY_CTE = 0x40, ///< Retry CE threshold exceeed - }; - - // Common stop conditions - enum StopConditions - { - COND_TARGETED_CMD = - mss_MaintCmd::STOP_ON_RETRY_CE_ETE | - mss_MaintCmd::STOP_ON_END_ADDRESS | - mss_MaintCmd::ENABLE_CMD_COMPLETE_ATTENTION, - - COND_BG_SCRUB = - mss_MaintCmd::STOP_ON_HARD_NCE_ETE | - mss_MaintCmd::STOP_ON_INT_NCE_ETE | - mss_MaintCmd::STOP_ON_SOFT_NCE_ETE | - mss_MaintCmd::STOP_ON_RETRY_CE_ETE | - mss_MaintCmd::STOP_ON_MPE | - mss_MaintCmd::STOP_ON_UE | - mss_MaintCmd::STOP_IMMEDIATE | - mss_MaintCmd::ENABLE_CMD_COMPLETE_ATTENTION, - - COND_FAST_SCRUB = - COND_BG_SCRUB | - mss_MaintCmd::STOP_ON_END_ADDRESS, - }; - - public: // functions - - /** - * @brief Constructor - * - * This constructor will be called in the MBA data bundle code. Therefore, - * no register reads/writes can be done in this constructor. Anything needed - * to initialize the instance variables that requires register reads/writes - * or is non-trivial should be done in initialize(). - * - * @param i_mbaChip An MBA chip. - */ - explicit CenMbaTdCtlrCommon( ExtensibleChip * i_mbaChip ) : - iv_mbaChip(i_mbaChip), iv_membChip(NULL), iv_mbaTrgt(NULL), - iv_mbaPos(MAX_MBA_PER_MEMBUF), iv_x4Dimm(false), iv_initialized(false), - iv_tdState(NO_OP), iv_rank(), iv_mark(), iv_mssCmd(NULL), - iv_isEccSteer(false) - {} - - /** @brief Destructor */ - ~CenMbaTdCtlrCommon() - { - delete iv_mssCmd; iv_mssCmd = NULL; - } - - /** - * @brief Determines and executes the next course of action after a - * maintenance command complete attention. - * @note Initializes the TD controller, if needed. - * @param io_sc The step code data struct. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t handleCmdCompleteEvent( STEP_CODE_DATA_STRUCT & io_sc ) = 0; - - /** - * @brief Adds a TD procedure to the queue. - * - * TD events are only intended to be handled during FSP runtime, however, it - * is possible that a TD events could be triggered in Hostboot after it has - * been flushed from the cache to system memory. All requests to handle TD - * events during Hostboot will be ignored. Any chip marks placed at this - * time will be found when the FSP TD controller is initialized. The error - * log for the trigger will be committed and a trace statement will be made - * indicating which rank and TD procedure was requested. - * - * @param io_sc The step code data struct. - * @param i_rank The rank in which the event occurred. - * @param i_event The event type (see enum TdType). - * @param i_banTps TRUE to ban any future TPS requests for this rank, - * default FALSE. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - * @note If no TD procedures are in progress, it will stop background - * scrub and start the next TD procedure. - */ - virtual int32_t handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc, - const CenRank & i_rank, - const TdType i_event, - bool i_banTps = false ) = 0; - protected: // functions - - /** - * @brief Initializes the TD controller and sets appropriate information - * in the hardware, if needed. - * - * Since the TD controller constructor will only be called in the MBA data - * bundle, register reads/writes can NOT be done in the constructor. - * Instead, anything needed to initialize the instance variables that - * requires register reads/writes or is non-trivial should be done in - * this function. - * - * @note Should be called at the beginning of every public function to - * ensure the TD controller is initialized. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t initialize(); - - /** - * @brief Analyzes a non-TD command complete event. - * - * A maintenance command has completed but no TD are in progress. This - * function will check for any ECC errors, unverified chip marks from a - * reset/reload, etc. and starts any TD procedures, if necessary. - * - * @param io_sc The step code data struct. - * @param i_stopAddr The address in which the command stopped. - * @param i_endAddr The address set in the MBMEA. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t analyzeCmdComplete( STEP_CODE_DATA_STRUCT & io_sc, - const CenAddr & i_stopAddr, - const CenAddr & i_endAddr ) = 0; - - /** - * @brief Analyzes VCM Phase 1 results and moves state machine. - * @param io_sc The step code data struct. - * @param i_stopAddr The address in which the command stopped. - * @param i_endAddr The address set in the MBMEA. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t analyzeVcmPhase1( STEP_CODE_DATA_STRUCT & io_sc, - const CenAddr & i_stopAddr, - const CenAddr & i_endAddr ) = 0; - - /** - * @brief Analyzes VCM Phase 2 results and moves state machine. - * @param io_sc The step code data struct. - * @param i_stopAddr The address in which the command stopped. - * @param i_endAddr The address set in the MBMEA. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t analyzeVcmPhase2( STEP_CODE_DATA_STRUCT & io_sc, - const CenAddr & i_stopAddr, - const CenAddr & i_endAddr ) = 0; - - /** - * @brief Analyzes DSD Phase 1 results and moves state machine. - * @param io_sc The step code data struct. - * @param i_stopAddr The address in which the command stopped. - * @param i_endAddr The address set in the MBMEA. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t analyzeDsdPhase1( STEP_CODE_DATA_STRUCT & io_sc, - const CenAddr & i_stopAddr, - const CenAddr & i_endAddr ) = 0; - - /** - * @brief Analyzes DSD Phase 2 results and moves state machine. - * @param io_sc The step code data struct. - * @param i_stopAddr The address in which the command stopped. - * @param i_endAddr The address set in the MBMEA. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t analyzeDsdPhase2( STEP_CODE_DATA_STRUCT & io_sc, - const CenAddr & i_stopAddr, - const CenAddr & i_endAddr ) = 0; - - /** - * @brief Analyzes Tps Phase 1 results and moves state machine. - * @param io_sc The step code data struct. - * @param i_stopAddr The address in which the command stopped. - * @param i_endAddr The address set in the MBMEA. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t analyzeTpsPhase1( STEP_CODE_DATA_STRUCT & io_sc, - const CenAddr & i_stopAddr, - const CenAddr & i_endAddr ) = 0; - - /** - * @brief Analyzes Tps Phase 2 results and moves state machine. - * @param io_sc The step code data struct. - * @param i_stopAddr The address in which the command stopped. - * @param i_endAddr The address set in the MBMEA. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t analyzeTpsPhase2( STEP_CODE_DATA_STRUCT & io_sc, - const CenAddr & i_stopAddr, - const CenAddr & i_endAddr ) = 0; - - /** - * @brief Starts VCM Phase 1. - * @param io_sc The step code data struct. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t startVcmPhase1( STEP_CODE_DATA_STRUCT & io_sc ) = 0; - - /** - * @brief Starts VCM Phase 2. - * @param io_sc The step code data struct. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t startVcmPhase2( STEP_CODE_DATA_STRUCT & io_sc ) = 0; - - /** - * @brief Starts DSD Phase 1. - * @param io_sc The step code data struct. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t startDsdPhase1( STEP_CODE_DATA_STRUCT & io_sc ) = 0; - - /** - * @brief Starts DSD Phase 2. - * @param io_sc The step code data struct. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t startDsdPhase2( STEP_CODE_DATA_STRUCT & io_sc ) = 0; - - /** - * @brief Starts Tps Phase 1. - * @param io_sc The step code data struct. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t startTpsPhase1( STEP_CODE_DATA_STRUCT & io_sc ) = 0; - - /** - * @brief Starts Tps Phase 2. - * @param io_sc The step code data struct. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t startTpsPhase2( STEP_CODE_DATA_STRUCT & io_sc ) = 0; - - /** - * @return TRUE if currently running a targeted diagnositics procedure, - * FALSE otherwise. - */ - virtual bool isInTdMode(); - - /** - * @brief Calls the cleanupCmd() function of the command that had just - * completed. - * @note This function will clear the maintenance command complete - * attention. So for FSP attentions, the SDC needs to be synched - * before calling this function just in case there is a - * reset/reload. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t cleanupPrevCmd(); - - /** - * @brief Preforms cleanup tasks that need to be done before starting the - * next maintenance command (i.e. clear scrub counter). - * @param i_clearStats TRUE to clear all scrub statistics (default), FALSE - * otherwise. This is useful when we need to resume - * background scrubbing on the next address and we - * don't want to clear all of the scrub statistics. - * @note Will call cleanupPrevCmd() as part of the preparations. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t prepareNextCmd( bool i_clearStats = true ); - - /** - * @brief Clears FIR bits that may have been a side-effect of a chip mark - * placed by hardware. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t chipMarkCleanup(); - - /** - * @brief Checks if ECC errors have occurred during a maintenance command. - * @param o_eccErrorMask Bitwise mask indicating which ECC errors have - * occurred. - * @param io_sc Service data collector. - * @note This function also updates SDC Multi-Signature list for each - * ECC error. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t checkEccErrors( uint16_t & o_eccErrorMask, - STEP_CODE_DATA_STRUCT & io_sc ); - - /** - * @brief Handle MCE event during VCM Phase 2 - * @param io_sc Service data collector. - * @note This will update bad bits information in VPD, set callouts, and - * start the DRAM sparing procedure, if possible. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t handleMCE_VCM2( STEP_CODE_DATA_STRUCT & io_sc ); - - /** - * @brief Handle MCE event during DSD Phase 2 - * @param io_sc Service data collector. - * @note This will update bad bits information in VPD and set callouts. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t handleMCE_DSD2( STEP_CODE_DATA_STRUCT & io_sc ); - - /** - * @brief Will set the threshold for all runtime ETE attentions in - * hardware. - * @note This only sets the runtime thresholds but is a common function - * because these thresholds will need to be set before starting the - * initial fast scrub at the end of Hostboot. - * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. - */ - virtual int32_t setRtEteThresholds(); - - /** - * @brief This class is designed such that all functions will eventually - * return any bad error code to the top level public functions such - * as handleCmdCompleteEvent() and handleTdEvent(). This is a common - * function to handle everything needed to that the TD controller - * can hopefully fail gracefully. - * @param io_sc The step code data struct. - */ - virtual void badPathErrorHandling( STEP_CODE_DATA_STRUCT & io_sc ); - - /** - * @brief Add signature to SDC - * @param io_sc Service data collector. - * @param i_sig Error Signature. - * @note All signatures in TD controller are scoped to the targeted MBA. - * However, it is possible that the attention that triggered this - * TD request came from one of the MBSECCFIRs, which are on the - * MEMBUF. So, change the chip ID in the signature to the targeted - * MBA to avoid an "Undefined error code". - */ - void setTdSignature( STEP_CODE_DATA_STRUCT & io_sc, uint32_t i_sig ); - - protected: // instance variables - - /** The MBA chip that this TD controller acts on. */ - ExtensibleChip * iv_mbaChip; - - /** The MEMBUF chip connected iv_mbaChip. */ - ExtensibleChip * iv_membChip; - - /** The MBA target associated with iv_mbaChip. */ - TARGETING::TargetHandle_t iv_mbaTrgt; - - /** The position number (0-1) relative to the connected MEMBUF. */ - uint32_t iv_mbaPos; - - /** TRUE if DIMM has x4 DRAMs, FALSE if DIMM has x8 DRAMs. */ - bool iv_x4Dimm; - - /** Indicates if TD controller is initialized. */ - bool iv_initialized; - - /** The targeted diagnostics state variable (see enum TdState). */ - TdState iv_tdState; - - /** The current rank that is being targeted for diagnostics. */ - CenRank iv_rank; - - /** The current mark that is being targeted for diagnostics. */ - CenMark iv_mark; - - /** Current maintenance command */ - PlatServices::mss_MaintCmdWrapper * iv_mssCmd; - - /** Tells if in DSD procedure we should use eccSpare. */ - bool iv_isEccSteer; - -}; // CenMbaTdCtlrCommon - -} // end namespace PRDF - -#endif // __prdfCenMbaTdCtlr_common_H - |