1 // SPDX-License-Identifier: GPL-2.0 2 /***************************************************************************/ 3 4 /* 5 * vectors.c -- high level trap setup for ColdFire 6 * 7 * Copyright (C) 1999-2007, Greg Ungerer <gerg@snapgear.com> 8 */ 9 10 /***************************************************************************/ 11 12 #include <linux/kernel.h> 13 #include <linux/init.h> 14 #include <linux/irq.h> 15 #include <asm/traps.h> 16 #include <asm/machdep.h> 17 #include <asm/coldfire.h> 18 #include <asm/mcfsim.h> 19 #include <asm/mcfwdebug.h> 20 21 #include "vectors.h" 22 23 /***************************************************************************/ 24 25 #ifdef TRAP_DBG_INTERRUPT 26 27 asmlinkage void dbginterrupt_c(struct frame *fp) 28 { 29 extern void dump(struct pt_regs *fp); 30 printk(KERN_DEBUG "%s(%d): BUS ERROR TRAP\n", __FILE__, __LINE__); 31 dump((struct pt_regs *) fp); 32 asm("halt"); 33 } 34 35 #endif 36 37 /***************************************************************************/ 38 39 /* Assembler routines */ 40 asmlinkage void buserr(void); 41 asmlinkage void trap(void); 42 asmlinkage void system_call(void); 43 asmlinkage void inthandler(void); 44 45 void __init trap_init(void) 46 { 47 int i; 48 49 /* 50 * There is a common trap handler and common interrupt 51 * handler that handle almost every vector. We treat 52 * the system call and bus error special, they get their 53 * own first level handlers. 54 */ 55 for (i = 3; (i <= 23); i++) 56 _ramvec[i] = trap; 57 for (i = 33; (i <= 63); i++) 58 _ramvec[i] = trap; 59 for (i = 24; (i <= 31); i++) 60 _ramvec[i] = inthandler; 61 for (i = 64; (i < 255); i++) 62 _ramvec[i] = inthandler; 63 _ramvec[255] = 0; 64 65 _ramvec[2] = buserr; 66 _ramvec[32] = system_call; 67 68 #ifdef TRAP_DBG_INTERRUPT 69 _ramvec[12] = dbginterrupt; 70 #endif 71 } 72 73 /***************************************************************************/ 74