arch: riscv: improve exception messages
Add exception descriptions of mcause id 6~15. Also print mtval CSR for
memory access fault & illegal instruction exceptions.
Signed-off-by: Jim Shu <cwshu@andestech.com>
diff --git a/arch/riscv/core/fatal.c b/arch/riscv/core/fatal.c
index c853ef5..e65d5d2 100644
--- a/arch/riscv/core/fatal.c
+++ b/arch/riscv/core/fatal.c
@@ -65,6 +65,22 @@
return "Load address misaligned";
case 5:
return "Load access fault";
+ case 6:
+ return "Store/AMO address misaligned";
+ case 7:
+ return "Store/AMO access fault";
+ case 8:
+ return "Environment call from U-mode";
+ case 9:
+ return "Environment call from S-mode";
+ case 11:
+ return "Environment call from M-mode";
+ case 12:
+ return "Instruction page fault";
+ case 13:
+ return "Load page fault";
+ case 15:
+ return "Store/AMO page fault";
default:
return "unknown";
}
@@ -87,13 +103,15 @@
}
}
#endif /* CONFIG_USERSPACE */
- ulong_t mcause;
+ ulong_t mcause, mtval;
__asm__ volatile("csrr %0, mcause" : "=r" (mcause));
+ __asm__ volatile("csrr %0, mtval" : "=r" (mtval));
mcause &= SOC_MCAUSE_EXP_MASK;
LOG_ERR("");
LOG_ERR(" mcause: %ld, %s", mcause, cause_str(mcause));
+ LOG_ERR(" mtval: %lx", mtval);
z_riscv_fatal_error(K_ERR_CPU_EXCEPTION, esf);
}