1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 26260fb04SPeter Tyser /* 36260fb04SPeter Tyser * (C) Copyright 2007 Michal Simek 46260fb04SPeter Tyser * 56260fb04SPeter Tyser * Michal SIMEK <monstr@monstr.eu> 66260fb04SPeter Tyser */ 76260fb04SPeter Tyser 86260fb04SPeter Tyser #include <common.h> 96260fb04SPeter Tyser #include <asm/asm.h> 106260fb04SPeter Tyser _hw_exception_handler(void)116260fb04SPeter Tyservoid _hw_exception_handler (void) 126260fb04SPeter Tyser { 136260fb04SPeter Tyser int address = 0; 146260fb04SPeter Tyser int state = 0; 155e2fc801SMichal Simek 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); 211c424d26SMichal Simek R17(address); 221c424d26SMichal Simek printf("Return address from exception 0x%x\n", address); 236260fb04SPeter Tyser switch (state & 0x1f) { /* mask on exception cause */ 246260fb04SPeter Tyser case 0x1: 256260fb04SPeter Tyser puts("Unaligned data access exception\n"); 266260fb04SPeter Tyser break; 276260fb04SPeter Tyser case 0x2: 286260fb04SPeter Tyser puts("Illegal op-code exception\n"); 296260fb04SPeter Tyser break; 306260fb04SPeter Tyser case 0x3: 316260fb04SPeter Tyser puts("Instruction bus error exception\n"); 326260fb04SPeter Tyser break; 336260fb04SPeter Tyser case 0x4: 346260fb04SPeter Tyser puts("Data bus error exception\n"); 356260fb04SPeter Tyser break; 366260fb04SPeter Tyser case 0x5: 376260fb04SPeter Tyser puts("Divide by zero exception\n"); 386260fb04SPeter Tyser break; 396260fb04SPeter Tyser #ifdef MICROBLAZE_V5 40ef2c1d85SMichal Simek case 0x7: 41ef2c1d85SMichal Simek puts("Priviledged or stack protection violation exception\n"); 42ef2c1d85SMichal Simek break; 436260fb04SPeter Tyser case 0x1000: 446260fb04SPeter Tyser puts("Exception in delay slot\n"); 456260fb04SPeter Tyser break; 466260fb04SPeter Tyser #endif 476260fb04SPeter Tyser default: 486260fb04SPeter Tyser puts("Undefined cause\n"); 496260fb04SPeter Tyser break; 506260fb04SPeter Tyser } 516260fb04SPeter Tyser printf("Unaligned %sword access\n", ((state & 0x800) ? "" : "half")); 526260fb04SPeter Tyser printf("Unaligned %s access\n", ((state & 0x400) ? "store" : "load")); 536260fb04SPeter Tyser printf("Register R%x\n", (state & 0x3E) >> 5); 546260fb04SPeter Tyser hang(); 556260fb04SPeter Tyser } 566260fb04SPeter Tyser 576260fb04SPeter Tyser #ifdef CONFIG_SYS_USR_EXCEP _exception_handler(void)586260fb04SPeter Tyservoid _exception_handler (void) 596260fb04SPeter Tyser { 606260fb04SPeter Tyser puts("User vector_exception\n"); 616260fb04SPeter Tyser hang(); 626260fb04SPeter Tyser } 636260fb04SPeter Tyser #endif 64