From 89261db819285458443446bfa896f60c93ebbe65 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Mon, 7 Jul 2025 15:11:14 -0400 Subject: [PATCH] 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 --- arch/arc/core/fatal.c | 13 ++-- arch/arc/core/fault.c | 111 +++++++++++++-------------- arch/arc/include/err_dump_handling.h | 16 ---- 3 files changed, 61 insertions(+), 79 deletions(-) delete mode 100644 arch/arc/include/err_dump_handling.h diff --git a/arch/arc/core/fatal.c b/arch/arc/core/fatal.c index 3862c8f2ace..72a93ed15db 100644 --- a/arch/arc/core/fatal.c +++ b/arch/arc/core/fatal.c @@ -18,25 +18,24 @@ #include #include #include -#include 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 */ } diff --git a/arch/arc/core/fault.c b/arch/arc/core/fault.c index adbd6da12bb..c36f000c8cb 100644 --- a/arch/arc/core/fault.c +++ b/arch/arc/core/fault.c @@ -20,7 +20,6 @@ #include #include #include -#include 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 diff --git a/arch/arc/include/err_dump_handling.h b/arch/arc/include/err_dump_handling.h deleted file mode 100644 index 2bda8b86687..00000000000 --- a/arch/arc/include/err_dump_handling.h +++ /dev/null @@ -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_ */