16260fb04SPeter Tyser /* 26260fb04SPeter Tyser * (C) Copyright 2007 Michal Simek 36260fb04SPeter Tyser * 46260fb04SPeter Tyser * Michal SIMEK <monstr@monstr.eu> 56260fb04SPeter Tyser * 6*1a459660SWolfgang 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 386260fb04SPeter Tyser case 0x1000: 396260fb04SPeter Tyser puts ("Exception in delay slot\n"); 406260fb04SPeter Tyser break; 416260fb04SPeter Tyser #endif 426260fb04SPeter Tyser default: 436260fb04SPeter Tyser puts ("Undefined cause\n"); 446260fb04SPeter Tyser break; 456260fb04SPeter Tyser } 466260fb04SPeter Tyser printf ("Unaligned %sword access\n", ((state & 0x800) ? "" : "half")); 476260fb04SPeter Tyser printf ("Unaligned %s access\n", ((state & 0x400) ? "store" : "load")); 486260fb04SPeter Tyser printf ("Register R%x\n", (state & 0x3E) >> 5); 496260fb04SPeter Tyser hang (); 506260fb04SPeter Tyser } 516260fb04SPeter Tyser 526260fb04SPeter Tyser #ifdef CONFIG_SYS_USR_EXCEP 536260fb04SPeter Tyser void _exception_handler (void) 546260fb04SPeter Tyser { 556260fb04SPeter Tyser puts ("User vector_exception\n"); 566260fb04SPeter Tyser hang (); 576260fb04SPeter Tyser } 586260fb04SPeter Tyser #endif 59