summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authormbroyles <mbroyles@us.ibm.com>2018-09-14 15:16:56 -0500
committerMartha Broyles <mbroyles@us.ibm.com>2018-09-20 09:06:56 -0500
commit8344884b54ca2f688f1c4d87f6aa48a48ff684be (patch)
tree13fd911566f33bc39acbc549c2fc5f3e35e992f3 /src
parentb1453b6ce600d6f9879d6ebb2c30c6691a169e39 (diff)
downloadtalos-occ-8344884b54ca2f688f1c4d87f6aa48a48ff684be.tar.gz
talos-occ-8344884b54ca2f688f1c4d87f6aa48a48ff684be.zip
Improved PGPE error handling part 1
Change-Id: I6847a3bb630ee7bc6069374202daa74742b0c461 RTC: 197062 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/66163 Tested-by: Martha Broyles <mbroyles@us.ibm.com> Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com> Reviewed-by: William A. Bryan <wilbryan@us.ibm.com> Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
Diffstat (limited to 'src')
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds.c83
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds.h12
-rwxr-xr-xsrc/occ_405/errl/errl.c158
-rwxr-xr-xsrc/occ_405/errl/errl.h26
-rwxr-xr-xsrc/occ_405/incl/occ_common.h1
-rwxr-xr-xsrc/occ_405/main.c17
-rw-r--r--src/occ_405/pgpe/pgpe_interface.c147
-rw-r--r--src/occ_405/pgpe/pgpe_shared.h5
-rwxr-xr-xsrc/occ_405/proc/proc_data_control.c16
-rwxr-xr-xsrc/occ_405/state.c98
-rwxr-xr-xsrc/occ_405/timer/timer.c14
-rw-r--r--src/occ_405/wof/wof.c22
12 files changed, 385 insertions, 214 deletions
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.c b/src/occ_405/cmdh/cmdh_fsp_cmds.c
index d98beae..938af04 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds.c
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds.c
@@ -978,27 +978,82 @@ errlHndl_t cmdh_clear_elog (const cmdh_fsp_cmd_t * i_cmd_ptr,
cmdh_fsp_rsp_t * o_rsp_ptr)
{
cmdh_clear_elog_query_t *l_cmd_ptr = (cmdh_clear_elog_query_t *) i_cmd_ptr;
+ cmdh_clear_elog_version_t *l_cmd_version_ptr = (cmdh_clear_elog_version_t *) i_cmd_ptr;
+ ERRL_RC l_rc = ERRL_RC_SUCCESS;
+ uint16_t l_data_length = CMDH_DATALEN_FIELD_UINT16(l_cmd_ptr);
+ uint8_t l_elog_id = 0;
+ uint8_t l_elog_source = ERRL_SOURCE_INVALID;
+
int l_SlotNum = ERRL_INVALID_SLOT;
- errlHndl_t l_err = INVALID_ERR_HNDL;
+ errlHndl_t l_err = NULL;
errlHndl_t l_oci_address = INVALID_ERR_HNDL;
o_rsp_ptr->data_length[0] = 0;
o_rsp_ptr->data_length[1] = 0;
-
- // Get Errl Array index
- l_SlotNum = getErrSlotNumByErrId(l_cmd_ptr->elog_id);
-
- // Get ERRL address
- l_oci_address = (errlHndl_t)getErrSlotOCIAddr(l_SlotNum);
-
- if ((l_oci_address != NULL) &&
- (l_oci_address != INVALID_ERR_HNDL))
+ do
{
- // clear only one Errl by ID
- l_err = deleteErrl(&l_oci_address);
- }
+ // must support old and new version 1 until (H)TMGT removes support for old version
+ // old version didn't have a version number, use data length to determine version
+ if(l_data_length == CLEAR_ELOG_V0_CMD_LEN)
+ {
+ l_elog_id = l_cmd_ptr->elog_id;
+ // version 0 only supported elogs from the 405
+ l_elog_source = ERRL_SOURCE_405;
+ }
+ else if( (l_data_length == CLEAR_ELOG_V1_CMD_LEN) &&
+ (l_cmd_version_ptr->version == 1) )
+ {
+ l_elog_id = l_cmd_version_ptr->elog_id;
+ l_elog_source = l_cmd_version_ptr->elog_source;
+ }
+
+ else
+ {
+ CMDH_TRAC_ERR("cmdh_clear_elog: Invalid version 0x%02X or data length 0x%02X",
+ l_cmd_version_ptr->version, l_data_length);
+ l_rc = ERRL_RC_INVALID_DATA;
+ break;
+ }
+
+ // process the clear command based on elog source
+ switch(l_elog_source)
+ {
+ case ERRL_SOURCE_405:
+ // Get Errl Array index
+ l_SlotNum = getErrSlotNumByErrId(l_elog_id);
+
+ // Get ERRL address
+ l_oci_address = (errlHndl_t)getErrSlotOCIAddr(l_SlotNum);
+
+ if ((l_oci_address != NULL) &&
+ (l_oci_address != INVALID_ERR_HNDL))
+ {
+ // clear only one Errl by ID
+ l_err = deleteErrl(&l_oci_address);
+ }
+ else
+ {
+ CMDH_TRAC_ERR("cmdh_clear_elog: 405 error log ID[0x%02X] not found", l_elog_id);
+ l_rc = ERRL_RC_INVALID_DATA;
+ }
+
+ break;
+
+ case ERRL_SOURCE_PGPE:
+ case ERRL_SOURCE_XGPE:
+ // TBD
+ CMDH_TRAC_INFO("cmdh_clear_elog: Cleared PM Hcode elog id 0x%02X from source 0x%02X",
+ l_elog_id, l_elog_source);
+ break;
+
+ default:
+ CMDH_TRAC_ERR("cmdh_clear_elog: Invalid error log source 0x%02X", l_elog_source);
+ l_rc = ERRL_RC_INVALID_DATA;
+ break;
+ }
+ }while(0);
- if (l_err == NULL)
+ if ( (l_err == NULL) && (l_rc == ERRL_RC_SUCCESS) )
{
G_rsp_status = ERRL_RC_SUCCESS;
}
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.h b/src/occ_405/cmdh/cmdh_fsp_cmds.h
index 23d1355..db00dfe 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds.h
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds.h
@@ -299,6 +299,8 @@ typedef cmdh_fsp_rsp_t smgr_setmodestate_resp_t;
//---------------------------------------------------------
// Clear Elog Command
//---------------------------------------------------------
+#define CLEAR_ELOG_V0_CMD_LEN 1
+#define CLEAR_ELOG_V1_CMD_LEN 4
// Used by TMGT to clear elog data state, version 0.
typedef struct __attribute__ ((packed))
@@ -307,6 +309,16 @@ typedef struct __attribute__ ((packed))
uint8_t elog_id;
}cmdh_clear_elog_query_t;
+// Used by TMGT to clear elog data state, version 1.
+typedef struct __attribute__ ((packed))
+{
+ struct cmdh_fsp_cmd_header;
+ uint8_t version;
+ uint8_t elog_id;
+ uint8_t elog_source;
+ uint8_t reserved;
+}cmdh_clear_elog_version_t;
+
//---------------------------------------------------------
// Get Elog Command
//---------------------------------------------------------
diff --git a/src/occ_405/errl/errl.c b/src/occ_405/errl/errl.c
index cef5fa8..9f659d1 100755
--- a/src/occ_405/errl/errl.c
+++ b/src/occ_405/errl/errl.c
@@ -34,6 +34,8 @@
#include <ocb_firmware_registers.h>
#include <ocb_register_addresses.h>
#include <amec_sys.h>
+#include <pgpe_shared.h>
+#include <wof.h>
uint32_t G_occErrSlotBits = 0x000000000;
uint8_t G_occErrIdCounter= 0x00;
@@ -67,6 +69,7 @@ uint8_t G_error_history[ERR_HISTORY_SIZE] = {0};
extern uint8_t G_occ_interrupt_type;
extern bool G_fir_collection_required;
+extern amec_sys_t g_amec_sys;
// Function Specification
//
@@ -292,12 +295,12 @@ errlHndl_t createErrl(
uint64_t l_time = 0;
uint8_t l_id = 0;
uint8_t l_errSlot = getErrSlotNumAndErrId( i_sev, &l_id, &l_time);
- static uint8_t traceCount = 5;
+ static uint8_t L_traceCount = 5;
if ( l_errSlot != ERRL_INVALID_SLOT )
{
- TRAC_INFO("Creating error log in slot [%d]", l_errSlot);
+ TRAC_INFO("createErrl: Creating error log in slot [%d]", l_errSlot);
// get slot pointer
l_rc = G_occErrSlots[ l_errSlot ];
@@ -345,16 +348,111 @@ errlHndl_t createErrl(
}
else
{
- if( traceCount > 0 )
+ if( L_traceCount > 0 )
{
- TRAC_INFO("Error Logs are FULL - Slot [%d]", l_errSlot);
- traceCount--;
+ TRAC_INFO("createErrl: Error Logs are FULL - Slot [%d]", l_errSlot);
+ L_traceCount--;
}
}
return l_rc;
}
+// Function Specification
+//
+// Name: createPgpeErrl
+//
+// Description: Create an Error Log due to a PGPE failure
+//
+// End Function Specification
+errlHndl_t createPgpeErrl(const uint16_t i_modId,
+ const uint8_t i_reasonCode,
+ const uint16_t i_extReasonCode,
+ const ERRL_SEVERITY i_sev,
+ const uint32_t i_userData1,
+ const uint32_t i_userData2)
+{
+ errlHndl_t l_err = INVALID_ERR_HNDL;
+ uint64_t l_time = 0;
+ uint8_t l_id = 0;
+ uint8_t l_errSlot = getErrSlotNumAndErrId( i_sev, &l_id, &l_time);
+ static uint8_t L_traceCount = 5;
+
+
+ if ( l_errSlot != ERRL_INVALID_SLOT )
+ {
+ TRAC_INFO("createPgpeErrl: Creating error log in slot [%d]", l_errSlot);
+
+ // get slot pointer
+ l_err = G_occErrSlots[ l_errSlot ];
+
+ // save off default size
+ l_err->iv_userDetails.iv_entrySize = sizeof( ErrlEntry_t );
+
+ // add error history
+ addErrHistory( l_err );
+
+ // if this is a WOF error add WOF parameters to error log
+ // only add for FSP systems where there is support for larger error logs
+ if( (i_reasonCode == WOF_DISABLED_RC) &&
+ (G_occ_interrupt_type == FSP_SUPPORTED_OCC) )
+ {
+ addUsrDtlsToErrl( l_err,
+ (uint8_t*)&(g_amec_sys.wof),
+ sizeof(amec_wof_t),
+ ERRL_USR_DTL_STRUCT_VERSION_1,
+ ERRL_USR_DTL_WOF_DATA);
+ }
+
+ // add PGPE specific data
+ addPgpeDataToErrl( l_err );
+
+ // add trace last, it will only add upto size that is left
+ addTraceToErrl( NULL, DEFAULT_TRACE_SIZE, l_err );
+
+ // save off entry Id
+ l_err->iv_entryId = l_id;
+
+ //Save off version info
+ l_err->iv_version = ERRL_STRUCT_VERSION_1;
+
+ // save off time
+ l_err->iv_userDetails.iv_timeStamp = l_time;
+
+ // set severity
+ l_err->iv_severity = i_sev;
+
+ l_err->iv_extendedRC = i_extReasonCode;
+
+ // save off user detail section version
+ l_err->iv_userDetails.iv_version = ERRL_USR_DTL_STRUCT_VERSION_1;
+
+ // save off rest of input parameters
+ l_err->iv_userDetails.iv_modId = i_modId;
+ l_err->iv_reasonCode = i_reasonCode;
+ l_err->iv_userDetails.iv_userData1 = i_userData1;
+ l_err->iv_userDetails.iv_userData2 = i_userData2;
+
+ // set callout count to 0
+ l_err->iv_numCallouts = 0;
+
+ // save off occ fields
+ l_err->iv_userDetails.iv_fclipHistory = g_amec->proc[0].chip_f_reason_history;
+ l_err->iv_userDetails.iv_occId = G_pbax_id.chip_id;
+ l_err->iv_userDetails.iv_occRole = G_occ_role;
+ l_err->iv_userDetails.iv_operatingState = CURRENT_STATE();
+ }
+ else
+ {
+ if( L_traceCount > 0 )
+ {
+ TRAC_INFO("createPgpeErrl: Error Logs are FULL - Slot [%d]", l_errSlot);
+ L_traceCount--;
+ }
+ }
+
+ return l_err;
+}
// Function Specification
//
@@ -410,7 +508,7 @@ void addTraceToErrl(
//adjust user details entry size to available size (word align )
uint16_t l_availableSize = MAX_ERRL_ENTRY_SZ - (io_err->iv_userDetails.iv_entrySize + l_headerSz );
- l_usrDtlsEntry.iv_size = ( i_traceSz < l_availableSize ) ? i_traceSz : l_availableSize; // @jh001c
+ l_usrDtlsEntry.iv_size = ( i_traceSz < l_availableSize ) ? i_traceSz : l_availableSize;
//set type
l_usrDtlsEntry.iv_type = (uint8_t) ERRL_USR_DTL_TRACE_DATA;
@@ -583,6 +681,53 @@ void addErrHistory(errlHndl_t io_err)
} // end addErrHistory()
+// Function Specification
+//
+// Name: addPgpeDataToErrl
+//
+// Description: Add PGPE specific data to log
+// NOTE: checking for valid error log and size will be done when addUsrDtlsToErrl() is called
+// End Function Specification
+void addPgpeDataToErrl(errlHndl_t io_err)
+{
+ // Build buffer with the data from PM Hcode
+ // Add PGPE PK trace
+ uint8_t l_buffer[MAX_PGPE_DBUG_DATA] = {0};
+ uint32_t l_trace_sram_addr = in32(PGPE_DEBUG_PTRS_ADDR + PGPE_DEBUG_TRACE_ADDR_OFFSET);
+ // use non-cachable address
+ l_trace_sram_addr &= 0xF7FFFFFF;
+
+ // get the data length, we will clip to our allowed max size if needed
+ uint32_t l_data_length = in32(PGPE_DEBUG_PTRS_ADDR + PGPE_DEBUG_TRACE_SIZE_OFFSET);
+ if(l_data_length > MAX_PGPE_DBUG_DATA)
+ {
+ TRAC_INFO("addPgpeDataToErrl: clipping pgpe trace size from %d to %d",
+ l_data_length, MAX_PGPE_DBUG_DATA);
+ l_data_length = MAX_PGPE_DBUG_DATA;
+ }
+ // make sure address and length are non-zero
+ if(l_trace_sram_addr && l_data_length)
+ {
+ memcpy( (void *) &l_buffer[0],
+ (void *) l_trace_sram_addr,
+ (size_t) l_data_length );
+
+ // Add the data to the error log
+ addUsrDtlsToErrl( io_err,
+ (uint8_t*)l_buffer,
+ (uint16_t)l_data_length,
+ ERRL_USR_DTL_STRUCT_VERSION_1,
+ ERRL_USR_DTL_PGPE_PK_TRACE);
+
+ // set action bit to force this error to be sent to BMC so it is seen even if info
+ setErrlActions(io_err, ERRL_ACTIONS_FORCE_SEND);
+ }
+ else
+ {
+ TRAC_ERR("PGPE trace address[%d] or length[%d] is 0!", l_trace_sram_addr, l_data_length);
+ }
+
+} // end addPgpeDataToErrl()
// Function Specification
//
@@ -929,7 +1074,6 @@ void setErrlSevToInfo( errlHndl_t io_err )
// Description: Set Actions to an Error Log
//
// End Function Specification
-// @jh001a
void setErrlActions(errlHndl_t io_err, const uint8_t i_mask)
{
// check if handle is valid
diff --git a/src/occ_405/errl/errl.h b/src/occ_405/errl/errl.h
index 9a5b178..183b35d 100755
--- a/src/occ_405/errl/errl.h
+++ b/src/occ_405/errl/errl.h
@@ -56,6 +56,9 @@ static const uint32_t INVALID_ERR = 0xFFFFFFFF;
// USED to determine the number of all trace buffer types. Now have (INF/IMP/ERR)
#define NUM_OF_TRACE_TYPE 3
+// maximum size of PGPE debug data will be added for ERRL_USR_DTL_PGPE_PK_TRACE
+#define MAX_PGPE_DBUG_DATA 0x300
+
// These bits are used to acquire a slot number. When used with the global
// slot bit mask, we are able to get 7 slots for predictive/unrecoverable errors,
// 1 slot for informational logs, and 1 slot for call home data log
@@ -69,6 +72,15 @@ typedef enum
ERRL_SLOT_MASK_CALL_HOME_DATA = 0xFF7FFFFF,
} ERRL_SLOT_MASK;
+// These are the possible sources that an error log can be coming from
+typedef enum
+{
+ ERRL_SOURCE_405 = 0x00,
+ ERRL_SOURCE_PGPE = 0x10,
+ ERRL_SOURCE_XGPE = 0x20,
+ ERRL_SOURCE_INVALID = 0xFF,
+} ERRL_SOURCE;
+
// These are the possible severities that an error log can have.
// Users must ONLY use these enum values for severity.
/* Error Severity */
@@ -87,6 +99,7 @@ typedef enum
{
ERRL_ACTIONS_CONSOLIDATE_ERRORS = 0x01, //ignored by tmgt at this time
ERRL_ACTIONS_MANUFACTURING_ERROR = 0x08, //tmgt will set severity to predictive while in mfg mode
+ ERRL_ACTIONS_FORCE_SEND = 0x10, //htmgt will force error to be sent to BMC (for info errors to be seen)
ERRL_ACTIONS_WOF_RESET_REQUIRED = 0x20, //Soft reset without incrementing permanent safe mode count
ERRL_ACTIONS_SAFE_MODE_REQUIRED = 0x40, //immediate permanent safe mode without any recovery (checkstop)
ERRL_ACTIONS_RESET_REQUIRED = 0x80, //permanent safe mode after 3 recovery attempts
@@ -113,6 +126,7 @@ typedef enum
ERRL_USR_DTL_BINARY_DATA = 0x03,
ERRL_USR_DTL_HISTORY_DATA = 0x04,
ERRL_USR_DTL_WOF_DATA = 0x05,
+ ERRL_USR_DTL_PGPE_PK_TRACE = 0x06,
} ERRL_USR_DETAIL_TYPE;
// These are the possible OCC States.
@@ -351,6 +365,15 @@ errlHndl_t createErrl(
const uint32_t i_userData2
);
+/* Create an Error Log due to a PGPE failure */
+errlHndl_t createPgpeErrl(
+ const uint16_t i_modId,
+ const uint8_t i_reasonCode,
+ const uint16_t i_extReasonCode,
+ const ERRL_SEVERITY i_sev,
+ const uint32_t i_userData1,
+ const uint32_t i_userData2
+ );
/* Add Trace Data to Error Log */
void addTraceToErrl(
@@ -362,6 +385,9 @@ void addTraceToErrl(
// Add Error history data to the Error Log
void addErrHistory(errlHndl_t io_err);
+// Add PGPE specific data to the Error Log
+void addPgpeDataToErrl(errlHndl_t io_err);
+
/* Commit the Error Log */
void commitErrl( errlHndl_t * io_err );
diff --git a/src/occ_405/incl/occ_common.h b/src/occ_405/incl/occ_common.h
index 0d967af..d6bf095 100755
--- a/src/occ_405/incl/occ_common.h
+++ b/src/occ_405/incl/occ_common.h
@@ -287,7 +287,6 @@ enum
CF_FSI_MB_TIMEOUT = 0x01,
};
-#define WOF_TRACE_SIZE 1236
#define DEFAULT_TRACE_SIZE 1536
#define MAX_OCCS 8
#define MAX_CORES 24
diff --git a/src/occ_405/main.c b/src/occ_405/main.c
index b20a075..241f627 100755
--- a/src/occ_405/main.c
+++ b/src/occ_405/main.c
@@ -1727,16 +1727,13 @@ void Main_thread_routine(void *private)
* @userdata4 ERC_PGPE_START_SUSPEND_FAILURE
* @devdesc PGPE returned an error in response to start_suspend
*/
- errlHndl_t l_err = createErrl(
- MAIN_THRD_ROUTINE_MID, // modId
- PGPE_FAILURE, // reasoncode
- ERC_PGPE_START_SUSPEND_FAILURE, // Extended reason code
- ERRL_SEV_UNRECOVERABLE, // Severity
- NULL, // Trace Buf
- DEFAULT_TRACE_SIZE, // Trace Size
- G_ss_pgpe_rc, // userdata1
- 0 // userdata2
- );
+ errlHndl_t l_err = createPgpeErrl(MAIN_THRD_ROUTINE_MID, // modId
+ PGPE_FAILURE, // reasoncode
+ ERC_PGPE_START_SUSPEND_FAILURE, // Extended reason code
+ ERRL_SEV_UNRECOVERABLE, // Severity
+ G_ss_pgpe_rc, // userdata1
+ 0 // userdata2
+ );
REQUEST_RESET(l_err);
}
diff --git a/src/occ_405/pgpe/pgpe_interface.c b/src/occ_405/pgpe/pgpe_interface.c
index f681b9e..bcec270 100644
--- a/src/occ_405/pgpe/pgpe_interface.c
+++ b/src/occ_405/pgpe/pgpe_interface.c
@@ -436,16 +436,12 @@ int pgpe_set_clip_blocking(Pstate i_pstate)
* @userdata4 ERC_PGPE_CLIP_NOT_IDLE
* @devdesc pgpe clip update not idle
*/
- err = createErrl(
- PGPE_SET_CLIP_BLOCKING_MOD, //ModId
- PGPE_FAILURE, //Reasoncode
- ERC_PGPE_CLIP_NOT_IDLE, //Extended reason code
- ERRL_SEV_PREDICTIVE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- 0, //Userdata1
- 0 //Userdata2
- );
+ err = createPgpeErrl(PGPE_SET_CLIP_BLOCKING_MOD, //ModId
+ PGPE_FAILURE, //Reasoncode
+ ERC_PGPE_CLIP_NOT_IDLE, //Extended reason code
+ ERRL_SEV_PREDICTIVE, //Severity
+ 0, //Userdata1
+ 0); //Userdata2
}
rc = PGPE_FAILURE;
break;
@@ -486,7 +482,6 @@ int pgpe_set_clip_blocking(Pstate i_pstate)
if(!ignore_pgpe_error())
{
TRAC_ERR("pgpe_set_clip_blocking: clip update IPC task timeout!");
-
/*
* @errortype
* @moduleid PGPE_SET_CLIP_BLOCKING_MOD
@@ -494,16 +489,12 @@ int pgpe_set_clip_blocking(Pstate i_pstate)
* @userdata4 OCC_NO_EXTENDED_RC
* @devdesc pgpe clip update timeout
*/
- err = createErrl(
- PGPE_SET_CLIP_BLOCKING_MOD, //ModId
- GPE_REQUEST_TASK_TIMEOUT, //Reasoncode
- OCC_NO_EXTENDED_RC, //Extended reason code
- ERRL_SEV_PREDICTIVE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- 0, //Userdata1
- 0 //Userdata2
- );
+ err = createPgpeErrl(PGPE_SET_CLIP_BLOCKING_MOD, //ModId
+ GPE_REQUEST_TASK_TIMEOUT, //Reasoncode
+ OCC_NO_EXTENDED_RC, //Extended reason code
+ ERRL_SEV_PREDICTIVE, //Severity
+ 0, //Userdata1
+ 0); //Userdata2
}
rc = GPE_REQUEST_TASK_TIMEOUT;
break;
@@ -537,16 +528,12 @@ int pgpe_set_clip_blocking(Pstate i_pstate)
* @userdata4 OCC_NO_EXTENDED_RC
* @devdesc pgpe clip update returned a failure code
*/
- err = createErrl(
- PGPE_SET_CLIP_BLOCKING_MOD, //ModId
- GPE_REQUEST_RC_FAILURE, //Reasoncode
- OCC_NO_EXTENDED_RC, //Extended reason code
- ERRL_SEV_PREDICTIVE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- G_clip_update_parms.msg_cb.rc, //Userdata1
- 0 //Userdata2
- );
+ err = createPgpeErrl(PGPE_SET_CLIP_BLOCKING_MOD, //ModId
+ GPE_REQUEST_RC_FAILURE, //Reasoncode
+ OCC_NO_EXTENDED_RC, //Extended reason code
+ ERRL_SEV_PREDICTIVE, //Severity
+ G_clip_update_parms.msg_cb.rc, //Userdata1
+ 0); //Userdata2
rc = GPE_REQUEST_RC_FAILURE;
}
@@ -556,7 +543,7 @@ int pgpe_set_clip_blocking(Pstate i_pstate)
if(err)
{
REQUEST_RESET(err);
- }
+ }
return(rc);
}
@@ -602,16 +589,12 @@ int pgpe_clip_update(void)
* @userdata4 ERC_PGPE_CLIP_NOT_IDLE
* @devdesc pgpe clip update not idle
*/
- err = createErrl(
- PGPE_CLIP_UPDATE_MOD, //ModId
- PGPE_FAILURE, //Reasoncode
- ERC_PGPE_CLIP_NOT_IDLE, //Extended reason code
- ERRL_SEV_PREDICTIVE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- 0, //Userdata1
- 0 //Userdata2
- );
+ err = createPgpeErrl(PGPE_CLIP_UPDATE_MOD, //ModId
+ PGPE_FAILURE, //Reasoncode
+ ERC_PGPE_CLIP_NOT_IDLE, //Extended reason code
+ ERRL_SEV_PREDICTIVE, //Severity
+ 0, //Userdata1
+ 0); //Userdata2
// Callout firmware
addCalloutToErrl(err,
@@ -690,16 +673,12 @@ int pgpe_clip_update(void)
* @userdata4 ERC_PGPE_CLIP_FAILURE
* @devdesc OCC Failed to schedule a GPE job for clip update
*/
- err = createErrl(
- PGPE_CLIP_UPDATE_MOD, // modId
- GPE_REQUEST_SCHEDULE_FAILURE, // reasoncode
- ERC_PGPE_CLIP_FAILURE, // Extended reason code
- ERRL_SEV_UNRECOVERABLE, // Severity
- NULL, // Trace Buf
- DEFAULT_TRACE_SIZE, // Trace Size
- schedule_rc, // userdata1
- 0 // userdata2
- );
+ err = createPgpeErrl(PGPE_CLIP_UPDATE_MOD, // modId
+ GPE_REQUEST_SCHEDULE_FAILURE, // reasoncode
+ ERC_PGPE_CLIP_FAILURE, // Extended reason code
+ ERRL_SEV_UNRECOVERABLE, // Severity
+ schedule_rc, // userdata1
+ 0); //Userdata2
ext_rc = ERC_PGPE_CLIP_FAILURE;
REQUEST_RESET(err); //This will add a firmware callout for us
@@ -795,16 +774,12 @@ int pgpe_start_suspend(uint8_t action, PMCR_OWNER owner)
* @userdata4 ERC_PGPE_START_SUSPEND_NOT_IDLE
* @devdesc pgpe start suspend task not idle
*/
- err = createErrl(
- PGPE_START_SUSPEND_MOD, //ModId
- PGPE_FAILURE, //Reasoncode
- ERC_PGPE_START_SUSPEND_NOT_IDLE, //Extended reason code
- ERRL_SEV_PREDICTIVE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- 0, //Userdata1
- 0 //Userdata2
- );
+ err = createPgpeErrl(PGPE_START_SUSPEND_MOD, //ModId
+ PGPE_FAILURE, //Reasoncode
+ ERC_PGPE_START_SUSPEND_NOT_IDLE, //Extended reason code
+ ERRL_SEV_PREDICTIVE, //Severity
+ 0, //Userdata1
+ 0); //Userdata2
// Callout firmware
addCalloutToErrl(err,
@@ -868,16 +843,12 @@ int pgpe_start_suspend(uint8_t action, PMCR_OWNER owner)
* @userdata4 ERC_PGPE_START_SUSPEND_FAILURE
* @devdesc OCC Failed to schedule a PGPE job for start_suspend
*/
- err = createErrl(
- PGPE_START_SUSPEND_MOD, // modId
- GPE_REQUEST_SCHEDULE_FAILURE, // reasoncode
- ERC_PGPE_START_SUSPEND_FAILURE, // Extended reason code
- ERRL_SEV_UNRECOVERABLE, // Severity
- NULL, // Trace Buf
- DEFAULT_TRACE_SIZE, // Trace Size
- schedule_rc, // userdata1
- 0 // userdata2
- );
+ err = createPgpeErrl(PGPE_START_SUSPEND_MOD, // modId
+ GPE_REQUEST_SCHEDULE_FAILURE, // reasoncode
+ ERC_PGPE_START_SUSPEND_FAILURE, // Extended reason code
+ ERRL_SEV_UNRECOVERABLE, // Severity
+ schedule_rc, // userdata1
+ 0); //Userdata2
REQUEST_RESET(err); //This will add a firmware callout for us
}
@@ -929,16 +900,12 @@ int pgpe_pmcr_set(void)
* @userdata4 ERC_PGPE_SET_PMCR_NOT_IDLE
* @devdesc pgpe pmcr set not idle
*/
- err = createErrl(
- PGPE_PMCR_SET_MOD, //ModId
- PGPE_FAILURE, //Reasoncode
- ERC_PGPE_SET_PMCR_NOT_IDLE, //Extended reason code
- ERRL_SEV_PREDICTIVE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- 0, //Userdata1
- 0 //Userdata2
- );
+ err = createPgpeErrl(PGPE_PMCR_SET_MOD, //ModId
+ PGPE_FAILURE, //Reasoncode
+ ERC_PGPE_SET_PMCR_NOT_IDLE, //Extended reason code
+ ERRL_SEV_PREDICTIVE, //Severity
+ 0, //Userdata1
+ 0); //Userdata2
// Callout firmware
addCalloutToErrl(err,
@@ -979,16 +946,12 @@ int pgpe_pmcr_set(void)
* @userdata4 ERC_PGPE_SET_PMCR_FAILURE
* @devdesc OCC Failed to schedule a PGPE job for PMCR update
*/
- err = createErrl(
- PGPE_PMCR_SET_MOD, // modId
- GPE_REQUEST_SCHEDULE_FAILURE, // reasoncode
- ERC_PGPE_SET_PMCR_FAILURE, // Extended reason code
- ERRL_SEV_UNRECOVERABLE, // Severity
- NULL, // Trace Buf
- DEFAULT_TRACE_SIZE, // Trace Size
- schedule_rc, // userdata1
- 0 // userdata2
- );
+ err = createPgpeErrl(PGPE_PMCR_SET_MOD, // modId
+ GPE_REQUEST_SCHEDULE_FAILURE, // reasoncode
+ ERC_PGPE_SET_PMCR_FAILURE, // Extended reason code
+ ERRL_SEV_UNRECOVERABLE, // Severity
+ schedule_rc, // userdata1
+ 0); //Userdata2
REQUEST_RESET(err); //This will add a firmware callout for us
}
diff --git a/src/occ_405/pgpe/pgpe_shared.h b/src/occ_405/pgpe/pgpe_shared.h
index 12a7d73..e9b958f 100644
--- a/src/occ_405/pgpe/pgpe_shared.h
+++ b/src/occ_405/pgpe/pgpe_shared.h
@@ -29,6 +29,11 @@
#define OPPB_MAGIC_NUMBER_10 0x4F43435050423030ull // "OCCPPB00"
#define PGPE_MAGIC_NUMBER_10 0x504750455F312E30ull // "PGPE_1.0"
+// Address and offset to find PGPE PK trace
+#define PGPE_DEBUG_PTRS_ADDR 0xFFF20200 // 0xfff20000 + 0x200
+#define PGPE_DEBUG_TRACE_ADDR_OFFSET 0x04
+#define PGPE_DEBUG_TRACE_SIZE_OFFSET 0x08
+
// Offset addresses of PGPE Header parameters (relative to start address)
#define PGPE_SHARED_SRAM_ADDR_OFFSET 0x0c
#define PGPE_SHARED_SRAM_LEN_OFFSET 0x14
diff --git a/src/occ_405/proc/proc_data_control.c b/src/occ_405/proc/proc_data_control.c
index df79096..bddc141 100755
--- a/src/occ_405/proc/proc_data_control.c
+++ b/src/occ_405/proc/proc_data_control.c
@@ -199,16 +199,12 @@ void task_core_data_control( task_t * i_task )
TRAC_ERR("task_core_data_control: pstate[0x%02X] update IPC task did not complete successfully, idle?[%d] rc[%08X]",
G_desired_pstate[0], l_request_is_idle, l_request_rc);
- err = createErrl(
- RTLS_TASK_CORE_DATA_CONTROL_MOD, //ModId
- PGPE_FAILURE, //Reasoncode
- l_ext_rc, //Extended reason code
- ERRL_SEV_PREDICTIVE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- l_request_rc, //Userdata1
- l_request_is_idle //Userdata2
- );
+ err = createPgpeErrl(RTLS_TASK_CORE_DATA_CONTROL_MOD, //ModId
+ PGPE_FAILURE, //Reasoncode
+ l_ext_rc, //Extended reason code
+ ERRL_SEV_PREDICTIVE, //Severity
+ l_request_rc, //Userdata1
+ l_request_is_idle); //Userdata2
//Add firmware callout
addCalloutToErrl(err,
diff --git a/src/occ_405/state.c b/src/occ_405/state.c
index 03c6922..712a16a 100755
--- a/src/occ_405/state.c
+++ b/src/occ_405/state.c
@@ -297,14 +297,12 @@ errlHndl_t SMGR_standby_to_characterization()
* @userdata4 ERC_STATE_FROM_STB_TO_CHR_FAILURE
* @devdesc Failed changing from standby to characterization
*/
- l_errlHndl = createErrl(MAIN_STATE_TRANSITION_MID, //modId
- INTERNAL_FAILURE, //reasoncode
- ERC_STATE_FROM_STB_TO_CHR_FAILURE, //Extended reason code
- ERRL_SEV_UNRECOVERABLE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- rc, //userdata1
- 0); //userdata2
+ l_errlHndl = createPgpeErrl(MAIN_STATE_TRANSITION_MID, //modId
+ INTERNAL_FAILURE, //reasoncode
+ ERC_STATE_FROM_STB_TO_CHR_FAILURE, //Extended reason code
+ ERRL_SEV_UNRECOVERABLE, //Severity
+ rc, //userdata1
+ 0); //userdata2
// Callout firmware
addCalloutToErrl(l_errlHndl,
@@ -430,14 +428,12 @@ errlHndl_t SMGR_characterization_to_observation()
* @userdata4 ERC_STATE_FROM_CHR_TO_OBS_FAILURE
* @devdesc Failed changing from observation to characterization
*/
- l_errlHndl = createErrl(MAIN_STATE_TRANSITION_MID, //modId
- INTERNAL_FAILURE, //reasoncode
- ERC_STATE_FROM_CHR_TO_OBS_FAILURE, //Extended reason code
- ERRL_SEV_UNRECOVERABLE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- rc, //userdata1
- 0); //userdata2
+ l_errlHndl = createPgpeErrl(MAIN_STATE_TRANSITION_MID, //modId
+ INTERNAL_FAILURE, //reasoncode
+ ERC_STATE_FROM_CHR_TO_OBS_FAILURE, //Extended reason code
+ ERRL_SEV_UNRECOVERABLE, //Severity
+ rc, //userdata1
+ 0); //userdata2
// Callout firmware
addCalloutToErrl(l_errlHndl,
@@ -551,14 +547,12 @@ errlHndl_t SMGR_observation_to_characterization()
* @userdata4 ERC_STATE_FROM_OBS_TO_CHR_FAILURE
* @devdesc Failed changing from observation to characterization
*/
- l_errlHndl = createErrl(MAIN_STATE_TRANSITION_MID, //modId
- INTERNAL_FAILURE, //reasoncode
- ERC_STATE_FROM_OBS_TO_CHR_FAILURE, //Extended reason code
- ERRL_SEV_UNRECOVERABLE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- rc, //userdata1
- 0); //userdata2
+ l_errlHndl = createPgpeErrl(MAIN_STATE_TRANSITION_MID, //modId
+ INTERNAL_FAILURE, //reasoncode
+ ERC_STATE_FROM_OBS_TO_CHR_FAILURE, //Extended reason code
+ ERRL_SEV_UNRECOVERABLE, //Severity
+ rc, //userdata1
+ 0); //userdata2
// Callout firmware
addCalloutToErrl(l_errlHndl,
@@ -679,14 +673,12 @@ errlHndl_t SMGR_observation_to_active()
* @userdata4 ERC_PGPE_SET_NOMINAL_FAILURE
* @devdesc Failed to set nominal Pstate before host
*/
- l_errlHndl = createErrl(MAIN_STATE_TRANSITION_MID, //modId
- INTERNAL_FW_FAILURE, //reasoncode
- ERC_PGPE_SET_NOMINAL_FAILURE, //Extended reason code
- ERRL_SEV_INFORMATIONAL, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- l_rc, //userdata1
- 0); //userdata2
+ l_errlHndl = createPgpeErrl(MAIN_STATE_TRANSITION_MID, //modId
+ INTERNAL_FW_FAILURE, //reasoncode
+ ERC_PGPE_SET_NOMINAL_FAILURE, //Ext rc
+ ERRL_SEV_INFORMATIONAL, //Severity
+ l_rc, //userdata1
+ 0); //userdata2
commitErrl(&l_errlHndl);
l_errlHndl = NULL;
l_rc = 0;
@@ -825,14 +817,12 @@ errlHndl_t SMGR_observation_to_active()
if(l_rc && (FALSE == L_error_logged))
{
L_error_logged = TRUE;
- l_errlHndl = createErrl(MAIN_STATE_TRANSITION_MID, //modId
- INTERNAL_FAILURE, //reasoncode
- l_extRc, //Extended reason code
- ERRL_SEV_UNRECOVERABLE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- l_user_data, //userdata1
- l_rc); //userdata2
+ l_errlHndl = createPgpeErrl(MAIN_STATE_TRANSITION_MID, //modId
+ INTERNAL_FAILURE, //reasoncode
+ l_extRc, //Extended reason code
+ ERRL_SEV_UNRECOVERABLE, //Severity
+ l_user_data, //userdata1
+ l_rc); //userdata2
// Callout firmware
addCalloutToErrl(l_errlHndl,
@@ -978,14 +968,12 @@ errlHndl_t SMGR_active_to_observation()
if(rc)
{
TRAC_ERR("SMGR: Failed with rc = %d to switch to Observation state", rc);
- l_errlHndl = createErrl(MAIN_STATE_TRANSITION_MID, //modId
- rc, //reasoncode
- ext_rc, //Extended reason code
- ERRL_SEV_UNRECOVERABLE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- wait_time, //userdata1
- 0); //userdata2
+ l_errlHndl = createPgpeErrl(MAIN_STATE_TRANSITION_MID, //modId
+ rc, //reasoncode
+ ext_rc, //Extended reason code
+ ERRL_SEV_UNRECOVERABLE, //Severity
+ wait_time, //userdata1
+ 0); //userdata2
// Callout firmware
addCalloutToErrl(l_errlHndl,
@@ -1106,14 +1094,12 @@ errlHndl_t SMGR_active_to_characterization()
* @userdata4 ERC_STATE_FROM_ACT_TO_CHR_FAILURE
* @devdesc Failed changing from standby to observation
*/
- l_errlHndl = createErrl(MAIN_STATE_TRANSITION_MID, //modId
- INTERNAL_FAILURE, //reasoncode
- ERC_STATE_FROM_ACT_TO_CHR_FAILURE,//Extended reason code
- ERRL_SEV_UNRECOVERABLE, //Severity
- NULL, //Trace Buf
- DEFAULT_TRACE_SIZE, //Trace Size
- rc, //userdata1
- 0); //userdata2
+ l_errlHndl = createPgpeErrl(MAIN_STATE_TRANSITION_MID, //modId
+ INTERNAL_FAILURE, //reasoncode
+ ERC_STATE_FROM_ACT_TO_CHR_FAILURE, //Extended reason code
+ ERRL_SEV_UNRECOVERABLE, //Severity
+ rc, //userdata1
+ 0); //userdata2
// Callout firmware
addCalloutToErrl(l_errlHndl,
diff --git a/src/occ_405/timer/timer.c b/src/occ_405/timer/timer.c
index a9c892a..e562cab 100755
--- a/src/occ_405/timer/timer.c
+++ b/src/occ_405/timer/timer.c
@@ -540,14 +540,12 @@ void check_pgpe_beacon(void)
* @userdata4 ERC_PGPE_BEACON_TIMEOUT
* @devdesc PGPE Beacon timeout
*/
- l_err = createErrl(POKE_WD_TIMERS, // mod id
- PGPE_FAILURE, // reason code
- ERC_PGPE_BEACON_TIMEOUT, // Extended reason code
- ERRL_SEV_UNRECOVERABLE, // severity
- NULL, // trace buffer
- DEFAULT_TRACE_SIZE, //Trace Size
- pgpe_beacon, // userdata1
- G_pgpe_header.beacon_sram_addr); // userdata2
+ l_err = createPgpeErrl(POKE_WD_TIMERS, // mod id
+ PGPE_FAILURE, // reason code
+ ERC_PGPE_BEACON_TIMEOUT, // Extended reason code
+ ERRL_SEV_UNRECOVERABLE, // severity
+ pgpe_beacon, // userdata1
+ G_pgpe_header.beacon_sram_addr); // userdata2
//Add firmware callout
addCalloutToErrl(l_err,
diff --git a/src/occ_405/wof/wof.c b/src/occ_405/wof/wof.c
index c6020e6..0a5bff3 100644
--- a/src/occ_405/wof/wof.c
+++ b/src/occ_405/wof/wof.c
@@ -1569,22 +1569,12 @@ void set_clear_wof_disabled( uint8_t i_action,
* @userdata4 Unique extended RC given by caller
* @devdesc WOF has been disabled due to an error
*/
- l_errl = createErrl(
- SET_CLEAR_WOF_DISABLED,
- WOF_DISABLED_RC,
- i_ext_rc,
- ERRL_SEV_UNRECOVERABLE,
- NULL,
- WOF_TRACE_SIZE,
- g_wof->wof_disabled,
- i_bit_mask );
-
- // Add WOF parameters to error log
- addUsrDtlsToErrl( l_errl,
- (uint8_t*)g_wof,
- sizeof(*g_wof),
- ERRL_STRUCT_VERSION_1,
- ERRL_USR_DTL_WOF_DATA);
+ l_errl = createPgpeErrl(SET_CLEAR_WOF_DISABLED,
+ WOF_DISABLED_RC,
+ i_ext_rc,
+ ERRL_SEV_UNRECOVERABLE,
+ g_wof->wof_disabled,
+ i_bit_mask );
// Reset if on Reason Code requires it.
if(i_bit_mask & ~(IGNORE_WOF_RESET) )
OpenPOWER on IntegriCloud