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 <linux/cpu.h> |
16 | #include <asm/traps.h> |
17 | #include <asm/machdep.h> |
18 | #include <asm/coldfire.h> |
19 | #include <asm/mcfsim.h> |
20 | #include <asm/mcfwdebug.h> |
21 | |
22 | /***************************************************************************/ |
23 | |
24 | #ifdef TRAP_DBG_INTERRUPT |
25 | |
26 | asmlinkage void dbginterrupt_c(struct frame *fp) |
27 | { |
28 | extern void dump(struct pt_regs *fp); |
29 | printk(KERN_DEBUG "%s(%d): BUS ERROR TRAP\n" , __FILE__, __LINE__); |
30 | dump((struct pt_regs *) fp); |
31 | asm("halt" ); |
32 | } |
33 | |
34 | #endif |
35 | |
36 | /***************************************************************************/ |
37 | |
38 | /* Assembler routines */ |
39 | asmlinkage void buserr(void); |
40 | asmlinkage void trap(void); |
41 | asmlinkage void system_call(void); |
42 | asmlinkage void inthandler(void); |
43 | |
44 | void __init trap_init(void) |
45 | { |
46 | int i; |
47 | |
48 | /* |
49 | * There is a common trap handler and common interrupt |
50 | * handler that handle almost every vector. We treat |
51 | * the system call and bus error special, they get their |
52 | * own first level handlers. |
53 | */ |
54 | for (i = 3; (i <= 23); i++) |
55 | _ramvec[i] = trap; |
56 | for (i = 33; (i <= 63); i++) |
57 | _ramvec[i] = trap; |
58 | for (i = 24; (i <= 31); i++) |
59 | _ramvec[i] = inthandler; |
60 | for (i = 64; (i < 255); i++) |
61 | _ramvec[i] = inthandler; |
62 | _ramvec[255] = 0; |
63 | |
64 | _ramvec[2] = buserr; |
65 | _ramvec[32] = system_call; |
66 | |
67 | #ifdef TRAP_DBG_INTERRUPT |
68 | _ramvec[12] = dbginterrupt; |
69 | #endif |
70 | } |
71 | |
72 | /***************************************************************************/ |
73 | |