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;
|
reason = K_ERR_ARM_UNSUPPORTED_EXCLUSIVE_ACCESS_FAULT;
|
||||||
LOG_ERR("Unsupported Exclusive Access Fault @ 0x%08x", addr);
|
LOG_ERR("Unsupported Exclusive Access Fault @ 0x%08x", addr);
|
||||||
break;
|
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
|
#else
|
||||||
case FSR_FS_BACKGROUND_FAULT:
|
case FSR_FS_BACKGROUND_FAULT:
|
||||||
reason = K_ERR_ARM_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_ALIGNMENT_FAULT,
|
||||||
K_ERR_ARM_BACKGROUND_FAULT,
|
K_ERR_ARM_BACKGROUND_FAULT,
|
||||||
K_ERR_ARM_PERMISSION_FAULT,
|
K_ERR_ARM_PERMISSION_FAULT,
|
||||||
|
K_ERR_ARM_PERMISSION_FAULT_2ND_LEVEL,
|
||||||
K_ERR_ARM_SYNC_EXTERNAL_ABORT,
|
K_ERR_ARM_SYNC_EXTERNAL_ABORT,
|
||||||
K_ERR_ARM_ASYNC_EXTERNAL_ABORT,
|
K_ERR_ARM_ASYNC_EXTERNAL_ABORT,
|
||||||
K_ERR_ARM_SYNC_PARITY_ERROR,
|
K_ERR_ARM_SYNC_PARITY_ERROR,
|
||||||
K_ERR_ARM_ASYNC_PARITY_ERROR,
|
K_ERR_ARM_ASYNC_PARITY_ERROR,
|
||||||
K_ERR_ARM_DEBUG_EVENT,
|
K_ERR_ARM_DEBUG_EVENT,
|
||||||
K_ERR_ARM_TRANSLATION_FAULT,
|
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 */
|
#endif /* _ASMLANGUAGE */
|
||||||
|
|
|
@ -29,6 +29,33 @@
|
||||||
#define FSR_FS_ALIGNMENT_FAULT (33)
|
#define FSR_FS_ALIGNMENT_FAULT (33)
|
||||||
#define FSR_FS_DEBUG_EVENT (34)
|
#define FSR_FS_DEBUG_EVENT (34)
|
||||||
#define FSR_FS_UNSUPPORTED_EXCLUSIVE_ACCESS_FAULT (53)
|
#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
|
#else
|
||||||
#define FSR_FS_BACKGROUND_FAULT (0)
|
#define FSR_FS_BACKGROUND_FAULT (0)
|
||||||
#define FSR_FS_ALIGNMENT_FAULT (1)
|
#define FSR_FS_ALIGNMENT_FAULT (1)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue