xref: /openbmc/u-boot/arch/microblaze/cpu/exception.c (revision ef2c1d85)
16260fb04SPeter Tyser /*
26260fb04SPeter Tyser  * (C) Copyright 2007 Michal Simek
36260fb04SPeter Tyser  *
46260fb04SPeter Tyser  * Michal  SIMEK <monstr@monstr.eu>
56260fb04SPeter Tyser  *
61a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
76260fb04SPeter Tyser  */
86260fb04SPeter Tyser 
96260fb04SPeter Tyser #include <common.h>
106260fb04SPeter Tyser #include <asm/asm.h>
116260fb04SPeter Tyser 
126260fb04SPeter Tyser void _hw_exception_handler (void)
136260fb04SPeter Tyser {
146260fb04SPeter Tyser 	int address = 0;
156260fb04SPeter Tyser 	int state = 0;
166260fb04SPeter Tyser 	/* loading address of exception EAR */
176260fb04SPeter Tyser 	MFS (address, rear);
186260fb04SPeter Tyser 	/* loading excetpion state register ESR */
196260fb04SPeter Tyser 	MFS (state, resr);
206260fb04SPeter Tyser 	printf ("Hardware exception at 0x%x address\n", address);
216260fb04SPeter Tyser 	switch (state & 0x1f) {	/* mask on exception cause */
226260fb04SPeter Tyser 	case 0x1:
236260fb04SPeter Tyser 		puts ("Unaligned data access exception\n");
246260fb04SPeter Tyser 		break;
256260fb04SPeter Tyser 	case 0x2:
266260fb04SPeter Tyser 		puts ("Illegal op-code exception\n");
276260fb04SPeter Tyser 		break;
286260fb04SPeter Tyser 	case 0x3:
296260fb04SPeter Tyser 		puts ("Instruction bus error exception\n");
306260fb04SPeter Tyser 		break;
316260fb04SPeter Tyser 	case 0x4:
326260fb04SPeter Tyser 		puts ("Data bus error exception\n");
336260fb04SPeter Tyser 		break;
346260fb04SPeter Tyser 	case 0x5:
356260fb04SPeter Tyser 		puts ("Divide by zero exception\n");
366260fb04SPeter Tyser 		break;
376260fb04SPeter Tyser #ifdef MICROBLAZE_V5
38*ef2c1d85SMichal Simek 	case 0x7:
39*ef2c1d85SMichal Simek 		puts("Priviledged or stack protection violation exception\n");
40*ef2c1d85SMichal Simek 		break;
416260fb04SPeter Tyser 	case 0x1000:
426260fb04SPeter Tyser 		puts ("Exception in delay slot\n");
436260fb04SPeter Tyser 		break;
446260fb04SPeter Tyser #endif
456260fb04SPeter Tyser 	default:
466260fb04SPeter Tyser 		puts ("Undefined cause\n");
476260fb04SPeter Tyser 		break;
486260fb04SPeter Tyser 	}
496260fb04SPeter Tyser 	printf ("Unaligned %sword access\n", ((state & 0x800) ? "" : "half"));
506260fb04SPeter Tyser 	printf ("Unaligned %s access\n", ((state & 0x400) ? "store" : "load"));
516260fb04SPeter Tyser 	printf ("Register R%x\n", (state & 0x3E) >> 5);
526260fb04SPeter Tyser 	hang ();
536260fb04SPeter Tyser }
546260fb04SPeter Tyser 
556260fb04SPeter Tyser #ifdef CONFIG_SYS_USR_EXCEP
566260fb04SPeter Tyser void _exception_handler (void)
576260fb04SPeter Tyser {
586260fb04SPeter Tyser 	puts ("User vector_exception\n");
596260fb04SPeter Tyser 	hang ();
606260fb04SPeter Tyser }
616260fb04SPeter Tyser #endif
62