summaryrefslogtreecommitdiffstats
path: root/src/include/usr
diff options
context:
space:
mode:
authorChris Phan <cphan@us.ibm.com>2012-03-20 14:00:18 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-04-19 11:11:05 -0500
commit1b0a35720413defe69a4944331d937284ba7e755 (patch)
tree3ca7a41e95a66b08943c419ff6ab844e718d865a /src/include/usr
parent22a489a13ad5fde3d584b3c770178c9018a21e4f (diff)
downloadtalos-hostboot-1b0a35720413defe69a4944331d937284ba7e755.tar.gz
talos-hostboot-1b0a35720413defe69a4944331d937284ba7e755.zip
Initial PRD code structure in Hostboot
- RTC: 37733 - Add HUID debug trace and update from review comments Change-Id: I3894c1daa1fae4c307816ad3fab4014a38fca786 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/776 Tested-by: Jenkins Server Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/include/usr')
-rwxr-xr-xsrc/include/usr/diag/prdf/prdf_proto.H199
-rwxr-xr-xsrc/include/usr/diag/prdf/prdf_service_codes.H119
-rw-r--r--src/include/usr/hbotcompid.H9
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...
OpenPOWER on IntegriCloud