aboutsummaryrefslogtreecommitdiffstats
path: root/roms/u-boot/arch/microblaze/cpu/exception.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/u-boot/arch/microblaze/cpu/exception.c')
-rw-r--r--roms/u-boot/arch/microblaze/cpu/exception.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/roms/u-boot/arch/microblaze/cpu/exception.c b/roms/u-boot/arch/microblaze/cpu/exception.c
new file mode 100644
index 000000000..b8dedc4e1
--- /dev/null
+++ b/roms/u-boot/arch/microblaze/cpu/exception.c
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2007 Michal Simek
+ *
+ * Michal SIMEK <monstr@monstr.eu>
+ */
+
+#include <common.h>
+#include <hang.h>
+#include <asm/asm.h>
+
+void _hw_exception_handler (void)
+{
+ int address = 0;
+ int state = 0;
+
+ /* loading address of exception EAR */
+ MFS(address, rear);
+ /* loading excetpion state register ESR */
+ MFS(state, resr);
+ printf("Hardware exception at 0x%x address\n", address);
+ R17(address);
+ printf("Return address from exception 0x%x\n", address);
+ switch (state & 0x1f) { /* mask on exception cause */
+ case 0x1:
+ puts("Unaligned data access exception\n");
+ break;
+ case 0x2:
+ puts("Illegal op-code exception\n");
+ break;
+ case 0x3:
+ puts("Instruction bus error exception\n");
+ break;
+ case 0x4:
+ puts("Data bus error exception\n");
+ break;
+ case 0x5:
+ puts("Divide by zero exception\n");
+ break;
+#ifdef MICROBLAZE_V5
+ case 0x7:
+ puts("Priviledged or stack protection violation exception\n");
+ break;
+ case 0x1000:
+ puts("Exception in delay slot\n");
+ break;
+#endif
+ default:
+ puts("Undefined cause\n");
+ break;
+ }
+ printf("Unaligned %sword access\n", ((state & 0x800) ? "" : "half"));
+ printf("Unaligned %s access\n", ((state & 0x400) ? "store" : "load"));
+ printf("Register R%x\n", (state & 0x3E) >> 5);
+ hang();
+}
+
+#ifdef CONFIG_SYS_USR_EXCEP
+void _exception_handler (void)
+{
+ puts("User vector_exception\n");
+ hang();
+}
+#endif