diff options
author | mbroyles <mbroyles@us.ibm.com> | 2018-09-14 15:16:56 -0500 |
---|---|---|
committer | Martha Broyles <mbroyles@us.ibm.com> | 2018-09-20 09:06:56 -0500 |
commit | 8344884b54ca2f688f1c4d87f6aa48a48ff684be (patch) | |
tree | 13fd911566f33bc39acbc549c2fc5f3e35e992f3 /src | |
parent | b1453b6ce600d6f9879d6ebb2c30c6691a169e39 (diff) | |
download | talos-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-x | src/occ_405/cmdh/cmdh_fsp_cmds.c | 83 | ||||
-rwxr-xr-x | src/occ_405/cmdh/cmdh_fsp_cmds.h | 12 | ||||
-rwxr-xr-x | src/occ_405/errl/errl.c | 158 | ||||
-rwxr-xr-x | src/occ_405/errl/errl.h | 26 | ||||
-rwxr-xr-x | src/occ_405/incl/occ_common.h | 1 | ||||
-rwxr-xr-x | src/occ_405/main.c | 17 | ||||
-rw-r--r-- | src/occ_405/pgpe/pgpe_interface.c | 147 | ||||
-rw-r--r-- | src/occ_405/pgpe/pgpe_shared.h | 5 | ||||
-rwxr-xr-x | src/occ_405/proc/proc_data_control.c | 16 | ||||
-rwxr-xr-x | src/occ_405/state.c | 98 | ||||
-rwxr-xr-x | src/occ_405/timer/timer.c | 14 | ||||
-rw-r--r-- | src/occ_405/wof/wof.c | 22 |
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) ) |