arch: arm: Adding fault description for the cortex A7
Add support for processing the Fault Status Registers and recoverable data abort for the cortex A7. Based on Cortex-A7 MPCore Technical Reference Manual (ARM DDI 0406). (see https://developer.arm.com/documentation/ddi0406) Signed-off-by: Julien Racki <julien.racki@st.com>
This commit is contained in:
parent
695e6d73d4
commit
87719828ac
3 changed files with 93 additions and 1 deletions
|
@ -100,6 +100,59 @@ static uint32_t dump_fault(uint32_t status, uint32_t addr)
|
|||
reason = K_ERR_ARM_UNSUPPORTED_EXCLUSIVE_ACCESS_FAULT;
|
||||
LOG_ERR("Unsupported Exclusive Access Fault @ 0x%08x", addr);
|
||||
break;
|
||||
#elif defined(CONFIG_ARMV7_A)
|
||||
case FSR_FS_PERMISSION_FAULT_2ND_LEVEL:
|
||||
reason = K_ERR_ARM_PERMISSION_FAULT_2ND_LEVEL;
|
||||
LOG_ERR("2nd Level Permission Fault @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_ACCESS_FLAG_FAULT_1ST_LEVEL:
|
||||
reason = K_ERR_ARM_ACCESS_FLAG_FAULT_1ST_LEVEL;
|
||||
LOG_ERR("1st Level Access Flag Fault @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_ACCESS_FLAG_FAULT_2ND_LEVEL:
|
||||
reason = K_ERR_ARM_ACCESS_FLAG_FAULT_2ND_LEVEL;
|
||||
LOG_ERR("2nd Level Access Flag Fault @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_CACHE_MAINTENANCE_INSTRUCTION_FAULT:
|
||||
reason = K_ERR_ARM_CACHE_MAINTENANCE_INSTRUCTION_FAULT;
|
||||
LOG_ERR("Cache Maintenance Instruction Fault @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_TRANSLATION_FAULT:
|
||||
reason = K_ERR_ARM_TRANSLATION_FAULT;
|
||||
LOG_ERR("1st Level Translation Fault @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_TRANSLATION_FAULT_2ND_LEVEL:
|
||||
reason = K_ERR_ARM_TRANSLATION_FAULT_2ND_LEVEL;
|
||||
LOG_ERR("2nd Level Translation Fault @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_DOMAIN_FAULT_1ST_LEVEL:
|
||||
reason = K_ERR_ARM_DOMAIN_FAULT_1ST_LEVEL;
|
||||
LOG_ERR("1st Level Domain Fault @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_DOMAIN_FAULT_2ND_LEVEL:
|
||||
reason = K_ERR_ARM_DOMAIN_FAULT_2ND_LEVEL;
|
||||
LOG_ERR("2nd Level Domain Fault @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_SYNC_EXTERNAL_ABORT_TRANSLATION_TABLE_1ST_LEVEL:
|
||||
reason = K_ERR_ARM_SYNC_EXTERNAL_ABORT_TRANSLATION_TABLE_1ST_LEVEL;
|
||||
LOG_ERR("1st Level Synchronous External Abort Translation Table @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_SYNC_EXTERNAL_ABORT_TRANSLATION_TABLE_2ND_LEVEL:
|
||||
reason = K_ERR_ARM_SYNC_EXTERNAL_ABORT_TRANSLATION_TABLE_2ND_LEVEL;
|
||||
LOG_ERR("2nd Level Synchronous External Abort Translation Table @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_TLB_CONFLICT_FAULT:
|
||||
reason = K_ERR_ARM_TLB_CONFLICT_FAULT;
|
||||
LOG_ERR("Table Conflict Fault @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_SYNC_PARITY_ERROR_TRANSLATION_TABLE_1ST_LEVEL:
|
||||
reason = K_ERR_ARM_SYNC_PARITY_ERROR_TRANSLATION_TABLE_1ST_LEVEL;
|
||||
LOG_ERR("1st Level Synchronous Parity Error Translation Table @ 0x%08x", addr);
|
||||
break;
|
||||
case FSR_FS_SYNC_PARITY_ERROR_TRANSLATION_TABLE_2ND_LEVEL:
|
||||
reason = K_ERR_ARM_SYNC_PARITY_ERROR_TRANSLATION_TABLE_2ND_LEVEL;
|
||||
LOG_ERR("2nd Level Synchronous Parity Error Translation Table @ 0x%08x", addr);
|
||||
break;
|
||||
#else
|
||||
case FSR_FS_BACKGROUND_FAULT:
|
||||
reason = K_ERR_ARM_BACKGROUND_FAULT;
|
||||
|
|
|
@ -99,13 +99,25 @@ enum k_fatal_error_reason_arch {
|
|||
K_ERR_ARM_ALIGNMENT_FAULT,
|
||||
K_ERR_ARM_BACKGROUND_FAULT,
|
||||
K_ERR_ARM_PERMISSION_FAULT,
|
||||
K_ERR_ARM_PERMISSION_FAULT_2ND_LEVEL,
|
||||
K_ERR_ARM_SYNC_EXTERNAL_ABORT,
|
||||
K_ERR_ARM_ASYNC_EXTERNAL_ABORT,
|
||||
K_ERR_ARM_SYNC_PARITY_ERROR,
|
||||
K_ERR_ARM_ASYNC_PARITY_ERROR,
|
||||
K_ERR_ARM_DEBUG_EVENT,
|
||||
K_ERR_ARM_TRANSLATION_FAULT,
|
||||
K_ERR_ARM_UNSUPPORTED_EXCLUSIVE_ACCESS_FAULT
|
||||
K_ERR_ARM_TRANSLATION_FAULT_2ND_LEVEL,
|
||||
K_ERR_ARM_UNSUPPORTED_EXCLUSIVE_ACCESS_FAULT,
|
||||
K_ERR_ARM_ACCESS_FLAG_FAULT_1ST_LEVEL,
|
||||
K_ERR_ARM_ACCESS_FLAG_FAULT_2ND_LEVEL,
|
||||
K_ERR_ARM_CACHE_MAINTENANCE_INSTRUCTION_FAULT,
|
||||
K_ERR_ARM_DOMAIN_FAULT_1ST_LEVEL,
|
||||
K_ERR_ARM_DOMAIN_FAULT_2ND_LEVEL,
|
||||
K_ERR_ARM_SYNC_EXTERNAL_ABORT_TRANSLATION_TABLE_1ST_LEVEL,
|
||||
K_ERR_ARM_SYNC_EXTERNAL_ABORT_TRANSLATION_TABLE_2ND_LEVEL,
|
||||
K_ERR_ARM_TLB_CONFLICT_FAULT,
|
||||
K_ERR_ARM_SYNC_PARITY_ERROR_TRANSLATION_TABLE_1ST_LEVEL,
|
||||
K_ERR_ARM_SYNC_PARITY_ERROR_TRANSLATION_TABLE_2ND_LEVEL,
|
||||
};
|
||||
|
||||
#endif /* _ASMLANGUAGE */
|
||||
|
|
|
@ -29,6 +29,33 @@
|
|||
#define FSR_FS_ALIGNMENT_FAULT (33)
|
||||
#define FSR_FS_DEBUG_EVENT (34)
|
||||
#define FSR_FS_UNSUPPORTED_EXCLUSIVE_ACCESS_FAULT (53)
|
||||
#elif defined(CONFIG_ARMV7_A)
|
||||
|
||||
/**
|
||||
* N.B.: these FSR encodings are only valid when the
|
||||
* Short-descriptor translation table format is used
|
||||
*/
|
||||
|
||||
#define FSR_FS_ALIGNMENT_FAULT (1)
|
||||
#define FSR_FS_DEBUG_EVENT (2)
|
||||
#define FSR_FS_ACCESS_FLAG_FAULT_1ST_LEVEL (3)
|
||||
#define FSR_FS_CACHE_MAINTENANCE_INSTRUCTION_FAULT (4)
|
||||
#define FSR_FS_TRANSLATION_FAULT (5)
|
||||
#define FSR_FS_ACCESS_FLAG_FAULT_2ND_LEVEL (6)
|
||||
#define FSR_FS_TRANSLATION_FAULT_2ND_LEVEL (7)
|
||||
#define FSR_FS_SYNC_EXTERNAL_ABORT (8)
|
||||
#define FSR_FS_DOMAIN_FAULT_1ST_LEVEL (9)
|
||||
#define FSR_FS_DOMAIN_FAULT_2ND_LEVEL (11)
|
||||
#define FSR_FS_SYNC_EXTERNAL_ABORT_TRANSLATION_TABLE_1ST_LEVEL (12)
|
||||
#define FSR_FS_PERMISSION_FAULT (13)
|
||||
#define FSR_FS_SYNC_EXTERNAL_ABORT_TRANSLATION_TABLE_2ND_LEVEL (14)
|
||||
#define FSR_FS_PERMISSION_FAULT_2ND_LEVEL (15)
|
||||
#define FSR_FS_TLB_CONFLICT_FAULT (16)
|
||||
#define FSR_FS_ASYNC_EXTERNAL_ABORT (22)
|
||||
#define FSR_FS_ASYNC_PARITY_ERROR (24)
|
||||
#define FSR_FS_SYNC_PARITY_ERROR (25)
|
||||
#define FSR_FS_SYNC_PARITY_ERROR_TRANSLATION_TABLE_1ST_LEVEL (28)
|
||||
#define FSR_FS_SYNC_PARITY_ERROR_TRANSLATION_TABLE_2ND_LEVEL (30)
|
||||
#else
|
||||
#define FSR_FS_BACKGROUND_FAULT (0)
|
||||
#define FSR_FS_ALIGNMENT_FAULT (1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue