1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2008 - 2013 Tensilica Inc. 3*4882a593Smuzhiyun * (C) Copyright 2014 - 2016 Cadence Design Systems Inc. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun /* 9*4882a593Smuzhiyun * Exception handling. 10*4882a593Smuzhiyun * We currently don't handle any exception and force a reset. 11*4882a593Smuzhiyun * (Note that alloca is a special case and handled in start.S) 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #include <common.h> 15*4882a593Smuzhiyun #include <command.h> 16*4882a593Smuzhiyun #include <asm/string.h> 17*4882a593Smuzhiyun #include <asm/regs.h> 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun typedef void (*handler_t)(struct pt_regs *); 20*4882a593Smuzhiyun unhandled_exception(struct pt_regs * regs)21*4882a593Smuzhiyunvoid unhandled_exception(struct pt_regs *regs) 22*4882a593Smuzhiyun { 23*4882a593Smuzhiyun printf("Unhandled Exception: EXCCAUSE = %ld, EXCVADDR = %lx, pc = %lx\n", 24*4882a593Smuzhiyun regs->exccause, regs->excvaddr, regs->pc); 25*4882a593Smuzhiyun panic("*** PANIC\n"); 26*4882a593Smuzhiyun } 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun handler_t exc_table[EXCCAUSE_LAST] = { 29*4882a593Smuzhiyun [0 ... EXCCAUSE_LAST-1] = unhandled_exception, 30*4882a593Smuzhiyun }; 31*4882a593Smuzhiyun interrupt_init(void)32*4882a593Smuzhiyunint interrupt_init(void) 33*4882a593Smuzhiyun { 34*4882a593Smuzhiyun return 0; 35*4882a593Smuzhiyun } 36*4882a593Smuzhiyun enable_interrupts(void)37*4882a593Smuzhiyunvoid enable_interrupts(void) 38*4882a593Smuzhiyun { 39*4882a593Smuzhiyun } 40*4882a593Smuzhiyun disable_interrupts(void)41*4882a593Smuzhiyunint disable_interrupts(void) 42*4882a593Smuzhiyun { 43*4882a593Smuzhiyun return 0; 44*4882a593Smuzhiyun } 45