diff options
Diffstat (limited to 'src/include/usr')
-rwxr-xr-x | src/include/usr/diag/prdf/prdf_proto.H | 199 | ||||
-rwxr-xr-x | src/include/usr/diag/prdf/prdf_service_codes.H | 119 | ||||
-rw-r--r-- | src/include/usr/hbotcompid.H | 9 |
3 files changed, 327 insertions, 0 deletions
diff --git a/src/include/usr/diag/prdf/prdf_proto.H b/src/include/usr/diag/prdf/prdf_proto.H new file mode 100755 index 000000000..4a4d0a267 --- /dev/null +++ b/src/include/usr/diag/prdf/prdf_proto.H @@ -0,0 +1,199 @@ +// IBM_PROLOG_BEGIN_TAG +// This is an automatically generated prolog. +// +// $Source: src/include/usr/diag/prdf/prdf_proto.H $ +// +// IBM CONFIDENTIAL +// +// COPYRIGHT International Business Machines Corp. 2012 +// +// p1 +// +// Object Code Only (OCO) source materials +// Licensed Internal Code Source Materials +// IBM HostBoot Licensed Internal Code +// +// The source code for this program is not published or other- +// wise divested of its trade secrets, irrespective of what has +// been deposited with the U.S. Copyright Office. +// +// Origin: 30 +// +// IBM_PROLOG_END + + +#ifndef PRDF_PROTO_H +#define PRDF_PROTO_H + +/** + * @file prdf_proto.H + * @brief Interface to Processor Run-time Diagnostics (PRD) + * @par + * This includes all type definitions, function interfaces/contracts and + * return codes for PRD. + * These prototypes specify the functions that can be called externally + * from other binds. + */ + + +#include <stdint.h> +#include <errlentry.H> +#include <target.H> + +namespace PRDF +{ + +// Move here from iipsdbug.h +/** + * @brief Enum specifying attention type + */ +enum ATTENTION_VALUE_TYPE +{ + INVALID_ATTENTION_TYPE = 0, + MACHINE_CHECK = 1, + CHECK_STOP = MACHINE_CHECK, + UNIT_CS = 2, + PROC_CS = UNIT_CS, + RECOVERABLE = 3, + SPECIAL = 4, + END_ATTENTION_TYPE = 5 +}; + +// Move here from xspprdsdbug.C +/** + * @brief Structure of target handle and its attention type + */ +struct AttnData +{ + TARGETING::TargetHandle_t targetHndl; + ATTENTION_VALUE_TYPE attnType; +}; + +typedef std::vector<AttnData> AttnList; + + +/** + * @brief Enum specifying all possible PRD returned code + */ +enum prd_return_code_t +{ + //! DD00: An assert statement failed in PRD + PRD_ASSERT = 0xDD00, + + //! DD01: An attention of this type is not expected + PRD_INVALID_ATTENTION_TYPE = 0xDD01, + + /*! DD02: A Scan Comm Register Read indicates no bits are set in the SCR + where active bits were expected */ + PRD_SCAN_COMM_REGISTER_ZERO = 0xDD02, + + /*! DD03: Attempted to cross a chip connection but could not resolve target + * chip */ + PRD_UNRESOLVED_CHIP_CONNECTION = 0xDD03, + + //! DD05: Error is internal to PRD code + PRD_INTERNAL_CODE_ERROR = 0xDD05, + + //! DD09: Failure accessing attention data from Registry + PRD_ATTN_DATA_ACCESS_FAILED = 0xDD09, + + //! DD11: SRC ACCESS FAILED + SCR_ACCESS_FAILED = 0xDD11, + + //! DD12: HOM ACCESS FAILED + HOM_ACCESS_FAILED = 0xDD12, + + //! DD20: System Analyze() is called with no domains in System (init failed?) + NO_DOMAINS_IN_SYSTEM = 0xDD20, + + //! DD21: System Analyze() is called, but no domains in the system are at attention + NO_DOMAINS_AT_ATTENTION = 0xDD21, + + //! DD23: PRD did not perform an analysis - Unknown chip raised attention + NO_PRD_ANALYSIS = 0xDD23, + + //! DD24: prdMain() called before prdInitialize() + PRD_NOT_INITIALIZED = 0xDD24, + + //! DD28: PrdStartScrub failure + PRD_RBS_START_SCRUB_ERROR = 0xDD28, + + //! DD29: PrdResoreRbs failure + PRD_RBS_RESTORE_ERROR = 0xDD29, + + //! DD81: Multiple bits on in Error Register + PRD_MULTIPLE_ERRORS = 0xDD81, + + //! DD90: Scan comm access from Error Register failed + PRD_SCANCOM_FAILURE = 0xDD90, + + //! DD91: Scan comm access from Error Register failed due to Power Fault + PRD_POWER_FAULT = 0xDD91, + + //! DDFF: Special return code indicating Not to reset or mask FIR bits. + PRD_NO_CLEAR_FIR_BITS = 0xDDFF, + + //! 7FFD: word13 of src 7FFDxxxx - An assert failed in PRD + PRD_ASSERT_ERROR_SIGNATURE = 0x7FFD, + + //! 7FFF: word13 of src 7FFFxxxx - xxxx will describe the error + PRD_EXECUTION_ERROR_SIGNATURE = 0x7FFF + +}; + + +/** + * @brief Initialize PRD system model and data + * @return - Error log if error occurs + */ +extern errlHndl_t PrdInitialize(); + +/** + * @brief analyze attention errors + * @param[in] i_attnType - global attention type + * @param[in] i_attnList - list of chips at attention + * @return - Error log if error occurs + * + * @note If the i_attnType is CHECK_STOP than an error log is returned + * containing the analysis; otherwise, for other attention types, PRD + * commits the error log itself and NULL is returned. + */ +extern errlHndl_t PrdMain(ATTENTION_VALUE_TYPE i_attnType, const AttnList & i_attnList); + +/** + * @brief initiate memory background scrubbing + * @param[in] i_pTarget - Target handle of System or Node + * @return - Error log if error occurs + */ +extern errlHndl_t PrdStartScrub(const TARGETING::TargetHandle_t i_pTarget); + +/** + * @brief Restores hardware DRAM repairs to reflect what is stored in VPD. + * @param[in] i_pTarget - Target handle of the memory controller + * @return Non-SUCCESS if conditions are such that a callout had to be made, SUCCESS othewise. + */ +extern int32_t prdfRestoreDramRepairs(const TARGETING::TargetHandle_t i_pTarget); + + +/** + * @brief Clean up pieces of PRD for fresh IPLs. + * + * Cleans up the PRD persistent storage areas in P1. + */ +extern void PrdIplCleanup(); + + +#ifndef __HOSTBOOT_MODULE + +/** + * @brief handle service data collector sync over + * @return - Error log if error occurs + */ +extern errlHndl_t prdfFailoverComplete(void); + +#endif + + +} // End namespace PRDF + +#endif // PRDF_PROTO_H diff --git a/src/include/usr/diag/prdf/prdf_service_codes.H b/src/include/usr/diag/prdf/prdf_service_codes.H new file mode 100755 index 000000000..0ac17a978 --- /dev/null +++ b/src/include/usr/diag/prdf/prdf_service_codes.H @@ -0,0 +1,119 @@ +// IBM_PROLOG_BEGIN_TAG +// This is an automatically generated prolog. +// +// $Source: src/include/usr/diag/prdf/prdf_service_codes.H $ +// +// IBM CONFIDENTIAL +// +// COPYRIGHT International Business Machines Corp. 2012 +// +// p1 +// +// Object Code Only (OCO) source materials +// Licensed Internal Code Source Materials +// IBM HostBoot Licensed Internal Code +// +// The source code for this program is not published or other- +// wise divested of its trade secrets, irrespective of what has +// been deposited with the U.S. Copyright Office. +// +// Origin: 30 +// +// IBM_PROLOG_END + + +/** + @file prdf_service_codes.H + @brief File contains file IDs and reason codes +*/ + +// NOTE: the change log is at the bottom of the file + +#ifndef prdf_services_codes_H +#define prdf_services_codes_H + +#ifdef __HOSTBOOT_MODULE + +#include <hbotcompid.H> +#define PRDF_COMP_ID HBPRDF_COMP_ID //FIXME: will need to make a change in hbotcompid.H later +#define PRDF_COMP_NAME HBPRDF_COMP_NAME //FIXME + +#else + +#include <fips_comp_id.H> + +#endif + +/** + * @brief Enum specifying File IDs + */ +enum +{ + PRDF_FILE_ID = (PRDF_COMP_ID << 16) | 0x0001 +}; + + +/** + * @brief Enum specifying "Module ids" for prdf CODE_FAIL SRCs. + * Each module Id corresponds to a particular + * method in a class or an individual function. + */ +enum prdfModId +{ + PRDF_MAIN = 0x01, + PRDF_HOM_HOM_TYPE = 0x02, + PRDF_HOM_SCOM = 0x03, + PRDF_HOM_SCAN = 0x04, + PRDF_SDBUG_INIT = 0x05, + PRDF_PRDRLOADCHIP = 0x06, + PRDF_PRDFRULECHIP = 0x07, + PRDF_EXTENSIBLEDOMAIN = 0x08, + PRDF_ERRLSMARTPTR = 0x09, + PRDF_ASSERT = 0x0A +}; + +/*********************************************************************************************/ +// NOTE!!! PLEASE READ THIS IF YOU ADD A NEW REASON CODE: +// Each new Reason code must have Service Tags (for the Serviceablity tools). +// The tags need to be in a .C file - the tools won't pick up if in a .H file. +// In theory the tags should be right in with the code that generates the Reason Code. +// For prdf this is not possible in most instances. +// prdf_ras_services.C is the default place holder for the Service tags. +// So the Service tags should be either added to a prdf .C file for a unique instance, or in ras services. +/*********************************************************************************************/ + +/** + * @brief Enum specifying Reason Codes (Refcodes), start at 0xE501 (through 0xE5FF) + */ +enum +{ + PRDF_HARDWARE_FAIL = PRDF_COMP_ID | 0x01, + PRDF_FIRST_REASONCODE = PRDF_COMP_ID | 0x01, //Start of PRD Reason code range + + PRDF_THERMAL_FAIL = PRDF_COMP_ID | 0x03, //PRD Thermal Error Log + + //Note: ranges from 0x04 through -0x3f are reserved for when callouts are all hardware only. + PRDF_DETECTED_FAIL_HARDWARE = PRDF_COMP_ID | 0x04, + + //Note: ranges from 0x40 through 0x4f are reserved for when callouts are Hardware, but also include Software or Second Level Support. + PRDF_DETECTED_FAIL_HARDWARE_PROBABLE = PRDF_COMP_ID | 0x40, + + //Note: ranges from 0x50 through 0x5f are reserved for when at least one callout is Software High, and also include some hardware callouts. + PRDF_DETECTED_FAIL_SOFTWARE_PROBABLE = PRDF_COMP_ID | 0x50, + + //Note: ranges from 0x60 through 0x6f are reserved for when callouts are all Software and Second Level Support only. + PRDF_DETECTED_FAIL_SOFTWARE = PRDF_COMP_ID | 0x60, + + //Note: ranges from 0x70 through 0x7f are currently reserved (unused). + + //Note: ranges from 0x80 through 0xff are reserved for PRD software callouts. When PRD detects a code problem in PRD itself or as a result of interaction with another FSP component. . + PRDF_CODE_FAIL = PRDF_COMP_ID | 0x80, //This is the 'generic' PRD analysis internal code error. + + PRDF_ECMD_DATA_BUFFER_FAIL = PRDF_COMP_ID | 0x81, //Error from ecmdDataBuffer + + + + PRDF_LAST_REASONCODE = PRDF_COMP_ID | 0xFF //End of PRD Reason code range, update if range chgs +}; + +#endif //prdf_services_codes_H diff --git a/src/include/usr/hbotcompid.H b/src/include/usr/hbotcompid.H index 7888327f3..8f257680a 100644 --- a/src/include/usr/hbotcompid.H +++ b/src/include/usr/hbotcompid.H @@ -194,6 +194,14 @@ const compId_t MVPD_COMP_ID = 0x1200; const char MVPD_COMP_NAME[] = "mvpd"; //@} +/** @name PRDF + * PRDF component + */ +//@{ +const compId_t HBPRDF_COMP_ID = 0x1300; //FIXME working with ERRL owner to resolve errl parsing issue +const char HBPRDF_COMP_NAME[] = "prdf"; //FIXME +//@} + /** @name RESERVED * Reserved component ID. x3100 is the component ID * of FipS ERRL component. Due to our use of @@ -203,6 +211,7 @@ const char MVPD_COMP_NAME[] = "mvpd"; //@{ const compId_t FIPS_ERRL_COMP_ID = 0x3100; const char FIPS_ERRL_COMP_NAME[] = "hb-trace"; +//@} // ---------------------------------------------------------- // CXXTEST Unit Test, reserve compid near the end... |