summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/build/tools/genIStep.pl12
-rw-r--r--src/include/usr/errl/errlentry.H92
-rw-r--r--src/include/usr/errl/errlprvt.H48
-rw-r--r--src/include/usr/hwpf/hwp/hwpisteperror.H176
-rw-r--r--src/include/usr/hwpf/hwp/hwpistepud.H143
-rw-r--r--src/include/usr/hwpf/hwp/hwpistepudparserfactory.H68
-rw-r--r--src/include/usr/hwpf/istepreasoncodes.H64
-rw-r--r--src/usr/errl/errlprvt.C50
-rw-r--r--src/usr/errl/parser/errlparser.C52
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C48
-rw-r--r--src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C67
-rw-r--r--src/usr/hwpf/hwp/core_activate/core_activate.C90
-rw-r--r--src/usr/hwpf/hwp/dmi_training/dmi_training.C119
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/dram_initialization.C127
-rw-r--r--src/usr/hwpf/hwp/dram_training/dram_training.C208
-rw-r--r--src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C68
-rw-r--r--src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C12
-rw-r--r--src/usr/hwpf/hwp/hwpisteperror.C71
-rw-r--r--src/usr/hwpf/hwp/hwpistepud.C57
-rw-r--r--src/usr/hwpf/hwp/makefile48
-rw-r--r--src/usr/hwpf/hwp/mc_config/mc_config.C106
-rw-r--r--src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C143
-rw-r--r--src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C40
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/slave_sbe.C38
-rw-r--r--src/usr/hwpf/plugins/hwpfParse.C47
-rw-r--r--src/usr/hwpf/test/hwpisteperrortest.H234
26 files changed, 1982 insertions, 246 deletions
diff --git a/src/build/tools/genIStep.pl b/src/build/tools/genIStep.pl
index 9e1c362b0..f3490432b 100755
--- a/src/build/tools/genIStep.pl
+++ b/src/build/tools/genIStep.pl
@@ -329,6 +329,8 @@ my $templateCFileHdr =
#include <fapi.H>
#include <fapiPlatHwpInvoker.H>
+#include <hwpisteperror.H>
+
#include \"\@istepname.H\"
// Uncomment these files as they become available:
@@ -345,6 +347,7 @@ namespace \@\@istepname
{
using namespace TARGETING;
+using namespace ISTEP_ERROR;
using namespace fapi;
";
##### end templateCFileNSHdr #####################################
@@ -361,12 +364,14 @@ my $templateCFileSubStep =
//
void* call_\@substepname( void *io_pArgs )
{
- errlHndl_t l_errl = NULL;
+
+ IStepError l_StepError;
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
\"call_\@substepname entry\" );
#if 0
+ errlHndl_t l_errl = NULL;
// \@\@\@\@\@ CUSTOM BLOCK: \@\@\@\@\@
// figure out what targets we need
// customize any other inputs
@@ -390,6 +395,9 @@ void* call_\@substepname( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
\"ERROR : \@substepname, errorlog PLID=0x%x\",
lerrl->plid() );
+
+ l_StepError.addErrorDetails( __REASON_CODE__, __MODULE_ID__, l_errl);
+
errlCommit( l_errl, HWPF_COMP_ID );
}
else
@@ -404,7 +412,7 @@ void* call_\@substepname( void *io_pArgs )
\"call_\@substepname exit\" );
// end task, returning any errorlogs to IStepDisp
- return l_errl ;
+ return l_StepError.getErrorHandle();
}
";
##### end templateCFileSubStep #################################
diff --git a/src/include/usr/errl/errlentry.H b/src/include/usr/errl/errlentry.H
index bc9d8a32a..e92a362b9 100644
--- a/src/include/usr/errl/errlentry.H
+++ b/src/include/usr/errl/errlentry.H
@@ -198,19 +198,28 @@ public:
*/
void setModuleId( const uint8_t i_moduleId );
+ /**
+ * @brief Get the unique error log identifier (EID) of the error log.
+ *
+ * @return The error log ID of the error log.
+ */
+ uint32_t eid() const;
/**
- * @brief Get the unique platform log identifier (PLID) of the error log.
- * In legacy FSP, you could have one platform log ID such that a
- * of entry IDs (EIDs) related to a single PLID. So far in Hostboot,
- * PLID == EID. As such, there is no setter in the ErrlEntry interface
- * for EID. When flattened as PEL for export, EID will be set to PLID.
+ * @brief Get the platform log identifier (PLID) of the error log.
+ * In legacy FSP, you could have one platform log ID such that a series
+ * of entry IDs (EIDs) related to a single PLID.
*
* @return The platform log ID of the error log.
*/
uint32_t plid() const;
-
+ /**
+ * @brief Set the platform log id for this error log.
+ *
+ * @return The platform log ID of the error log.
+ */
+ void plid( uint32_t i_plid);
/**
* @brief Get the event type of the error log.
@@ -291,7 +300,40 @@ public:
*/
void setTermState(const errlTermState_t i_termState);
+ /**
+ * @brief Add data to the iv_Src user data words.
+ *
+ * @param[in] i_data - information to add to the user data word 1.
+ *
+ * @return void
+ *
+ */
+ void addUserData1( const uint64_t i_data );
+ /**
+ * @brief Add data to the iv_Src user data words.
+ *
+ * @param[in] i_data - information to add to the user data word 2.
+ *
+ * @return void
+ *
+ */
+ void addUserData2( const uint64_t i_data );
+ /**
+ * @brief Return iv_Src user data words.
+ *
+ * @return data1 word from SRC
+ *
+ */
+ uint64_t getUserData1() const;
+
+ /**
+ * @brief Return iv_Src user data words.
+ *
+ * @return data2 word from SRC
+ *
+ */
+ uint64_t getUserData2() const;
/**
* @brief Allows the caller to add a chunk of FFDC data in a log
@@ -498,11 +540,21 @@ private:
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
+inline uint32_t ErrlEntry::eid() const
+{
+ return iv_Private.iv_eid;
+}
+
inline uint32_t ErrlEntry::plid() const
{
return iv_Private.iv_plid;
}
-
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
+inline void ErrlEntry::plid( uint32_t i_plid)
+{
+ iv_Private.iv_plid = i_plid;
+}
////////////////////////////////////////////////////////////////////////////
@@ -549,6 +601,32 @@ inline void ErrlEntry::setReasonCode( const uint16_t i_reasonCode )
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
+inline void ErrlEntry::addUserData1( const uint64_t i_data )
+{
+ iv_Src.iv_user1 = i_data;
+}
+
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
+inline void ErrlEntry::addUserData2( const uint64_t i_data )
+{
+ iv_Src.iv_user2 = i_data;
+}
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
+inline uint64_t ErrlEntry::getUserData1() const
+{
+ return iv_Src.iv_user1;
+}
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
+inline uint64_t ErrlEntry::getUserData2() const
+{
+ return iv_Src.iv_user2;
+}
+
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
inline uint16_t ErrlEntry::reasonCode() const
{
return iv_Src.iv_reasonCode;
diff --git a/src/include/usr/errl/errlprvt.H b/src/include/usr/errl/errlprvt.H
index d8086b50b..86bfb820a 100644
--- a/src/include/usr/errl/errlprvt.H
+++ b/src/include/usr/errl/errlprvt.H
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/include/usr/errl/errlprvt.H $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2011
-//
-// 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
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/errl/errlprvt.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#ifndef ERRLPRVT_H
#define ERRLPRVT_H
@@ -110,10 +110,10 @@ private:
uint64_t iv_committed; // TODO Expects BCD_time8_t, but using timebase
uint8_t iv_cid; // Creator 'B' (enum errlCreator)
uint8_t iv_sctns; // count of sections
- uint32_t iv_plid; // error log id
+ uint32_t iv_plid; // platform log id
+ uint32_t iv_eid; // Error Log ID
// uint8_t iv_cssver[CSS_VER]; // TODO unused now, do we need this?
- // uint32_t iv_eid; // TODO Error ID now same as PLID
};
diff --git a/src/include/usr/hwpf/hwp/hwpisteperror.H b/src/include/usr/hwpf/hwp/hwpisteperror.H
new file mode 100644
index 000000000..1f7be8213
--- /dev/null
+++ b/src/include/usr/hwpf/hwp/hwpisteperror.H
@@ -0,0 +1,176 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/hwpf/hwp/hwpisteperror.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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __ISTEPERROR_H
+#define __ISTEPERROR_H
+/**
+ * @file isteperror.H
+ *
+ * Defines the following classes:
+ *
+ * IStepError: Handles creation of a top level error to incidate that a
+ * particular ISTEP has failed, all hwp error plids are added
+ * to the top level error.
+ */
+
+#include <errl/errlentry.H>
+#include <hwpf/istepreasoncodes.H>
+
+
+namespace ISTEP_ERROR
+{
+ /**
+ * @class IStepError
+ *
+ * Inteface to the a top level error log returned to the ISTEP dispatcher when
+ * an individual step fails due to an error in a hardware procedure.
+ *
+ * The class may be used to aggregate the errors returned from procedures
+ * which may have been run in parallel. The top level error log will
+ * indicate the failed step and the module in which the error was created.
+ * Callers should note that only the addErrorDetails call should be used
+ * within a thread.
+ *
+ * NOTE: This class returns an allocated error log object which needs to
+ * deleted by the reciever.
+ * users must call getErrorHandle() to recieve the pointer which can
+ * be deleted.
+ *
+ */
+ class IStepError
+ {
+ public:
+ /**
+ * @brief
+ */
+ IStepError()
+ : iv_eHandle(NULL), iv_errorCount(0)
+ {
+ mutex_init( &iv_mutex );
+ };
+
+ /**
+ * @brief Destructor
+ *
+ * Will free internal storage if getErrorHandle is not called
+ */
+ ~IStepError()
+ {
+ mutex_destroy( &iv_mutex );
+
+ if( iv_eHandle )
+ {
+ delete iv_eHandle;
+ }
+ };
+
+ /**
+ * @brief Adds selected error details from the passed in
+ * error to the top level istep error log object
+ *
+ * The expected usage for this object is to agrigate
+ * errors which may have been generated by hardware
+ * procedures which are run in parallel.
+ *
+ * The first call will initialize the internal object
+ * pointer allocating a new errl object as needed.
+ * Subsequent calls to this function will result in a new
+ * user data section being added to the top level error
+ * log with additional error data from the error handle
+ * passed in.
+ *
+ * NOTE: This function is thread safe.
+ *
+ * @param: reasoncode - reason code identifying which Istep has
+ * failed
+ * @param: modid - module id identifying which module or
+ * procedure has caused the error to be
+ * created
+ *
+ * @param i_err - error handle passed in, the internal code
+ * will parse specific details from the log
+ * passed in to include in the top level elog.
+ */
+ void addErrorDetails(ISTEP::istepReasonCode reasoncode,
+ ISTEP::istepModuleId modid,
+ errlHndl_t i_err );
+
+ /**
+ * @brief Return an errlHndl_t which points to the internal error
+ * log object.
+ *
+ * Note: Caller must delete the errlHndl_t after use.
+ * This funciton is not thread safe
+ *
+ * @return iv_eHandle - error handle of top level ISTEP error to
+ * be returned to the ISTEP dispatcher.
+ *
+ */
+ errlHndl_t getErrorHandle();
+
+ /**
+ * @brief Utility function to determine if the internal error handle
+ * is null.
+ *
+ * @return boolean
+ * true indicates errl handle is currently NULL;
+ * false indicates error object has been
+ * allocated;
+ *
+ * Note: This funciton is not thread safe
+ *
+ */
+ bool isNull() const { return ((iv_eHandle == NULL ) ? true : false); };
+
+ private:
+
+ // disable copy constructor
+ IStepError(const IStepError&);
+
+ // serialize access to the internal data area
+ mutex_t iv_mutex;
+
+ // pointer to the top level ISTEP error log, this log will be
+ // passed back to the istep dispatcher when a hardware proceudre
+ // fails.
+ errlHndl_t iv_eHandle;
+
+ // count placed in user data 3 of the error log to indicate how
+ // many errors were captured in this top level elog
+ uint32_t iv_errorCount;
+
+ };
+
+ inline errlHndl_t IStepError::getErrorHandle()
+ {
+ errlHndl_t l_err = iv_eHandle;
+
+ // storage will be freed by destructor if the pointer is non-null
+ iv_eHandle = NULL;
+
+ return l_err;
+ };
+
+
+};
+
+#endif
diff --git a/src/include/usr/hwpf/hwp/hwpistepud.H b/src/include/usr/hwpf/hwp/hwpistepud.H
new file mode 100644
index 000000000..ab0d486c4
--- /dev/null
+++ b/src/include/usr/hwpf/hwp/hwpistepud.H
@@ -0,0 +1,143 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/hwpf/hwp/hwpistepud.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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef INITSVC_UDSTEP_H
+#define INITSVC_UDSTEP_H
+
+/**
+ * @file initsvcudistep.H
+ *
+ * Defines the following classes:
+ *
+ * IStepUserDetailsIstep: Adds IStep FFDC to an error log as user detail data
+ * IStepUserDetailsParserIstep: Parses IStep FFDC user detail in an error log
+ */
+
+#include <errl/errluserdetails.H>
+
+// user data type for istep error details
+static const uint32_t HWP_UDT_STEP_ERROR_DETAILS = 0x01;
+
+namespace ISTEP_ERROR
+{
+
+ /**
+ * @struct IStepUserDetailsIstepData
+ *
+ * Defines the user detail data
+ */
+ struct HwpUserDetailsIstepErrorData
+ {
+ uint32_t eid;
+ uint32_t reasoncode;
+ };
+
+#ifndef PARSER
+
+ /**
+ * @class IStepUserDetailsIstep
+ *
+ * Adds IStep FFDC to an error log as user detail data
+ */
+ class HwpUserDetailsIstep : public ERRORLOG::ErrlUserDetails
+ {
+ public:
+ /**
+ * @brief Constructor
+ *
+ * Captures the supplied IStep FFDC data internally
+ *
+ * @param i_err error log returned by hardware procdure
+ *
+ */
+ HwpUserDetailsIstep( errlHndl_t i_err);
+
+ HwpUserDetailsIstep( );
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~HwpUserDetailsIstep();
+
+ private:
+ // Disabled
+ HwpUserDetailsIstep(const HwpUserDetailsIstep &);
+ HwpUserDetailsIstep & operator=(const HwpUserDetailsIstep &);
+ };
+
+#else // (if PARSER defined)
+
+ /**
+ * @class IStepUserDetailsParserIstep
+ *
+ * Parses Istep user detail in an error log
+ */
+ class HwpUserDetailsParserIstep : public ERRORLOG::ErrlUserDetailsParser
+ {
+ public:
+ /**
+ * @brief Constructor
+ */
+ HwpUserDetailsParserIstep() {}
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~HwpUserDetailsParserIstep() {}
+
+ /**
+ * @brief Parses Istep user detail data from an error log
+ *
+ * @param i_version Version of the data
+ * @param i_parse ErrlUsrParser object for outputting
+ * information
+ * @param i_pBuffer Pointer to buffer containing detail data
+ * @param i_buflen Length of the buffer
+ */
+ virtual void parse(errlver_t i_version,
+ ErrlUsrParser & i_parser,
+ void * i_pBuffer,
+ const uint32_t i_buflen) const
+ {
+ HwpUserDetailsIstepErrorData * l_pData =
+ static_cast<HwpUserDetailsIstepErrorData *>(i_pBuffer);
+
+ i_parser.PrintNumber("See error log ID:","0x%X",
+ ntohl(l_pData->eid));
+
+ i_parser.PrintNumber("Reasoncode:","0x%X",
+ ntohl(l_pData->reasoncode) );
+ }
+
+ private:
+ // Disabled
+ HwpUserDetailsParserIstep(const HwpUserDetailsParserIstep &);
+ HwpUserDetailsParserIstep & operator=(
+ const HwpUserDetailsParserIstep &);
+ };
+#endif
+
+}
+
+#endif
+
+
diff --git a/src/include/usr/hwpf/hwp/hwpistepudparserfactory.H b/src/include/usr/hwpf/hwp/hwpistepudparserfactory.H
new file mode 100644
index 000000000..be89a89f6
--- /dev/null
+++ b/src/include/usr/hwpf/hwp/hwpistepudparserfactory.H
@@ -0,0 +1,68 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/hwpf/hwp/hwpistepudparserfactory.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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __ISTEP_UDPARSERFACTORY_H
+#define __ISTEP_UDPARSERFACTORY_H
+
+#ifdef PARSER
+
+/**
+ * @file initsvcudparserfactory.H
+ *
+ * Defines the IStepUserDetailsParserFactory.H class
+*/
+#include <hwpf/istepvcreasoncodes.H>
+#include <errl/errludparserfactory.H>
+
+namespace INITSERVICE
+{
+
+/**
+ * @class IStepUserDetailsParserFactory
+ *
+ * This factory produces ErrlUserDetailsParser objects to parse the specified
+ * InitService user detail data.
+*/
+class IStepUserDetailsParserFactory : public ERRORLOG::ErrlUserDetailsParserFactory
+{
+public:
+
+ /**
+ * @brief Constructor
+ */
+ IStepUserDetailsParserFactory()
+ {
+ registerParser<IStepUserDetailsParserIstep>( ISTEP_UDT_PLID );
+ }
+
+private:
+
+ // Disabled
+ IStepUserDetailsParserFactory(const IStepUserDetailsParserFactory &);
+ IStepUserDetailsParserFactory & operator=(
+ const IStepUserDetailsParserFactory &);
+};
+
+}
+
+#endif
+#endif
diff --git a/src/include/usr/hwpf/istepreasoncodes.H b/src/include/usr/hwpf/istepreasoncodes.H
index 084f633ae..72e852827 100644
--- a/src/include/usr/hwpf/istepreasoncodes.H
+++ b/src/include/usr/hwpf/istepreasoncodes.H
@@ -50,9 +50,50 @@ enum istepModuleId
ISTEP_STARTPAYLOAD_EXECUTE_UNIT_TESTS = 0x01,
ISTEP_START_PAYLOAD_CALL_SHUTDOWN = 0x02,
ISTEP_START_PAYLOAD_NOTIFY_FSP = 0x03,
- ISTEP_ACTIVATE_SLAVE_CORES = 0x04,
+ ISTEP_HOST_ACTIVATE_SLAVE_CORES = 0x04,
ISTEP_BUILD_WINKLE_IMAGES = 0x05,
- ISTEP_CORE_ACTIVATE = 0x06,
+ ISTEP_PROC_STARTCLOCK_CHIPLETS = 0x06,
+ ISTEP_PROC_CHIPLET_SCOMINIT = 0x07,
+ ISTEP_PROC_SCOMOVERRIDE_CHIPLETS = 0x08,
+ ISTEP_FABRIC_IO_RUN_TRAINING = 0x09,
+ ISTEP_PROC_FAB_IOVALID = 0x0a,
+ ISTEP_PROC_BUILD_SMP = 0x0b,
+ ISTEP_MSS_MEMDIAG = 0x0c,
+ ISTEP_MSS_SCRUB = 0x0d,
+ ISTEP_HOST_BUILD_WINKLE = 0x0e,
+ ISTEP_IO_RUN_TRAINING = 0x0f,
+ ISTEP_PROC_CEN_FRAMEWORK = 0x10,
+ ISTEP_MEM_STARTCLOCKS = 0x11,
+ ISTEP_PROC_SET_PORE_BAR = 0x12,
+ ISTEP_PROC_PREP_MASTER_WINKLE = 0x13,
+ ISTEP_HOST_ACTIVATE_MASTER = 0x14,
+ ISTEP_PROC_SETUP_BARS = 0x15,
+ ISTEP_PROC_EXIT_CACHE_CONTAINED = 0x16,
+ ISTEP_MSS_EXTENT_SETUP = 0x17,
+ ISTEP_MSS_SETUP_BARS = 0x18,
+ ISTEP_MSS_SCOMINIT = 0x19,
+ ISTEP_MSS_DDR_PHY_RESET = 0x1a,
+ ISTEP_MSS_DRAMINIT = 0x1b,
+ ISTEP_MSS_DRAMINIT_TRAINING = 0x1c,
+ ISTEP_MSS_DRAMINIT_MC = 0x1d,
+ ISTEP_MSS_VOLT = 0x1e,
+ ISTEP_MSS_FREQ = 0x1f,
+ ISTEP_MSS_EFF_CONFIG = 0x20,
+ ISTEP_SBE_CENTAUR_INIT = 0x21,
+ ISTEP_PROC_REVERT_SBE_MCS_SETUP = 0x22,
+ ISTEP_HOST_IPL_COMPLETE = 0x23,
+ ISTEP_PROC_A_X_PCI_DMI_PLL_INITF = 0x24,
+ ISTEP_PROC_A_X_PCI_DMI_PLL_SETUP = 0x25,
+ ISTEP_PROC_FAPI_POREVE = 0x26,
+ ISTEP_PROC_CEN_FRAMELOCK = 0x27,
+ ISTEP_DMI_SCOMINIT = 0x28,
+ ISTEP_DMI_IO_RUN_TRAINING = 0x29,
+ ISTEP_PROC_OPT_MEMMAP = 0x2a,
+ ISTEP_MEM_PLL_SETUP = 0x2b,
+ ISTEP_PROC_SLW_BUILD = 0x2c,
+ ISTEP_PROC_FAB_IOVALID_EROR = 0x2d,
+ ISTEP_LOAD_PORE_IMAGE = 0x2e,
+ ISTEP_APPLY_PORE_GEN_CPU_REGS = 0x2f,
};
/**
@@ -69,8 +110,23 @@ enum istepReasonCode
ISTEP_MBOX_MSG_NULL = ISTEP_COMP_ID | 0x03,
ISTEP_BAD_RC = ISTEP_COMP_ID | 0x04,
ISTEP_FAIL_MASTER_WINKLE_RC = ISTEP_COMP_ID | 0x05,
-};
-
+ ISTEP_SLAVE_SBE_FAILED = ISTEP_COMP_ID | 0x06,
+ ISTEP_NEST_CHIPLETS_FAILED = ISTEP_COMP_ID | 0x07,
+ ISTEP_EDI_EI_INITIALIZATION_FAILED = ISTEP_COMP_ID | 0x08,
+ ISTEP_ACTIVATE_POWER_BUS_FAILED = ISTEP_COMP_ID | 0x09,
+ ISTEP_SBE_CENTAUR_INIT_FAILED = ISTEP_COMP_ID | 0x0a,
+ ISTEP_DMI_TRAINING_FAILED = ISTEP_COMP_ID | 0x0b,
+ ISTEP_MC_CONFIG_FAILED = ISTEP_COMP_ID | 0x0c,
+ ISTEP_DRAM_TRAINING_FAILED = ISTEP_COMP_ID | 0x0d,
+ ISTEP_DRAM_INITIALIZATION_FAILED = ISTEP_COMP_ID | 0x0e,
+ ISTEP_BUILD_WINKLE_IMAGES_FAILED = ISTEP_COMP_ID | 0x0F,
+ ISTEP_CORE_ACTIVATE_FAILED = ISTEP_COMP_ID | 0x10,
+ ISTEP_STEP_SEVENTEEN = ISTEP_COMP_ID | 0x11,
+ ISTEP_ESTABLISH_SYSTEM_SMP_FAILED = ISTEP_COMP_ID | 0x12,
+ ISTEP_STEP_NINETEEN = ISTEP_COMP_ID | 0x13,
+ ISTEP_LOAD_PAYLOAD_FAILED = ISTEP_COMP_ID | 0x14,
+ ISTEP_START_PAYLOAD_FAILED = ISTEP_COMP_ID | 0x15,
}; // end ISTEP
+}
#endif
diff --git a/src/usr/errl/errlprvt.C b/src/usr/errl/errlprvt.C
index 064d842b8..6b8a85ce2 100644
--- a/src/usr/errl/errlprvt.C
+++ b/src/usr/errl/errlprvt.C
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/usr/errl/errlprvt.C $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2011
-//
-// 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
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/errl/errlprvt.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
/**
* @file errlprvt.C
*
@@ -63,7 +63,7 @@ ErrlPrvt::ErrlPrvt( compId_t i_CreatorCompId ) :
iv_sctns( 0 )
{
// Ask the errl manager for the next ID to assign.
- iv_plid = ERRORLOG::theErrlManager::instance().getUniqueErrId();
+ iv_plid = iv_eid = ERRORLOG::theErrlManager::instance().getUniqueErrId();
// Set the time of creation.
// TODO The field iv_created and iv_committed expect an 8-byte
@@ -118,9 +118,7 @@ uint64_t ErrlPrvt::flatten( void * o_pBuffer, const uint64_t i_cbBuffer )
p->creatorId = iv_cid;
p->sectionCount = iv_sctns;
p->plid = iv_plid;
-
- // TODO In the future, eid may be different than PLID
- p->eid = iv_plid;
+ p->eid = iv_eid;
// return amount of bytes flattened
l_rc = iv_header.iv_slen;
diff --git a/src/usr/errl/parser/errlparser.C b/src/usr/errl/parser/errlparser.C
index 20fcac589..801da1635 100644
--- a/src/usr/errl/parser/errlparser.C
+++ b/src/usr/errl/parser/errlparser.C
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/usr/errl/parser/errlparser.C $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2011
-//
-// 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
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/errl/parser/errlparser.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
/**
@@ -895,13 +895,13 @@ int main( int argc, char *argv[] )
}
printf( "%-16s %8d\n",
FindComp(pPrivateHdr->sectionheader.compId),
- pPrivateHdr->plid );
+ pPrivateHdr->eid );
}
- else if(( fDetail ) && (( pPrivateHdr->plid == ulLogId ) || (fAll)))
+ else if(( fDetail ) && (( pPrivateHdr->eid == ulLogId ) || (fAll)))
{
// Write the native PEL to a temporary file
// for x86 errl tool to display.
- sprintf( szTmpFilename, "/tmp/pel%d.bin", pPrivateHdr->plid );
+ sprintf( szTmpFilename, "/tmp/pel%d.bin", pPrivateHdr->eid );
int fd = open( szTmpFilename, O_RDWR | O_CREAT , 0664 );
if( -1 == fd )
@@ -974,7 +974,7 @@ int main( int argc, char *argv[] )
if( fExtractPEL )
{
// Write the native PEL to a temporary file for debug later.
- sprintf( szTmpFilename, "%s/pel%d.bin", pszOutputDir, pPrivateHdr->plid );
+ sprintf( szTmpFilename, "%s/pel%d.bin", pszOutputDir, pPrivateHdr->eid );
int fd = open( szTmpFilename, O_RDWR | O_CREAT , 0664 );
if( -1 == fd )
diff --git a/src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C b/src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C
index 3b6a834b0..22ad5a613 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C
@@ -45,6 +45,7 @@
#include <errl/errlentry.H>
#include <initservice/isteps_trace.H>
+#include <hwpisteperror.H>
// targeting support
#include <targeting/common/commontargeting.H>
@@ -63,6 +64,8 @@
namespace ACTIVATE_POWERBUS
{
+using namespace ISTEP_ERROR;
+using namespace ISTEP;
using namespace TARGETING;
using namespace EDI_EI_INITIALIZATION;
using namespace fapi;
@@ -75,9 +78,11 @@ using namespace fapi;
//
void* call_proc_build_smp( void *io_pArgs )
{
+
errlHndl_t l_errl = NULL;
+ IStepError l_StepError;
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_proc_build_smp entry" );
// Get all functional proc chip targets
@@ -178,26 +183,45 @@ void* call_proc_build_smp( void *io_pArgs )
l_procChips.push_back( l_procEntry );
}
- // call the HWP with each fapi::Target
- FAPI_INVOKE_HWP( l_errl, proc_build_smp,
- l_procChips, SMP_ACTIVATE_PHASE1 );
+ if(!l_errl)
+ {
+ // call the HWP with each fapi::Target
+ FAPI_INVOKE_HWP( l_errl, proc_build_smp,
+ l_procChips, SMP_ACTIVATE_PHASE1 );
+ }
- if ( l_errl )
+ if(l_errl)
{
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR : proc_build_smp" );
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_ACTIVATE_POWER_BUS_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_BUILD_SMP
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_build_smp has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_ACTIVATE_POWER_BUS_FAILED,
+ ISTEP_PROC_BUILD_SMP,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
}
else
{
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : proc_build_smp" );
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : proc_build_smp" );
}
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "call_proc_build_smp exit" );
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "call_proc_build_smp exit" );
- // end task, returning any errorlogs to IStepDisp
- return l_errl;
+ // end task, returning any errorlogs to IStepDisp
+ return l_StepError.getErrorHandle();
}
diff --git a/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C b/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C
index dd4afe3b5..56f245beb 100644
--- a/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C
+++ b/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C
@@ -43,6 +43,9 @@
#include <initservice/taskargs.H>
#include <errl/errlentry.H>
+#include <hwpisteperror.H>
+#include <errl/errludtarget.H>
+
#include <initservice/isteps_trace.H>
#include <initservice/initsvcreasoncodes.H>
@@ -68,6 +71,9 @@
namespace BUILD_WINKLE_IMAGES
{
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
using namespace TARGETING;
using namespace fapi;
using namespace DeviceFW;
@@ -305,6 +311,8 @@ void* call_host_build_winkle( void *io_pArgs )
void *l_pImageOut = NULL;
uint32_t l_sizeImageOut = MAX_OUTPUT_PORE_IMG_SIZE;
+ ISTEP_ERROR::IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_build_winkle entry" );
@@ -335,6 +343,12 @@ void* call_host_build_winkle( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"host_build_winkle ERROR : Returning errorlog, PLID=0x%x",
l_errl->plid() );
+
+ ErrlUserDetailsTarget myDetails(l_cpu_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_errl);
+
// drop out of loop and return errlog to fail.
break;
}
@@ -376,6 +390,12 @@ void* call_host_build_winkle( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"host_build_winkle ERROR : Returning errorlog, PLID=0x%x",
l_errl->plid() );
+
+ ErrlUserDetailsTarget myDetails(l_cpu_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_errl);
+
// drop out if we hit an error and quit.
break;
}
@@ -399,6 +419,12 @@ void* call_host_build_winkle( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"applyPoreGenCpuRegs ERROR : Returning errorlog, PLID=0x%x",
l_errl->plid() );
+
+ ErrlUserDetailsTarget myDetails(l_cpu_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_errl);
+
// drop out if we hit an error and quit.
break;
}
@@ -407,12 +433,32 @@ void* call_host_build_winkle( void *io_pArgs )
// @@@@@ END CUSTOM BLOCK: @@@@@
+ if(l_errl)
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_BUILD_WINKLE_IMAGES_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_HOST_BUILD_WINKLE
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to host_build_winkle has failed
+ *
+ */
+ l_StepError.addErrorDetails(ISTEP_BUILD_WINKLE_IMAGES_FAILED,
+ ISTEP_HOST_BUILD_WINKLE,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ }
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_build_winkle exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_StepError.getErrorHandle();
}
@@ -425,6 +471,8 @@ void* call_proc_set_pore_bar( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
+ ISTEP_ERROR::IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_proc_set_pore_bar entry" );
@@ -496,6 +544,21 @@ void* call_proc_set_pore_bar( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR : p8_set_pore_bar, PLID=0x%x",
l_errl->plid() );
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_BUILD_WINKLE_IMAGES_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_SET_PORE_BAR
+ * @devdesc call to proc_set_porebar has failed, see
+ * error log identified by the plid in user
+ * data section.
+ */
+ l_stepError.addErrorDetails(ISTEP_BUILD_WINKLE_IMAGES_FAILED,
+ ISTEP_PROC_SET_PORE_BAR,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+
}
else
{
@@ -512,7 +575,7 @@ void* call_proc_set_pore_bar( void *io_pArgs )
"call_proc_set_pore_bar exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_stepError.getErrorHandle();
}
diff --git a/src/usr/hwpf/hwp/core_activate/core_activate.C b/src/usr/hwpf/hwp/core_activate/core_activate.C
index 6bd571751..7072b086f 100644
--- a/src/usr/hwpf/hwp/core_activate/core_activate.C
+++ b/src/usr/hwpf/hwp/core_activate/core_activate.C
@@ -47,6 +47,8 @@
#include <initservice/isteps_trace.H>
#include <initservice/istepdispatcherif.H>
+#include <hwpisteperror.H>
+
// targeting support
#include <targeting/common/commontargeting.H>
#include <targeting/common/utilFilter.H>
@@ -74,6 +76,7 @@ namespace CORE_ACTIVATE
using namespace TARGETING;
using namespace fapi;
using namespace ISTEP;
+using namespace ISTEP_ERROR;
@@ -83,11 +86,13 @@ using namespace ISTEP;
//
void* call_host_activate_master( void *io_pArgs )
{
- errlHndl_t l_errl = NULL;
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_activate_master entry" );
+ errlHndl_t l_errl = NULL;
+ IStepError l_stepError;
+
// @@@@@ CUSTOM BLOCK: @@@@@
do {
@@ -153,7 +158,7 @@ using namespace ISTEP;
* @errortype
* @reasoncode ISTEP_FAIL_MASTER_WINKLE_RC
* @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
- * @moduleid ISTEP_CORE_ACTIVATE
+ * @moduleid ISTEP_HOST_ACTIVATE_MASTER
* @userdata1 return code from cpu_master_winkle
*
* @devdesc p8_pore_gen_cpureg returned an error when
@@ -161,7 +166,7 @@ using namespace ISTEP;
*/
l_errl =
new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- ISTEP_CORE_ACTIVATE,
+ ISTEP_HOST_ACTIVATE_MASTER,
ISTEP_FAIL_MASTER_WINKLE_RC,
l_rc );
break;
@@ -196,13 +201,33 @@ using namespace ISTEP;
} while ( 0 );
// @@@@@ END CUSTOM BLOCK: @@@@@
-
+ if( l_errl )
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_CORE_ACTIVATE_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_HOST_ACTIVATE_MASTER
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to host_activate_master failed see
+ * error identified by the plid in user data
+ * field.
+ */
+ l_stepError.addErrorDetails(ISTEP_CORE_ACTIVATE_FAILED,
+ ISTEP_HOST_ACTIVATE_MASTER,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ }
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_activate_master exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_stepError.getErrorHandle();
}
@@ -216,6 +241,8 @@ void* call_host_activate_slave_cores( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_activate_slave_cores entry" );
@@ -285,11 +312,34 @@ void* call_host_activate_slave_cores( void *io_pArgs )
#endif
// @@@@@ END CUSTOM BLOCK: @@@@@
+ if( l_errl )
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_CORE_ACTIVATE_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_HOST_ACTIVATE_SLAVE_CORES
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ *
+ * @devdesc call to host_activate_master failed see
+ * error identified by the plid in user data
+ * field.
+ */
+ l_stepError.addErrorDetails(ISTEP_CORE_ACTIVATE_FAILED,
+ ISTEP_HOST_ACTIVATE_SLAVE_CORES,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ }
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_activate_slave_cores exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_stepError.getErrorHandle();
}
@@ -302,6 +352,8 @@ void* call_host_ipl_complete( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_ipl_complete entry" );
do
@@ -367,12 +419,34 @@ void* call_host_ipl_complete( void *io_pArgs )
} while( 0 );
+ if( l_err )
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_CORE_ACTIVATE_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_HOST_IPL_COMPLETE
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to host_ipl_complete failed see
+ * error identified by the plid in user data
+ * field.
+ */
+ l_stepError.addErrorDetails(ISTEP_CORE_ACTIVATE_FAILED,
+ ISTEP_HOST_IPL_COMPLETE,
+ l_err );
+
+ errlCommit( l_err, HWPF_COMP_ID );
+ }
+
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "call_host_ipl_complete exit elog ptr = %p", l_err );
+ "call_host_ipl_complete exit ");
// end task, returning any errorlogs to IStepDisp
- return l_err;
+ return l_stepError.getErrorHandle();
}
diff --git a/src/usr/hwpf/hwp/dmi_training/dmi_training.C b/src/usr/hwpf/hwp/dmi_training/dmi_training.C
index 40c3dc18c..eda3786b6 100644
--- a/src/usr/hwpf/hwp/dmi_training/dmi_training.C
+++ b/src/usr/hwpf/hwp/dmi_training/dmi_training.C
@@ -50,6 +50,9 @@
#include <initservice/isteps_trace.H>
+#include <hwpisteperror.H>
+#include <errl/errludtarget.H>
+
// targeting support.
#include <targeting/common/commontargeting.H>
#include <targeting/common/utilFilter.H>
@@ -67,7 +70,9 @@
namespace DMI_TRAINING
{
-
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
using namespace TARGETING;
using namespace fapi;
@@ -78,13 +83,15 @@ void* call_dmi_scominit( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
+ IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_scominit entry" );
uint8_t l_num = 0;
-
+
// Get all functional MCS chiplets
TARGETING::TargetHandleList l_mcsTargetList;
getAllChiplets(l_mcsTargetList, TYPE_MCS);
-
+
// Invoke dmi_scominit on each one
for (l_num = 0; l_num < l_mcsTargetList.size(); l_num++)
{
@@ -94,7 +101,8 @@ void* call_dmi_scominit( void *io_pArgs )
reinterpret_cast<void *>
(const_cast<TARGETING::Target*>(l_pTarget)));
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "Running dmi_scominit HWP on...");
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "Running dmi_scominit HWP on...");
EntityPath l_path;
l_path = l_pTarget->getAttr<ATTR_PHYS_PATH>();
l_path.dump();
@@ -102,8 +110,15 @@ void* call_dmi_scominit( void *io_pArgs )
FAPI_INVOKE_HWP(l_errl, dmi_scominit, l_fapi_target);
if (l_errl)
{
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "ERROR 0x%.8X : dmi_scominit HWP returns error",
- l_errl->reasonCode());
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X : dmi_scominit HWP returns error",
+ l_errl->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_pTarget);
+
+ // capture the target data in the elog
+ myDetails.addToLog( l_errl );
+
break;
}
else
@@ -112,7 +127,7 @@ void* call_dmi_scominit( void *io_pArgs )
}
}
- if (!l_errl)
+ if ( l_StepError.isNull() )
{
// Get all functional membuf chips
TARGETING::TargetHandleList l_membufTargetList;
@@ -137,6 +152,12 @@ void* call_dmi_scominit( void *io_pArgs )
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "ERROR 0x%.8X : dmi_scominit HWP returns error",
l_errl->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_pTarget);
+
+ // capture the target data in the elog
+ myDetails.addToLog( l_errl );
+
break;
}
else
@@ -146,10 +167,33 @@ void* call_dmi_scominit( void *io_pArgs )
}
}
+ if( l_errl )
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DMI_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_DMI_SCOMINIT
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to dmi_scominit has failed, target data
+ * is included in the error logs listed in the
+ * user data section of this error log.
+ *
+ */
+ l_StepError.addErrorDetails(ISTEP_DMI_TRAINING_FAILED,
+ ISTEP_DMI_SCOMINIT,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ }
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_scominit exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_StepError.getErrorHandle();
}
@@ -206,6 +250,8 @@ void* call_dmi_io_run_training( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ ISTEP_ERROR::IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_io_run_training entry" );
TARGETING::TargetHandleList l_cpuTargetList;
@@ -276,6 +322,29 @@ void* call_dmi_io_run_training( void *io_pArgs )
l_cpuNum,
l_mcsNum,
k );
+
+ ErrlUserDetailsTarget myDetails( l_mem_target );
+
+ // capture the target data in the elog
+ myDetails.addToLog( l_err );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DMI_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_DMI_IO_RUN_TRAINING
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to dmi_io_run_training has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_DMI_TRAINING_FAILED,
+ ISTEP_DMI_IO_RUN_TRAINING,
+ l_err);
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break; // Break out mem target loop
}
else
@@ -290,24 +359,24 @@ void* call_dmi_io_run_training( void *io_pArgs )
} //end for l_mem_target
- if (l_err)
+ // if there is an error bail out
+ if ( !l_StepError.isNull() )
{
break; // Break out l_mcs_target
}
} // end for l_mcs_target
- if (l_err)
+ if ( !l_StepError.isNull() )
{
break; // Break out l_cpu_target
}
} // end for l_cpu_target
-
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_io_run_training exit" );
- return l_err;
+ return l_StepError.getErrorHandle();
}
//
@@ -334,6 +403,8 @@ void* call_proc_cen_framelock( void *io_pArgs )
errlHndl_t l_err = NULL;
proc_cen_framelock_args l_args;
+ IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_cen_framework entry" );
// get the mcs chiplets
@@ -389,6 +460,25 @@ void* call_proc_cen_framelock( void *io_pArgs )
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR 0x%.8X : proc_cen_framelock HWP( mem %d )",
l_err->reasonCode(), l_memNum );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DMI_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_CEN_FRAMELOCK
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_cen_framelock has failed
+ *
+ */
+ l_StepError.addErrorDetails(ISTEP_DMI_TRAINING_FAILED,
+ ISTEP_PROC_CEN_FRAMELOCK,
+ l_err);
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break; // break out of mem num loop
}
else
@@ -400,7 +490,8 @@ void* call_proc_cen_framelock( void *io_pArgs )
} // end mem
- if (l_err)
+ // if there is already an error, bail out.
+ if ( !l_StepError.isNull() )
{
break; // break out of mcs loop
}
@@ -409,7 +500,7 @@ void* call_proc_cen_framelock( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_cen_framework exit" );
- return l_err;
+ return l_StepError.getErrorHandle();
}
//
diff --git a/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C b/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C
index 7f0cc87c0..9c2d0667a 100644
--- a/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C
+++ b/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C
@@ -46,6 +46,7 @@
#include <diag/mdia/mdia.H>
#include <diag/attn/attn.H>
#include <initservice/isteps_trace.H>
+#include <hwpisteperror.H>
// targeting support
#include <targeting/common/commontargeting.H>
@@ -80,6 +81,8 @@
namespace DRAM_INITIALIZATION
{
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
using namespace TARGETING;
using namespace EDI_EI_INITIALIZATION;
using namespace fapi;
@@ -145,6 +148,8 @@ void* call_mss_extent_setup( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_mss_extent_setup entry" );
@@ -155,6 +160,24 @@ void* call_mss_extent_setup( void *io_pArgs )
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR : failed executing mss_extent_setup returning error" );
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DRAM_INITIALIZATION_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_EXTENT_SETUP
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_extent_setup has failed, see error log
+ * identified by the plid in user data
+ */
+ l_stepError.addErrorDetails(ISTEP_DRAM_INITIALIZATION_FAILED,
+ ISTEP_MSS_EXTENT_SETUP,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+
}
else
{
@@ -166,7 +189,7 @@ void* call_mss_extent_setup( void *io_pArgs )
"call_mss_extent_setup exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_stepError.getErrorHandle();
}
//
@@ -179,6 +202,8 @@ void* call_mss_memdiag( void *io_pArgs )
errlHndl_t l_errl = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_mss_memdiag entry" );
@@ -211,11 +236,32 @@ void* call_mss_memdiag( void *io_pArgs )
} while (0);
+ if( l_errl )
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DRAM_INITIALIZATION_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_MEMDIAG
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_memdiag has failed, see error log
+ * identified by the plid in user data
+ */
+ l_stepError.addErrorDetails(ISTEP_DRAM_INITIALIZATION_FAILED,
+ ISTEP_MSS_MEMDIAG,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ }
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_mss_memdiag exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_stepError.getErrorHandle();
}
@@ -334,6 +380,7 @@ void* call_proc_setup_bars( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
+ IStepError l_stepError;
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_proc_setup_bars entry" );
@@ -374,6 +421,24 @@ void* call_proc_setup_bars( void *io_pArgs )
if ( l_errl )
{
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DRAM_INITIALIZATION_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_SETUP_BARS
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_setup_bars failed, see error log
+ * identified by the plid in user data 1.
+ */
+ l_stepError.addErrorDetails(ISTEP_DRAM_INITIALIZATION_FAILED,
+ ISTEP_MSS_SETUP_BARS,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR : mss_setup_bars" );
// break and return with error
@@ -394,7 +459,7 @@ void* call_proc_setup_bars( void *io_pArgs )
if ( !TARGETING::is_vpo() )
{
//Now need to scom the L3 bar on my EX to trigger Simics cache contained exit
- if (!l_errl)
+ if (l_stepError.isNull())
{
TARGETING::Target* procTarget = NULL;
TARGETING::targetService().masterProcChipTargetHandle( procTarget );
@@ -421,7 +486,7 @@ void* call_proc_setup_bars( void *io_pArgs )
// @@@@@ end TEMPORARY SIMICS HACK for PHYP 6/1 milestone @@@@@
}
- if ( ! l_errl )
+ if ( l_stepError.isNull() )
{
// -----------------------------------------------------------------------
// run proc_setup_bars on all CPUs
@@ -495,18 +560,41 @@ void* call_proc_setup_bars( void *io_pArgs )
else
{
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : proc_setup-bars" );
+ "SUCCESS : proc_setup_bars" );
}
}
} // end if !l_errl
// @@@@@ END CUSTOM BLOCK: @@@@@
+ if ( l_errl )
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DRAM_INITIALIZATION_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_SETUP_BARS
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_setup_bars has failed, see error log
+ * identified by the plid in user data section.
+ */
+
+ l_stepError.addErrorDetails(ISTEP_DRAM_INITIALIZATION_FAILED,
+ ISTEP_PROC_SETUP_BARS,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+
+ }
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_proc_setup_bars exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_stepError.getErrorHandle();
}
@@ -572,6 +660,8 @@ void* call_proc_exit_cache_contained( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_proc_exit_cache_contained entry" );
@@ -624,13 +714,36 @@ void* call_proc_exit_cache_contained( void *io_pArgs )
rc );
}
+ if ( l_errl )
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DRAM_INITIALIZATION_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_EXIT_CACHE_CONTAINED
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_exit_cache_contained has failed
+ * see error log in the user details section for
+ * additional details.
+ */
+ l_stepError.addErrorDetails(ISTEP_DRAM_INITIALIZATION_FAILED,
+ ISTEP_PROC_EXIT_CACHE_CONTAINED,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+
+ }
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_proc_exit_cache_contained exit" );
// @@@@@ END CUSTOM BLOCK: @@@@@
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_stepError.getErrorHandle();
}
diff --git a/src/usr/hwpf/hwp/dram_training/dram_training.C b/src/usr/hwpf/hwp/dram_training/dram_training.C
index f0efc125e..6a31ad17f 100644
--- a/src/usr/hwpf/hwp/dram_training/dram_training.C
+++ b/src/usr/hwpf/hwp/dram_training/dram_training.C
@@ -51,6 +51,9 @@
#include <targeting/common/util.H>
#include <targeting/common/utilFilter.H>
+#include <hwpisteperror.H>
+#include <errl/errludtarget.H>
+
// fapi support
#include <fapi.H>
#include <fapiPlatHwpInvoker.H>
@@ -84,6 +87,9 @@ const uint8_t VPO_NUM_OF_MEMBUF_TO_RUN = UNLIMITED_RUN;
namespace DRAM_TRAINING
{
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
using namespace TARGETING;
using namespace fapi;
@@ -154,6 +160,9 @@ void* call_host_disable_vddr( void *io_pArgs )
void* call_mem_pll_setup( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+
+ IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mem_pll_setup entry" );
//TODO - Enable this procedure in SIMICs when RTC 46643 is done.
@@ -164,7 +173,7 @@ void* call_mem_pll_setup( void *io_pArgs )
"WARNING: mem_pll_setup HWP is disabled in SIMICS run!");
// end task
return l_err;
-
+
}
@@ -196,6 +205,12 @@ void* call_mem_pll_setup( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR 0x%.8X: mem_pll_initf HWP returns error",
l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_pCentaur);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
break;
}
else
@@ -212,6 +227,12 @@ void* call_mem_pll_setup( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR 0x%.8X: mem_pll_setup HWP returns error",
l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_pCentaur);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
break;
}
else
@@ -221,6 +242,26 @@ void* call_mem_pll_setup( void *io_pArgs )
}
}
+ if( l_err )
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DRAM_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MEM_PLL_SETUP
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to cen_mem_pll_setup has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_DRAM_TRAINING_FAILED,
+ ISTEP_MEM_PLL_SETUP,
+ l_err);
+
+ errlCommit( l_err, HWPF_COMP_ID );
+ }
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mem_pll_setup exit" );
return l_err;
@@ -235,6 +276,8 @@ void* call_mem_startclocks( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mem_startclocks entry" );
// Get all Centaur targets
@@ -267,6 +310,30 @@ void* call_mem_startclocks( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR 0x%.8X: cen_mem_startclocks HWP returns error",
l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_pCentaur);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DRAM_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MEM_STARTCLOCKS
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to cen_mem_startclocks has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_DRAM_TRAINING_FAILED,
+ ISTEP_MEM_STARTCLOCKS,
+ l_err);
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
+
break;
}
else
@@ -278,7 +345,7 @@ void* call_mem_startclocks( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mem_startclocks exit" );
- return l_err;
+ return l_StepError.getErrorHandle();
}
@@ -351,6 +418,8 @@ void* call_mss_scominit( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_scominit entry" );
// Get all Centaur targets
@@ -365,7 +434,7 @@ void* call_mss_scominit( void *io_pArgs )
// Dump current run on target
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"Running mss_scominit HWP on..." );
-
+
EntityPath l_path;
l_path = l_pCentaur->getAttr<ATTR_PHYS_PATH>();
l_path.dump();
@@ -384,6 +453,25 @@ void* call_mss_scominit( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR 0x%.8X: mss_scominit HWP returns error",
l_err->reasonCode());
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DRAM_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_SCOMINIT
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_scominit has failed
+ * see error log in the user details section for
+ * additional details.
+ */
+ l_stepError.addErrorDetails(ISTEP_DRAM_TRAINING_FAILED,
+ ISTEP_MSS_SCOMINIT,
+ l_err );
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break;
}
else
@@ -395,7 +483,7 @@ void* call_mss_scominit( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_scominit exit" );
- return l_err;
+ return l_stepError.getErrorHandle();
}
//
@@ -405,6 +493,8 @@ void* call_mss_ddr_phy_reset( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_ddr_phy_reset entry" );
// Get all MBA targets
@@ -444,6 +534,29 @@ void* call_mss_ddr_phy_reset( void *io_pArgs )
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "ERROR 0x%.8X: mss_ddr_phy_reset HWP returns error",
l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_mba_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DRAM_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_DDR_PHY_RESET
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_ddr_phy_reset has failed
+ */
+ l_stepError.addErrorDetails(ISTEP_DRAM_TRAINING_FAILED,
+ ISTEP_MSS_DDR_PHY_RESET,
+ l_err );
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break; // break out of mba loop
}
else
@@ -454,7 +567,7 @@ void* call_mss_ddr_phy_reset( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_ddr_phy_reset exit" );
- return l_err;
+ return l_stepError.getErrorHandle();
}
@@ -465,6 +578,8 @@ void* call_mss_draminit( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit entry" );
// Get all MBA targets
@@ -504,6 +619,30 @@ void* call_mss_draminit( void *io_pArgs )
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "ERROR 0x%.8X : mss_draminit HWP returns error",
l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_mba_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
+ /*@
+ *
+ * @errortype
+ * @reasoncode ISTEP_DRAM_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_DRAMINIT
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_dram_init has failed
+ */
+ l_stepError.addErrorDetails( ISTEP_DRAM_TRAINING_FAILED,
+ ISTEP_MSS_DRAMINIT,
+ l_err );
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break; // Break out of mba loop
}
else
@@ -515,7 +654,7 @@ void* call_mss_draminit( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit exit" );
- return l_err;
+ return l_stepError.getErrorHandle();
}
@@ -526,6 +665,8 @@ void* call_mss_draminit_training( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit_training entry" );
// Get all MBA targets
@@ -566,6 +707,30 @@ void* call_mss_draminit_training( void *io_pArgs )
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "ERROR 0x%.8X : mss_draminit_training HWP returns error",
l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_mba_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
+ /*@
+ *
+ * @errortype
+ * @reasoncode ISTEP_DRAM_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_DRAMINIT_TRAINING
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_dram_init_training has failed
+ */
+ l_stepError.addErrorDetails( ISTEP_DRAM_TRAINING_FAILED,
+ ISTEP_MSS_DRAMINIT_TRAINING,
+ l_err );
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break; // break out of mba loop
}
else
@@ -577,7 +742,7 @@ void* call_mss_draminit_training( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit_training exit" );
- return l_err;
+ return l_stepError.getErrorHandle();
}
//
@@ -646,6 +811,8 @@ void* call_mss_draminit_mc( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit_mc entry" );
// Get all centaur targets
@@ -685,6 +852,31 @@ void* call_mss_draminit_mc( void *io_pArgs )
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "ERROR 0x%.8X : mss_draminit_mc HWP returns error",
l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_membuf_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
+ /*@
+ *
+ * @errortype
+ * @reasoncode ISTEP_DRAM_TRAINING_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_DRAMINIT_MC
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_dram_init_mc has failed
+ *
+ */
+ l_stepError.addErrorDetails(ISTEP_DRAM_TRAINING_FAILED,
+ ISTEP_MSS_DRAMINIT_MC,
+ l_err );
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break; // break out of memBuf loop
}
else
@@ -696,7 +888,7 @@ void* call_mss_draminit_mc( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit_mc exit" );
- return l_err;
+ return l_stepError.getErrorHandle();
}
diff --git a/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C b/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C
index f46a09a47..dd7115907 100644
--- a/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C
+++ b/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C
@@ -47,6 +47,8 @@
#include <initservice/taskargs.H>
#include <errl/errlentry.H>
+#include <hwpisteperror.H>
+
#include <initservice/isteps_trace.H>
// targeting support
@@ -75,6 +77,8 @@ namespace EDI_EI_INITIALIZATION
{
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
using namespace TARGETING;
using namespace fapi;
@@ -246,6 +250,8 @@ void* call_fabric_io_run_training( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
+ IStepError l_StepError;
+
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_fabric_io_run_training entry" );
@@ -285,6 +291,28 @@ void* call_fabric_io_run_training( void *io_pArgs )
"%s : %cbus connection io_run_training",
(l_errl ? "ERROR" : "SUCCESS"),
(i ? 'X' : 'A') );
+
+ if ( l_errl )
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_EDI_EI_INITIALIZATION_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_FABRIC_IO_RUN_TRAINING
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to fabric_io_run_training has failed
+ * see error log in the user details seciton for
+ * additional details.
+ */
+ l_StepError.addErrorDetails(ISTEP_EDI_EI_INITIALIZATION_FAILED,
+ ISTEP_FABRIC_IO_RUN_TRAINING,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ }
}
}
@@ -292,7 +320,7 @@ void* call_fabric_io_run_training( void *io_pArgs )
"call_fabric_io_run_training exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_StepError.getErrorHandle();
}
@@ -465,6 +493,8 @@ void* call_proc_fab_iovalid( void *io_pArgs )
ReturnCode l_rc;
errlHndl_t l_errl = NULL;
+ IStepError l_StepError;
+
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_proc_fab_iovalid entry" );
@@ -548,25 +578,43 @@ void* call_proc_fab_iovalid( void *io_pArgs )
l_smp.push_back(l_procEntry);
}
- if (l_errl)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR : call_proc_fab_iovalid encountered an error");
- }
- else
+ if (!l_errl)
{
FAPI_INVOKE_HWP( l_errl, proc_fab_iovalid, l_smp, true );
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "%s : proc_fab_iovalid HWP.",
- (l_errl ? "ERROR" : "SUCCESS"));
+ "%s : proc_fab_iovalid HWP.",
+ (l_errl ? "ERROR" : "SUCCESS"));
+ }
+
+ if (l_errl)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR : call_proc_fab_iovalid encountered an error");
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_EDI_EI_INITIALIZATION_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_FAB_IOVALID
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_fab_iovalid has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_EDI_EI_INITIALIZATION_FAILED,
+ ISTEP_PROC_FAB_IOVALID,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+
}
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_proc_fab_iovalid exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_StepError.getErrorHandle();
}
diff --git a/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C b/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C
index b6c2b8b76..6c6816f4f 100644
--- a/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C
+++ b/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C
@@ -46,6 +46,8 @@
#include <initservice/isteps_trace.H>
+#include <hwpisteperror.H>
+
// targeting support
#include <targeting/common/commontargeting.H>
@@ -61,6 +63,8 @@
namespace ESTABLISH_SYSTEM_SMP
{
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
using namespace TARGETING;
using namespace fapi;
@@ -74,7 +78,7 @@ void* call_host_coalesce_host( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_coalesce_host entry" );
#if 0
@@ -98,19 +102,19 @@ void* call_host_coalesce_host( void *io_pArgs )
FAPI_INVOKE_HWP( l_errl, host_coalesce_host, _args_...);
if ( l_errl )
{
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR : .........." );
errlCommit( l_errl, HWPF_COMP_ID );
}
else
{
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"SUCCESS : .........." );
}
// @@@@@ END CUSTOM BLOCK: @@@@@
#endif
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_host_coalesce_host exit" );
// end task, returning any errorlogs to IStepDisp
diff --git a/src/usr/hwpf/hwp/hwpisteperror.C b/src/usr/hwpf/hwp/hwpisteperror.C
new file mode 100644
index 000000000..e825bdb19
--- /dev/null
+++ b/src/usr/hwpf/hwp/hwpisteperror.C
@@ -0,0 +1,71 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/hwpisteperror.C $ */
+/* */
+/* 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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#include <hwpisteperror.H>
+#include <hwpistepud.H>
+
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+
+// setup the internal elog pointer and capture error data for the first or
+// add error data to top level elog
+void IStepError::addErrorDetails(istepReasonCode reasoncode,
+ istepModuleId modid,
+ const errlHndl_t i_err )
+{
+ mutex_lock( &iv_mutex );
+
+ // if internal elog is null, create a new one ad grab some data from the
+ // first error that is passed in.
+ if( iv_eHandle == NULL )
+ {
+ // add the PLID and reason code of the first error to user data word 0
+ uint64_t data0 = i_err->plid();
+ data0 <<= 32;
+ data0 |= i_err->reasonCode();
+
+ iv_eHandle = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ modid, reasoncode, data0, 0);
+ }
+
+ // set the plid of the inpout elog to match the summary elog
+ i_err->plid( iv_eHandle->plid() );
+
+ // grab the isteps trace and add to the original elog
+ i_err->collectTrace("ISTEPS_TRACE", 1024);
+
+ // add some details from the elog to the IStep error object
+ ISTEP_ERROR::HwpUserDetailsIstep errorDetails( i_err );
+
+ errorDetails.addToLog( iv_eHandle );
+
+ iv_errorCount++;
+
+ // put iv_errorCount into bytes 0 and 1 of user data 2
+ uint64_t data = ((uint64_t)iv_errorCount << 32);
+
+ iv_eHandle->addUserData2(data);
+
+ mutex_unlock( &iv_mutex );
+}
+
+
diff --git a/src/usr/hwpf/hwp/hwpistepud.C b/src/usr/hwpf/hwp/hwpistepud.C
new file mode 100644
index 000000000..bc1ad76f1
--- /dev/null
+++ b/src/usr/hwpf/hwp/hwpistepud.C
@@ -0,0 +1,57 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/hwpistepud.C $ */
+/* */
+/* 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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+/**
+ * @file hwpudistep.C
+ *
+ * @brief Implementation of HwpSvcUserDetailsIstep
+ */
+#include <hbotcompid.H>
+#include <hwpistepud.H>
+#include <hwpf/istepreasoncodes.H>
+
+using namespace ISTEP_ERROR;
+
+//------------------------------------------------------------------------------
+HwpUserDetailsIstep::HwpUserDetailsIstep( errlHndl_t i_err )
+{
+ HwpUserDetailsIstepErrorData * l_pBuf =
+ reinterpret_cast<HwpUserDetailsIstepErrorData *>(
+ reallocUsrBuf(sizeof(HwpUserDetailsIstepErrorData)));
+
+ l_pBuf->eid = i_err->eid();
+
+ l_pBuf->reasoncode = i_err->reasonCode();
+
+ // Set up ErrlUserDetails instance variables
+ iv_CompId = HWPF_COMP_ID;
+ iv_Version = 1;
+ iv_SubSection = HWP_UDT_STEP_ERROR_DETAILS;
+}
+
+//------------------------------------------------------------------------------
+HwpUserDetailsIstep::~HwpUserDetailsIstep()
+{
+
+}
+
+
diff --git a/src/usr/hwpf/hwp/makefile b/src/usr/hwpf/hwp/makefile
index 5a266d954..abe936b44 100644
--- a/src/usr/hwpf/hwp/makefile
+++ b/src/usr/hwpf/hwp/makefile
@@ -1,25 +1,25 @@
-# IBM_PROLOG_BEGIN_TAG
-# This is an automatically generated prolog.
-#
-# $Source: src/usr/hwpf/hwp/makefile $
-#
-# IBM CONFIDENTIAL
-#
-# COPYRIGHT International Business Machines Corp. 2011,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 otherwise
-# divested of its trade secrets, irrespective of what has been
-# deposited with the U.S. Copyright Office.
-#
-# Origin: 30
-#
-# IBM_PROLOG_END_TAG
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/usr/hwpf/hwp/makefile $
+#
+# IBM CONFIDENTIAL
+#
+# COPYRIGHT International Business Machines Corp. 2011,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 otherwise
+# divested of its trade secrets, irrespective of what has been
+# deposited with the U.S. Copyright Office.
+#
+# Origin: 30
+#
+# IBM_PROLOG_END_TAG
ROOTPATH = ../../../..
MODULE = hwp
@@ -42,7 +42,9 @@ OBJS = fapiTestHwp.o \
dimmBadDqBitmapFuncs.o \
dimmBadDqBitmapAccessHwp.o \
RepairRingFunc.o \
- erepairGetFailedLanesHwp.o
+ erepairGetFailedLanesHwp.o \
+ hwpisteperror.o \
+ hwpistepud.o \
SUBDIRS = dmi_training.d sbe_centaur_init.d mc_config.d \
dram_training.d activate_powerbus.d build_winkle_images.d \
diff --git a/src/usr/hwpf/hwp/mc_config/mc_config.C b/src/usr/hwpf/hwp/mc_config/mc_config.C
index d1cb61c14..05e6e0835 100644
--- a/src/usr/hwpf/hwp/mc_config/mc_config.C
+++ b/src/usr/hwpf/hwp/mc_config/mc_config.C
@@ -44,6 +44,9 @@
#include <initservice/taskargs.H>
#include <errl/errlentry.H>
+#include <hwpisteperror.H>
+#include <errl/errludtarget.H>
+
#include <initservice/isteps_trace.H>
// targeting support
@@ -72,6 +75,9 @@
namespace MC_CONFIG
{
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
using namespace TARGETING;
using namespace fapi;
@@ -144,6 +150,8 @@ void* call_mss_volt( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_volt entry" );
TARGETING::TargetHandleList l_membufTargetList;
@@ -184,6 +192,24 @@ void* call_mss_volt( void *io_pArgs )
{
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR 0x%.8X: mss_volt HWP( ) ", l_err->reasonCode());
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_MC_CONFIG_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_VOLT
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_volt has failed
+ *
+ */
+ l_StepError.addErrorDetails(ISTEP_MC_CONFIG_FAILED,
+ ISTEP_MSS_VOLT,
+ l_err );
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
}
else
{
@@ -193,7 +219,7 @@ void* call_mss_volt( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_volt exit" );
- return l_err;
+ return l_StepError.getErrorHandle();
}
//
@@ -203,6 +229,8 @@ void* call_mss_freq( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_freq entry" );
TARGETING::TargetHandleList l_membufTargetList;
@@ -235,6 +263,30 @@ void* call_mss_freq( void *io_pArgs )
"ERROR 0x%.8X: mss_freq HWP( %d ) ",
l_err->reasonCode(),
i );
+
+ ErrlUserDetailsTarget myDetails(l_membuf_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_MC_CONFIG_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_FREQ
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_freq has failed
+ *
+ */
+ l_StepError.addErrorDetails(ISTEP_MC_CONFIG_FAILED,
+ ISTEP_MSS_FREQ,
+ l_err );
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break; // break out memBuf loop
}
else
@@ -246,7 +298,7 @@ void* call_mss_freq( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_freq exit" );
- return l_err;
+ return l_StepError.getErrorHandle();
}
errlHndl_t call_mss_eff_grouping()
@@ -255,7 +307,7 @@ errlHndl_t call_mss_eff_grouping()
TARGETING::TargetHandleList l_procsList;
getAllChips(l_procsList, TYPE_PROC);
-
+
for ( size_t i = 0; i < l_procsList.size(); i++ )
{
// make a local copy of the target for ease of use
@@ -294,7 +346,7 @@ errlHndl_t call_mss_eff_grouping()
l_associated_centaurs.push_back(l_fapi_centaur_target);
}
-
+
FAPI_INVOKE_HWP(l_err, mss_eff_grouping,
l_fapi_cpu_target, l_associated_centaurs);
@@ -302,8 +354,14 @@ errlHndl_t call_mss_eff_grouping()
if ( l_err )
{
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: mss_eff_grouping HWP( cpu %d centaur %d ) ",
- l_err->reasonCode(), i, j );
+ "ERROR 0x%.8X: mss_eff_grouping HWP( cpu %d centaur %d ) ",
+ l_err->reasonCode(), i, j );
+
+ ErrlUserDetailsTarget myDetails(l_cpu_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
break; // break out mba loop
}
else
@@ -323,6 +381,8 @@ void* call_mss_eff_config( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_eff_config entry" );
TARGETING::TargetHandleList l_mbaTargetList;
@@ -357,6 +417,12 @@ void* call_mss_eff_config( void *io_pArgs )
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR 0x%.8X: mss_eff_config HWP( mba %d ) ",
l_err->reasonCode(), i );
+
+ ErrlUserDetailsTarget myDetails(l_mba_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog( l_err );
+
break; // break out mba loop
}
else
@@ -372,16 +438,38 @@ void* call_mss_eff_config( void *io_pArgs )
}
// When opt_memmap HWP is available, it will be called
- // here between the two call_mss_eff_grouping()
+ // here between the two call_mss_eff_grouping()
+ //
- if (!l_err)
+ if(!l_err)
{
l_err = call_mss_eff_grouping();
}
+ if(l_err)
+ {
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_MC_CONFIG_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_MSS_EFF_CONFIG
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to mss_eff_grouping has failed
+ *
+ */
+ l_StepError.addErrorDetails(ISTEP_MC_CONFIG_FAILED,
+ ISTEP_MSS_EFF_CONFIG,
+ l_err );
+
+ errlCommit( l_err, HWPF_COMP_ID );
+ }
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_eff_config exit" );
- return l_err;
+ return l_StepError.getErrorHandle();
}
diff --git a/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C b/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C
index 24f877902..beb512982 100644
--- a/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C
+++ b/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C
@@ -22,7 +22,7 @@
* IBM_PROLOG_END_TAG
*/
/**
- * @file nest_chiplets.C
+ @file nest_chiplets.C
*
* Support file for IStep: nest_chiplets
* Nest Chiplets
@@ -44,6 +44,9 @@
#include <initservice/taskargs.H>
#include <errl/errlentry.H>
+#include <hwpisteperror.H>
+#include <errl/errludtarget.H>
+
#include <initservice/isteps_trace.H>
// targeting support
@@ -65,9 +68,12 @@
#include "proc_a_x_pci_dmi_pll_setup/proc_a_x_pci_dmi_pll_setup.H"
#include "proc_a_x_pci_dmi_pll_setup/proc_a_x_pci_dmi_pll_initf.H"
-namespace NEST_CHIPLETS
+namespace NEST_CHIPLETS
{
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
using namespace TARGETING;
using namespace fapi;
@@ -80,6 +86,9 @@ using namespace fapi;
void* call_proc_a_x_pci_dmi_pll_setup( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+
+ IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_a_x_pci_dmi_pll_setup entry" );
//TODO - Enable this procedure in SIMICs when RTC 46643 is done.
@@ -123,6 +132,29 @@ void* call_proc_a_x_pci_dmi_pll_setup( void *io_pArgs )
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR 0x%.8X: proc_a_x_pci_dmi_pll_initf HWP returns error",
l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_cpu_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_NEST_CHIPLETS_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_A_X_PCI_DMI_PLL_INITF
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_a_x_pci_dmi_pll_initf has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_NEST_CHIPLETS_FAILED,
+ ISTEP_PROC_A_X_PCI_DMI_PLL_INITF,
+ l_err);
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break;
}
else
@@ -142,8 +174,32 @@ void* call_proc_a_x_pci_dmi_pll_setup( void *io_pArgs )
if (l_err)
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: proc_a_x_pci_dmi_pll_setup HWP returns error",
+ "ERROR 0x%.8X: proc_a_x_pci_dmi_pll_setup \
+ HWP returns error",
l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_cpu_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_NEST_CHIPLETS_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_A_X_PCI_DMI_PLL_SETUP
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_a_x_pci_dmi_pll_setup has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_NEST_CHIPLETS_FAILED,
+ ISTEP_PROC_A_X_PCI_DMI_PLL_SETUP,
+ l_err);
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break;
}
else
@@ -155,8 +211,8 @@ void* call_proc_a_x_pci_dmi_pll_setup( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_a_x_pci_dmi_pll_setup exit" );
- // end task, returning any errorlogs to IStepDisp
- return l_err;
+ // end task, returning any errorlogs to IStepDisp
+ return l_StepError.getErrorHandle();
}
@@ -169,8 +225,10 @@ void* call_proc_startclock_chiplets( void *io_pArgs )
{
errlHndl_t l_err = NULL;
+ IStepError l_StepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_startclock_chiplets entry" );
-
+
uint8_t l_cpuNum = 0;
TARGETING::TargetHandleList l_cpuTargetList;
@@ -200,7 +258,30 @@ void* call_proc_startclock_chiplets( void *io_pArgs )
if (l_err)
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "ERROR 0x%.8X : proc_startclock_chiplets HWP returns error",
- l_err->reasonCode());
+ l_err->reasonCode());
+
+ ErrlUserDetailsTarget myDetails(l_cpu_target);
+
+ // capture the target data in the elog
+ myDetails.addToLog(l_err );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_NEST_CHIPLETS_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_STARTCLOCK_CHIPLETS
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_start_clocks_chiplets has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_NEST_CHIPLETS_FAILED,
+ ISTEP_PROC_STARTCLOCK_CHIPLETS,
+ l_err);
+
+ errlCommit( l_err, HWPF_COMP_ID );
+
break; // break out of cpuNum
}
else
@@ -212,7 +293,7 @@ void* call_proc_startclock_chiplets( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_startclock_chiplets exit" );
// end task, returning any errorlogs to IStepDisp
- return l_err;
+ return l_StepError.getErrorHandle();
}
@@ -240,16 +321,16 @@ void* call_proc_chiplet_scominit( void *io_pArgs )
//
void* call_proc_pcie_scominit( void *io_pArgs )
{
- errlHndl_t l_errl = NULL;
+ errlHndl_t l_errl = NULL;
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_pcie_scominit entry" );
-
+
#if 0
- // @@@@@ CUSTOM BLOCK: @@@@@
+ // @@@@@ CUSTOM BLOCK: @@@@@
// figure out what targets we need
// customize any other inputs
// set up loops to go through all targets (if parallel, spin off a task)
-
+
// print call to hwp and dump physical path of the target(s)
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"===== proc_pcie_scominit HWP(? ? ? )",
@@ -260,14 +341,14 @@ void* call_proc_pcie_scominit( void *io_pArgs )
EntityPath l_path;
l_path = l_@targetN_target->getAttr<ATTR_PHYS_PATH>();
l_path.dump();
- TRACFCOMP( g_trac_mc_init, "===== " );
+ TRACFCOMP( g_trac_mc_init, "===== " );
- // cast OUR type of target to a FAPI type of target.
+ // cast OUR type of target to a FAPI type of target.
const fapi::Target l_fapi_@targetN_target(
TARGET_TYPE_MEMBUF_CHIP,
reinterpret_cast<void *>
(const_cast<TARGETING::Target*>(l_@targetN_target)) );
-
+
// call the HWP with each fapi::Target
l_fapirc = proc_pcie_scominit( ? , ?, ? );
@@ -286,7 +367,7 @@ void* call_proc_pcie_scominit( void *io_pArgs )
"ERROR 0x%.8X: proc_pcie_scominit HWP(? ? ?) ",
static_cast<uint32_t>(l_fapirc) );
}
- // @@@@@ END CUSTOM BLOCK: @@@@@
+ // @@@@@ END CUSTOM BLOCK: @@@@@
#endif
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_pcie_scominit exit" );
@@ -303,16 +384,36 @@ void* call_proc_pcie_scominit( void *io_pArgs )
//
void* call_proc_scomoverride_chiplets( void *io_pArgs )
{
- errlHndl_t l_errl = NULL;
+ errlHndl_t l_errl = NULL;
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_scomoverride_chiplets entry" );
+ IStepError l_StepError;
+
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "call_proc_scomoverride_chiplets entry" );
FAPI_INVOKE_HWP(l_errl, proc_scomoverride_chiplets);
if (l_errl)
{
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "ERROR 0x%.8X : proc_scomoverride_chiplets HWP returns error",
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X : proc_scomoverride_chiplets HWP returns error",
l_errl->reasonCode());
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_NEST_CHIPLETS_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_SCOMOVERRIDE_CHIPLETS
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_scomoverride_chiplets has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_NEST_CHIPLETS_FAILED,
+ ISTEP_PROC_SCOMOVERRIDE_CHIPLETS,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
}
else
{
@@ -322,8 +423,8 @@ void* call_proc_scomoverride_chiplets( void *io_pArgs )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_scomoverride_chiplets exit" );
- // end task, returning any errorlogs to IStepDisp
- return l_errl;
+ // end task, returning any errorlogs to IStepDisp
+ return l_StepError.getErrorHandle();
}
diff --git a/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C b/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C
index 140bfddd6..3db1c23a7 100644
--- a/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C
+++ b/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C
@@ -52,6 +52,7 @@
#include <fapiPlatHwpInvoker.H>
#include <vfs/vfs.H>
#include "sbe_centaur_init.H"
+#include <hwpisteperror.H>
// Extern function declaration
extern fapi::ReturnCode fapiPoreVe(const fapi::Target i_target,
@@ -63,6 +64,8 @@ const uint64_t CENTAUR_SBE_PNOR_MRR = 0;
namespace SBE_CENTAUR_INIT
{
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
using namespace TARGETING;
using namespace fapi;
using namespace vsbe;
@@ -85,6 +88,8 @@ void* call_sbe_centaur_init( void *io_pArgs )
const char * l_sbePnorAddr = NULL;
errlHndl_t l_errl = NULL;
+ IStepError l_StepError;
+
do
{
// ----------------------- Setup sbe_pnor stuff --------------------
@@ -179,7 +184,25 @@ void* call_sbe_centaur_init( void *io_pArgs )
"ERROR 0x%.8X call_sbe_centaur_init - Error returned from"
" VSBE engine on this Centaur, l_rc 0x%llX",
l_errl->reasonCode());
- break; // break out of memBuf loop
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_SBE_CENTAUR_INIT_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+l * @moduleid ISTEP_SBE_CENTAUR_INIT
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_swl_build to build the sleep
+ * winkle image has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_SBE_CENTAUR_INIT_FAILED,
+ ISTEP_SBE_CENTAUR_INIT,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+
+ break; // break out of memBuf loop
}
else
{
@@ -218,23 +241,10 @@ void* call_sbe_centaur_init( void *io_pArgs )
}
}
- // process return code.
- if ( l_errl )
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: sbe_centaur_init HWP",
- l_errl->reasonCode());
- }
- else
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : sbe_centaur_init HWP" );
- }
-
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_sbe_centaur_init exit" );
- return l_errl;
+ return l_StepError.getErrorHandle();
}
}; // end namespace
diff --git a/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C b/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C
index 3ec5bd2b0..176b77111 100644
--- a/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C
+++ b/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C
@@ -44,6 +44,9 @@
#include <targeting/common/commontargeting.H>
#include <targeting/common/utilFilter.H>
+#include <hwpisteperror.H>
+#include <errl/errludtarget.H>
+
// fapi support
#include <fapi.H>
#include <fapiPlatHwpInvoker.H>
@@ -51,6 +54,10 @@
#include "slave_sbe.H"
#include "proc_revert_sbe_mcs_setup/proc_revert_sbe_mcs_setup.H"
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
+
namespace SLAVE_SBE
{
//
@@ -61,6 +68,8 @@ void* call_proc_revert_sbe_mcs_setup(void *io_pArgs)
{
errlHndl_t l_errl = NULL;
+ IStepError l_stepError;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_proc_revert_sbe_mcs_setup entry" );
@@ -75,7 +84,32 @@ void* call_proc_revert_sbe_mcs_setup(void *io_pArgs)
if (l_errl)
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR : failed executing proc_revert_sbe_mcs_setup returning error");
+ "ERROR : failed executing proc_revert_sbe_mcs_setup \
+ returning error");
+
+ ErrlUserDetailsTarget myDetails(l_pProcTarget);
+
+ // capture the target data in the elog
+ myDetails.addToLog( l_errl );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_SLAVE_SBE_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_PROC_REVERT_SBE_MCS_SETUP
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to proc_revert_sbe_mcs_setup returned an error
+ *
+ */
+ l_stepError.addErrorDetails(ISTEP_SLAVE_SBE_FAILED,
+ ISTEP_PROC_REVERT_SBE_MCS_SETUP,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+
}
else
{
@@ -87,7 +121,7 @@ void* call_proc_revert_sbe_mcs_setup(void *io_pArgs)
"call_proc_revert_sbe_mcs_setup exit");
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_stepError.getErrorHandle();
}
}
diff --git a/src/usr/hwpf/plugins/hwpfParse.C b/src/usr/hwpf/plugins/hwpfParse.C
index c68d77d6a..5fe7af402 100644
--- a/src/usr/hwpf/plugins/hwpfParse.C
+++ b/src/usr/hwpf/plugins/hwpfParse.C
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/usr/hwpf/plugins/hwpfParse.C $
-//
-// 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
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/plugins/hwpfParse.C $ */
+/* */
+/* 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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
/**
* @file hwpfParse.C
*
@@ -27,5 +27,8 @@
*/
#include <errl/errludparser.H>
#include <hwpf/plat/fapiPlatUdParserFactory.H>
+#include <hwpf/hwp/hwpistepudparserfactory.H>
+
ERRL_MAKE_UD_PARSER(fapi::PlatUserDetailsParserFactory, HWPF_COMP_ID)
+ERRL_MAKE_UD_PARSER(ISTEP_ERROR::HwpIstepUserDetailsParserFactory, HWPF_COMP_ID)
diff --git a/src/usr/hwpf/test/hwpisteperrortest.H b/src/usr/hwpf/test/hwpisteperrortest.H
new file mode 100644
index 000000000..ba75d18ea
--- /dev/null
+++ b/src/usr/hwpf/test/hwpisteperrortest.H
@@ -0,0 +1,234 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/test/hwpisteperrortest.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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __HWPIstepErrorTest_H
+#define __HWPIstepErrorTest_H
+
+#include <cxxtest/TestSuite.H>
+#include <errl/errlentry.H>
+#include <hwpisteperror.H>
+
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+
+class HwpIStepErrorTest: public CxxTest::TestSuite
+{
+public:
+ /**
+ * @brief Test IStepError class
+ */
+ void testIstepError1(void)
+ {
+
+ const uint16_t MY_REASON_CODE = 0xC0DE;
+ const uint8_t MY_MODULE_ID = 0xBB;
+ // Create an error log
+ errlHndl_t l_errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_INFORMATIONAL,
+ MY_MODULE_ID,
+ MY_REASON_CODE,
+ TWO_UINT32_TO_UINT64( 0xDE, 0xAD),
+ TO_UINT64(0xBEEF) );
+ do {
+
+ IStepError l_stepError;
+
+ l_stepError.addErrorDetails( ISTEP_INVALID_REASONCODE,
+ ISTEP_INVALID_MODULE, l_errl );
+
+ TS_TRACE("testIStepError1: original elog eid is %d",
+ l_errl->eid() );
+
+ TS_TRACE("testIStepError1: original elog reasoncode is %d",
+ l_errl->reasonCode() );
+
+ // grab the values from the original errorlog for use later
+ uint64_t test_data0 = l_errl->eid();
+ test_data0 <<= 32;
+
+ test_data0 |= l_errl->reasonCode();
+
+ // this call to get resets the error handle
+ errlHndl_t new_errl = l_stepError.getErrorHandle();
+
+ uint64_t l_data0 = new_errl->getUserData1();
+
+ uint32_t eid = ( l_data0 & 0xFFFFFFF00000000) >> 32;
+ uint32_t reason = (uint32_t)(l_data0 & 0x00000000FFFFFFFF);
+
+ if( eid != l_errl->eid() )
+ {
+ TS_FAIL("expected eid == l_errl->eid() "
+ "eid rebuilt from user data of "
+ "IStepError did not match original error eid");
+ }
+ else
+ {
+ TS_TRACE("passed: eid == l_errl->eid()");
+ }
+
+ if( reason != l_errl->reasonCode() )
+ {
+ TS_FAIL("expected reasonCode == l_errl->reasonCode() \
+ reasonCode rebuilt from user data of \
+ IStepError did not match original reasoncode");
+
+ }
+ else
+ {
+ TS_TRACE("passed: reason == l_errl->reasonCode()");
+ }
+
+
+ // verify that we counted the error we added
+ // count is in bytes 0-3 of userdata 2
+ //
+ uint64_t l_data1 = new_errl->getUserData2();
+
+ l_data1 >>= 32;
+
+ if( l_data1 != 1 )
+ {
+ TS_FAIL("error count in IStepError not correct should be 1");
+ }
+ else
+ {
+ TS_TRACE("passed: error count = 1");
+ }
+
+
+ errlCommit( l_errl, CXXTEST_COMP_ID );
+ errlCommit( new_errl, CXXTEST_COMP_ID );
+
+ }while(0);
+ }
+ void testIstepError2(void)
+ {
+
+ const uint16_t MY_REASON_CODE = 0xC0DE;
+ const uint8_t MY_MODULE_ID = 0xBB;
+ // Create an error log
+ errlHndl_t l_errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_INFORMATIONAL,
+ MY_MODULE_ID,
+ MY_REASON_CODE,
+ TWO_UINT32_TO_UINT64( 0xDE, 0xAD),
+ TO_UINT64(0xBEEF) );
+ do {
+
+ IStepError l_stepError;
+
+ l_stepError.addErrorDetails( ISTEP_INVALID_REASONCODE,
+ ISTEP_INVALID_MODULE, l_errl );
+
+ TS_TRACE("testIStepError2: original elog eid is %d",
+ l_errl->eid() );
+
+ TS_TRACE("testIStepError2: original elog reasoncode is %d",
+ l_errl->reasonCode() );
+
+ // grab the values from the original errorlog for use later
+ uint64_t test_data0 = l_errl->eid();
+ test_data0 <<= 32;
+
+ test_data0 |= l_errl->reasonCode();
+
+ // add a new elog in three more times..
+ // Create an error log -- junk data
+ errlHndl_t l_errl2 = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_INFORMATIONAL,
+ 0x05,
+ 0xcafe,
+ TWO_UINT32_TO_UINT64( 0xDE, 0xAD),
+ TO_UINT64(0xBEEF) );
+
+ l_stepError.addErrorDetails( ISTEP_INVALID_REASONCODE,
+ ISTEP_INVALID_MODULE, l_errl2);
+
+ l_stepError.addErrorDetails( ISTEP_INVALID_REASONCODE,
+ ISTEP_INVALID_MODULE, l_errl2);
+
+ l_stepError.addErrorDetails( ISTEP_INVALID_REASONCODE,
+ ISTEP_INVALID_MODULE, l_errl2);
+
+ // count should be 4 and the data0 and data 1 values of the
+ // istep error should be the same as before
+
+
+ // this call to get resets the error handle
+ errlHndl_t new_errl = l_stepError.getErrorHandle();
+
+ uint64_t l_data0 = new_errl->getUserData1();
+
+ uint32_t eid = ( l_data0 & 0xFFFFFFF00000000) >> 32;
+ uint32_t reason = (uint32_t)(l_data0 & 0x00000000FFFFFFFF);
+
+ if( eid != l_errl->eid() )
+ {
+ TS_FAIL("expected eid == l_errl->eid() "
+ "eid rebuilt from user data of "
+ "IStepError did not match original error eid");
+ }
+ else
+ {
+ TS_TRACE("passed: eid == l_errl->eid()");
+ }
+
+ if( reason != l_errl->reasonCode() )
+ {
+ TS_FAIL("expected reasonCode == l_errl->reasonCode()"
+ "reasonCode rebuilt from user data of"
+ "IStepError did not match original reasoncode");
+
+ }
+ else
+ {
+ TS_TRACE("passed: reason == l_errl->reasonCode()");
+ }
+
+ // verify that we counted the error we added
+ // count is in bytes 0-3 of userdata 2
+ //
+ uint64_t l_data1 = new_errl->getUserData2();
+
+ l_data1 >>= 32;
+
+ if( l_data1 != 4 )
+ {
+ TS_FAIL("error count in IStepError not correct"
+ "should be 4");
+ TS_TRACE("error count is %d", l_data1 );
+ }
+ else
+ {
+ TS_TRACE("passed: error count is correct [%d]", l_data1 );
+ }
+
+ errlCommit( l_errl, CXXTEST_COMP_ID );
+ errlCommit( new_errl, CXXTEST_COMP_ID );
+ errlCommit( l_errl2, CXXTEST_COMP_ID );
+
+ }while(0);
+ }
+
+};
+#endif
OpenPOWER on IntegriCloud