diff --git a/arch/arm/core/cortex_a_r/fault.c b/arch/arm/core/cortex_a_r/fault.c index daf1d2345ca..eac07cbf9b2 100644 --- a/arch/arm/core/cortex_a_r/fault.c +++ b/arch/arm/core/cortex_a_r/fault.c @@ -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; diff --git a/include/zephyr/arch/arm/arch.h b/include/zephyr/arch/arm/arch.h index aa8042644a1..1a33196b15e 100644 --- a/include/zephyr/arch/arm/arch.h +++ b/include/zephyr/arch/arm/arch.h @@ -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 */ diff --git a/modules/cmsis/cmsis_core_a_r_ext.h b/modules/cmsis/cmsis_core_a_r_ext.h index 0752b1474fa..e1ddce4c066 100644 --- a/modules/cmsis/cmsis_core_a_r_ext.h +++ b/modules/cmsis/cmsis_core_a_r_ext.h @@ -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)