arch: arc: use common exception printing macros
ARC was using this method already in a custom way and was different from all other architectures, lets make this generic. Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
parent
58a3e7bded
commit
89261db819
@ -18,25 +18,24 @@
|
||||
#include <zephyr/logging/log.h>
|
||||
#include <kernel_arch_data.h>
|
||||
#include <zephyr/arch/exception.h>
|
||||
#include <err_dump_handling.h>
|
||||
|
||||
LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);
|
||||
|
||||
#ifdef CONFIG_EXCEPTION_DEBUG
|
||||
static void dump_arc_esf(const struct arch_esf *esf)
|
||||
{
|
||||
ARC_EXCEPTION_DUMP(" r0: 0x%" PRIxPTR " r1: 0x%" PRIxPTR " r2: 0x%" PRIxPTR
|
||||
EXCEPTION_DUMP(" r0: 0x%" PRIxPTR " r1: 0x%" PRIxPTR " r2: 0x%" PRIxPTR
|
||||
" r3: 0x%" PRIxPTR "", esf->r0, esf->r1, esf->r2, esf->r3);
|
||||
ARC_EXCEPTION_DUMP(" r4: 0x%" PRIxPTR " r5: 0x%" PRIxPTR " r6: 0x%" PRIxPTR
|
||||
EXCEPTION_DUMP(" r4: 0x%" PRIxPTR " r5: 0x%" PRIxPTR " r6: 0x%" PRIxPTR
|
||||
" r7: 0x%" PRIxPTR "", esf->r4, esf->r5, esf->r6, esf->r7);
|
||||
ARC_EXCEPTION_DUMP(" r8: 0x%" PRIxPTR " r9: 0x%" PRIxPTR " r10: 0x%" PRIxPTR
|
||||
EXCEPTION_DUMP(" r8: 0x%" PRIxPTR " r9: 0x%" PRIxPTR " r10: 0x%" PRIxPTR
|
||||
" r11: 0x%" PRIxPTR "", esf->r8, esf->r9, esf->r10, esf->r11);
|
||||
ARC_EXCEPTION_DUMP("r12: 0x%" PRIxPTR " r13: 0x%" PRIxPTR " pc: 0x%" PRIxPTR "",
|
||||
EXCEPTION_DUMP("r12: 0x%" PRIxPTR " r13: 0x%" PRIxPTR " pc: 0x%" PRIxPTR "",
|
||||
esf->r12, esf->r13, esf->pc);
|
||||
ARC_EXCEPTION_DUMP(" blink: 0x%" PRIxPTR " status32: 0x%" PRIxPTR "",
|
||||
EXCEPTION_DUMP(" blink: 0x%" PRIxPTR " status32: 0x%" PRIxPTR "",
|
||||
esf->blink, esf->status32);
|
||||
#ifdef CONFIG_ARC_HAS_ZOL
|
||||
ARC_EXCEPTION_DUMP("lp_end: 0x%" PRIxPTR " lp_start: 0x%" PRIxPTR
|
||||
EXCEPTION_DUMP("lp_end: 0x%" PRIxPTR " lp_start: 0x%" PRIxPTR
|
||||
" lp_count: 0x%" PRIxPTR "", esf->lp_end, esf->lp_start, esf->lp_count);
|
||||
#endif /* CONFIG_ARC_HAS_ZOL */
|
||||
}
|
||||
|
||||
@ -20,7 +20,6 @@
|
||||
#include <zephyr/kernel_structs.h>
|
||||
#include <zephyr/arch/common/exc_handle.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
#include <err_dump_handling.h>
|
||||
|
||||
LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL);
|
||||
|
||||
@ -138,32 +137,32 @@ static void dump_protv_exception(uint32_t cause, uint32_t parameter)
|
||||
{
|
||||
switch (cause) {
|
||||
case 0x0:
|
||||
ARC_EXCEPTION_DUMP("Instruction fetch violation (%s)",
|
||||
EXCEPTION_DUMP("Instruction fetch violation (%s)",
|
||||
get_protv_access_err(parameter));
|
||||
break;
|
||||
case 0x1:
|
||||
ARC_EXCEPTION_DUMP("Memory read protection violation (%s)",
|
||||
EXCEPTION_DUMP("Memory read protection violation (%s)",
|
||||
get_protv_access_err(parameter));
|
||||
break;
|
||||
case 0x2:
|
||||
ARC_EXCEPTION_DUMP("Memory write protection violation (%s)",
|
||||
EXCEPTION_DUMP("Memory write protection violation (%s)",
|
||||
get_protv_access_err(parameter));
|
||||
break;
|
||||
case 0x3:
|
||||
ARC_EXCEPTION_DUMP("Memory read-modify-write violation (%s)",
|
||||
EXCEPTION_DUMP("Memory read-modify-write violation (%s)",
|
||||
get_protv_access_err(parameter));
|
||||
break;
|
||||
case 0x10:
|
||||
ARC_EXCEPTION_DUMP("Normal vector table in secure memory");
|
||||
EXCEPTION_DUMP("Normal vector table in secure memory");
|
||||
break;
|
||||
case 0x11:
|
||||
ARC_EXCEPTION_DUMP("NS handler code located in S memory");
|
||||
EXCEPTION_DUMP("NS handler code located in S memory");
|
||||
break;
|
||||
case 0x12:
|
||||
ARC_EXCEPTION_DUMP("NSC Table Range Violation");
|
||||
EXCEPTION_DUMP("NSC Table Range Violation");
|
||||
break;
|
||||
default:
|
||||
ARC_EXCEPTION_DUMP("unknown");
|
||||
EXCEPTION_DUMP("unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -172,46 +171,46 @@ static void dump_machine_check_exception(uint32_t cause, uint32_t parameter)
|
||||
{
|
||||
switch (cause) {
|
||||
case 0x0:
|
||||
ARC_EXCEPTION_DUMP("double fault");
|
||||
EXCEPTION_DUMP("double fault");
|
||||
break;
|
||||
case 0x1:
|
||||
ARC_EXCEPTION_DUMP("overlapping TLB entries");
|
||||
EXCEPTION_DUMP("overlapping TLB entries");
|
||||
break;
|
||||
case 0x2:
|
||||
ARC_EXCEPTION_DUMP("fatal TLB error");
|
||||
EXCEPTION_DUMP("fatal TLB error");
|
||||
break;
|
||||
case 0x3:
|
||||
ARC_EXCEPTION_DUMP("fatal cache error");
|
||||
EXCEPTION_DUMP("fatal cache error");
|
||||
break;
|
||||
case 0x4:
|
||||
ARC_EXCEPTION_DUMP("internal memory error on instruction fetch");
|
||||
EXCEPTION_DUMP("internal memory error on instruction fetch");
|
||||
break;
|
||||
case 0x5:
|
||||
ARC_EXCEPTION_DUMP("internal memory error on data fetch");
|
||||
EXCEPTION_DUMP("internal memory error on data fetch");
|
||||
break;
|
||||
case 0x6:
|
||||
ARC_EXCEPTION_DUMP("illegal overlapping MPU entries");
|
||||
EXCEPTION_DUMP("illegal overlapping MPU entries");
|
||||
if (parameter == 0x1) {
|
||||
ARC_EXCEPTION_DUMP(" - jump and branch target");
|
||||
EXCEPTION_DUMP(" - jump and branch target");
|
||||
}
|
||||
break;
|
||||
case 0x10:
|
||||
ARC_EXCEPTION_DUMP("secure vector table not located in secure memory");
|
||||
EXCEPTION_DUMP("secure vector table not located in secure memory");
|
||||
break;
|
||||
case 0x11:
|
||||
ARC_EXCEPTION_DUMP("NSC jump table not located in secure memory");
|
||||
EXCEPTION_DUMP("NSC jump table not located in secure memory");
|
||||
break;
|
||||
case 0x12:
|
||||
ARC_EXCEPTION_DUMP("secure handler code not located in secure memory");
|
||||
EXCEPTION_DUMP("secure handler code not located in secure memory");
|
||||
break;
|
||||
case 0x13:
|
||||
ARC_EXCEPTION_DUMP("NSC target address not located in secure memory");
|
||||
EXCEPTION_DUMP("NSC target address not located in secure memory");
|
||||
break;
|
||||
case 0x80:
|
||||
ARC_EXCEPTION_DUMP("uncorrectable ECC or parity error in vector memory");
|
||||
EXCEPTION_DUMP("uncorrectable ECC or parity error in vector memory");
|
||||
break;
|
||||
default:
|
||||
ARC_EXCEPTION_DUMP("unknown");
|
||||
EXCEPTION_DUMP("unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -220,54 +219,54 @@ static void dump_privilege_exception(uint32_t cause, uint32_t parameter)
|
||||
{
|
||||
switch (cause) {
|
||||
case 0x0:
|
||||
ARC_EXCEPTION_DUMP("Privilege violation");
|
||||
EXCEPTION_DUMP("Privilege violation");
|
||||
break;
|
||||
case 0x1:
|
||||
ARC_EXCEPTION_DUMP("disabled extension");
|
||||
EXCEPTION_DUMP("disabled extension");
|
||||
break;
|
||||
case 0x2:
|
||||
ARC_EXCEPTION_DUMP("action point hit");
|
||||
EXCEPTION_DUMP("action point hit");
|
||||
break;
|
||||
case 0x10:
|
||||
switch (parameter) {
|
||||
case 0x1:
|
||||
ARC_EXCEPTION_DUMP("N to S return using incorrect return mechanism");
|
||||
EXCEPTION_DUMP("N to S return using incorrect return mechanism");
|
||||
break;
|
||||
case 0x2:
|
||||
ARC_EXCEPTION_DUMP("N to S return with incorrect operating mode");
|
||||
EXCEPTION_DUMP("N to S return with incorrect operating mode");
|
||||
break;
|
||||
case 0x3:
|
||||
ARC_EXCEPTION_DUMP("IRQ/exception return fetch from wrong mode");
|
||||
EXCEPTION_DUMP("IRQ/exception return fetch from wrong mode");
|
||||
break;
|
||||
case 0x4:
|
||||
ARC_EXCEPTION_DUMP("attempt to halt secure processor in NS mode");
|
||||
EXCEPTION_DUMP("attempt to halt secure processor in NS mode");
|
||||
break;
|
||||
case 0x20:
|
||||
ARC_EXCEPTION_DUMP("attempt to access secure resource from normal mode");
|
||||
EXCEPTION_DUMP("attempt to access secure resource from normal mode");
|
||||
break;
|
||||
case 0x40:
|
||||
ARC_EXCEPTION_DUMP("SID violation on resource access (APEX/UAUX/key NVM)");
|
||||
EXCEPTION_DUMP("SID violation on resource access (APEX/UAUX/key NVM)");
|
||||
break;
|
||||
default:
|
||||
ARC_EXCEPTION_DUMP("unknown");
|
||||
EXCEPTION_DUMP("unknown");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x13:
|
||||
switch (parameter) {
|
||||
case 0x20:
|
||||
ARC_EXCEPTION_DUMP("attempt to access secure APEX feature from NS mode");
|
||||
EXCEPTION_DUMP("attempt to access secure APEX feature from NS mode");
|
||||
break;
|
||||
case 0x40:
|
||||
ARC_EXCEPTION_DUMP("SID violation on access to APEX feature");
|
||||
EXCEPTION_DUMP("SID violation on access to APEX feature");
|
||||
break;
|
||||
default:
|
||||
ARC_EXCEPTION_DUMP("unknown");
|
||||
EXCEPTION_DUMP("unknown");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ARC_EXCEPTION_DUMP("unknown");
|
||||
EXCEPTION_DUMP("unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -275,7 +274,7 @@ static void dump_privilege_exception(uint32_t cause, uint32_t parameter)
|
||||
static void dump_exception_info(uint32_t vector, uint32_t cause, uint32_t parameter)
|
||||
{
|
||||
if (vector >= 0x10 && vector <= 0xFF) {
|
||||
ARC_EXCEPTION_DUMP("interrupt %u", vector);
|
||||
EXCEPTION_DUMP("interrupt %u", vector);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -284,55 +283,55 @@ static void dump_exception_info(uint32_t vector, uint32_t cause, uint32_t parame
|
||||
*/
|
||||
switch (vector) {
|
||||
case ARC_EV_RESET:
|
||||
ARC_EXCEPTION_DUMP("Reset");
|
||||
EXCEPTION_DUMP("Reset");
|
||||
break;
|
||||
case ARC_EV_MEM_ERROR:
|
||||
ARC_EXCEPTION_DUMP("Memory Error");
|
||||
EXCEPTION_DUMP("Memory Error");
|
||||
break;
|
||||
case ARC_EV_INS_ERROR:
|
||||
ARC_EXCEPTION_DUMP("Instruction Error");
|
||||
EXCEPTION_DUMP("Instruction Error");
|
||||
break;
|
||||
case ARC_EV_MACHINE_CHECK:
|
||||
ARC_EXCEPTION_DUMP("EV_MachineCheck");
|
||||
EXCEPTION_DUMP("EV_MachineCheck");
|
||||
dump_machine_check_exception(cause, parameter);
|
||||
break;
|
||||
case ARC_EV_TLB_MISS_I:
|
||||
ARC_EXCEPTION_DUMP("EV_TLBMissI");
|
||||
EXCEPTION_DUMP("EV_TLBMissI");
|
||||
break;
|
||||
case ARC_EV_TLB_MISS_D:
|
||||
ARC_EXCEPTION_DUMP("EV_TLBMissD");
|
||||
EXCEPTION_DUMP("EV_TLBMissD");
|
||||
break;
|
||||
case ARC_EV_PROT_V:
|
||||
ARC_EXCEPTION_DUMP("EV_ProtV");
|
||||
EXCEPTION_DUMP("EV_ProtV");
|
||||
dump_protv_exception(cause, parameter);
|
||||
break;
|
||||
case ARC_EV_PRIVILEGE_V:
|
||||
ARC_EXCEPTION_DUMP("EV_PrivilegeV");
|
||||
EXCEPTION_DUMP("EV_PrivilegeV");
|
||||
dump_privilege_exception(cause, parameter);
|
||||
break;
|
||||
case ARC_EV_SWI:
|
||||
ARC_EXCEPTION_DUMP("EV_SWI");
|
||||
EXCEPTION_DUMP("EV_SWI");
|
||||
break;
|
||||
case ARC_EV_TRAP:
|
||||
ARC_EXCEPTION_DUMP("EV_Trap");
|
||||
EXCEPTION_DUMP("EV_Trap");
|
||||
break;
|
||||
case ARC_EV_EXTENSION:
|
||||
ARC_EXCEPTION_DUMP("EV_Extension");
|
||||
EXCEPTION_DUMP("EV_Extension");
|
||||
break;
|
||||
case ARC_EV_DIV_ZERO:
|
||||
ARC_EXCEPTION_DUMP("EV_DivZero");
|
||||
EXCEPTION_DUMP("EV_DivZero");
|
||||
break;
|
||||
case ARC_EV_DC_ERROR:
|
||||
ARC_EXCEPTION_DUMP("EV_DCError");
|
||||
EXCEPTION_DUMP("EV_DCError");
|
||||
break;
|
||||
case ARC_EV_MISALIGNED:
|
||||
ARC_EXCEPTION_DUMP("EV_Misaligned");
|
||||
EXCEPTION_DUMP("EV_Misaligned");
|
||||
break;
|
||||
case ARC_EV_VEC_UNIT:
|
||||
ARC_EXCEPTION_DUMP("EV_VecUnit");
|
||||
EXCEPTION_DUMP("EV_VecUnit");
|
||||
break;
|
||||
default:
|
||||
ARC_EXCEPTION_DUMP("unknown");
|
||||
EXCEPTION_DUMP("unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -386,9 +385,9 @@ void z_arc_fault(struct arch_esf *esf, uint32_t old_sp)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_EXCEPTION_DEBUG
|
||||
ARC_EXCEPTION_DUMP("***** Exception vector: 0x%x, cause code: 0x%x, parameter 0x%x",
|
||||
EXCEPTION_DUMP("***** Exception vector: 0x%x, cause code: 0x%x, parameter 0x%x",
|
||||
vector, cause, parameter);
|
||||
ARC_EXCEPTION_DUMP("Address 0x%x", exc_addr);
|
||||
EXCEPTION_DUMP("Address 0x%x", exc_addr);
|
||||
|
||||
dump_exception_info(vector, cause, parameter);
|
||||
#endif
|
||||
|
||||
@ -1,16 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Synopsys.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#ifndef ZEPHYR_ARCH_ARC_INCLUDE_ERR_DUMP_HANDLING_H_
|
||||
#define ZEPHYR_ARCH_ARC_INCLUDE_ERR_DUMP_HANDLING_H_
|
||||
|
||||
#if defined CONFIG_LOG
|
||||
#define ARC_EXCEPTION_DUMP(...) LOG_ERR(__VA_ARGS__)
|
||||
#else
|
||||
#define ARC_EXCEPTION_DUMP(format, ...) printk(format "\n", ##__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#endif /* ZEPHYR_ARCH_ARC_INCLUDE_ERR_DUMP_HANDLING_H_ */
|
||||
Loading…
Reference in New Issue
Block a user