xref: /openbmc/linux/arch/sh/kernel/cpu/sh3/ex.S (revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2)
1*1da177e4SLinus Torvalds/*
2*1da177e4SLinus Torvalds *  arch/sh/kernel/cpu/sh3/ex.S
3*1da177e4SLinus Torvalds *
4*1da177e4SLinus Torvalds *  The SH-3 exception vector table.
5*1da177e4SLinus Torvalds
6*1da177e4SLinus Torvalds *  Copyright (C) 1999, 2000, 2002  Niibe Yutaka
7*1da177e4SLinus Torvalds *  Copyright (C) 2003  Paul Mundt
8*1da177e4SLinus Torvalds *
9*1da177e4SLinus Torvalds * This file is subject to the terms and conditions of the GNU General Public
10*1da177e4SLinus Torvalds * License.  See the file "COPYING" in the main directory of this archive
11*1da177e4SLinus Torvalds * for more details.
12*1da177e4SLinus Torvalds *
13*1da177e4SLinus Torvalds */
14*1da177e4SLinus Torvalds#include <linux/linkage.h>
15*1da177e4SLinus Torvalds#include <linux/config.h>
16*1da177e4SLinus Torvalds
17*1da177e4SLinus Torvalds	.align 2
18*1da177e4SLinus Torvalds	.data
19*1da177e4SLinus Torvalds
20*1da177e4SLinus TorvaldsENTRY(exception_handling_table)
21*1da177e4SLinus Torvalds	.long	exception_error		/* 000 */
22*1da177e4SLinus Torvalds	.long	exception_error
23*1da177e4SLinus Torvalds#if defined(CONFIG_MMU)
24*1da177e4SLinus Torvalds	.long	tlb_miss_load		/* 040 */
25*1da177e4SLinus Torvalds	.long	tlb_miss_store
26*1da177e4SLinus Torvalds	.long	initial_page_write
27*1da177e4SLinus Torvalds	.long	tlb_protection_violation_load
28*1da177e4SLinus Torvalds	.long	tlb_protection_violation_store
29*1da177e4SLinus Torvalds	.long	address_error_load
30*1da177e4SLinus Torvalds	.long	address_error_store	/* 100 */
31*1da177e4SLinus Torvalds#else
32*1da177e4SLinus Torvalds	.long	exception_error	! tlb miss load		/* 040 */
33*1da177e4SLinus Torvalds	.long	exception_error	! tlb miss store
34*1da177e4SLinus Torvalds	.long	exception_error	! initial page write
35*1da177e4SLinus Torvalds	.long	exception_error	! tlb prot violation load
36*1da177e4SLinus Torvalds	.long	exception_error	! tlb prot violation store
37*1da177e4SLinus Torvalds	.long	exception_error	! address error load
38*1da177e4SLinus Torvalds	.long	exception_error	! address error store	/* 100 */
39*1da177e4SLinus Torvalds#endif
40*1da177e4SLinus Torvalds	.long	exception_error	! fpu_exception	/* 120 */
41*1da177e4SLinus Torvalds	.long	exception_error			/* 140 */
42*1da177e4SLinus Torvalds	.long	system_call	! Unconditional Trap	 /* 160 */
43*1da177e4SLinus Torvalds	.long	exception_error	! reserved_instruction (filled by trap_init) /* 180 */
44*1da177e4SLinus Torvalds	.long	exception_error	! illegal_slot_instruction (filled by trap_init) /*1A0*/
45*1da177e4SLinus TorvaldsENTRY(nmi_slot)
46*1da177e4SLinus Torvalds#if defined (CONFIG_KGDB_NMI)
47*1da177e4SLinus Torvalds	.long	debug_enter	/* 1C0 */	! Allow trap to debugger
48*1da177e4SLinus Torvalds#else
49*1da177e4SLinus Torvalds	.long	exception_none	/* 1C0 */	! Not implemented yet
50*1da177e4SLinus Torvalds#endif
51*1da177e4SLinus TorvaldsENTRY(user_break_point_trap)
52*1da177e4SLinus Torvalds	.long	break_point_trap	/* 1E0 */
53*1da177e4SLinus TorvaldsENTRY(interrupt_table)
54*1da177e4SLinus Torvalds	! external hardware
55*1da177e4SLinus Torvalds	.long	do_IRQ	! 0000		/* 200 */
56*1da177e4SLinus Torvalds	.long	do_IRQ	! 0001
57*1da177e4SLinus Torvalds	.long	do_IRQ	! 0010
58*1da177e4SLinus Torvalds	.long	do_IRQ	! 0011
59*1da177e4SLinus Torvalds	.long	do_IRQ	! 0100
60*1da177e4SLinus Torvalds	.long	do_IRQ	! 0101
61*1da177e4SLinus Torvalds	.long	do_IRQ	! 0110
62*1da177e4SLinus Torvalds	.long	do_IRQ	! 0111
63*1da177e4SLinus Torvalds	.long	do_IRQ	! 1000		/* 300 */
64*1da177e4SLinus Torvalds	.long	do_IRQ	! 1001
65*1da177e4SLinus Torvalds	.long	do_IRQ	! 1010
66*1da177e4SLinus Torvalds	.long	do_IRQ	! 1011
67*1da177e4SLinus Torvalds	.long	do_IRQ	! 1100
68*1da177e4SLinus Torvalds	.long	do_IRQ	! 1101
69*1da177e4SLinus Torvalds	.long	do_IRQ	! 1110
70*1da177e4SLinus Torvalds	.long	exception_error
71*1da177e4SLinus Torvalds	! Internal hardware
72*1da177e4SLinus Torvalds	.long	do_IRQ	! TMU0 tuni0	/* 400 */
73*1da177e4SLinus Torvalds	.long	do_IRQ	! TMU1 tuni1
74*1da177e4SLinus Torvalds	.long	do_IRQ	! TMU2 tuni2
75*1da177e4SLinus Torvalds	.long	do_IRQ	!      ticpi2
76*1da177e4SLinus Torvalds	.long	do_IRQ	! RTC  ati
77*1da177e4SLinus Torvalds	.long	do_IRQ	!      pri
78*1da177e4SLinus Torvalds	.long	do_IRQ	!      cui
79*1da177e4SLinus Torvalds	.long	do_IRQ	! SCI  eri
80*1da177e4SLinus Torvalds	.long	do_IRQ	!      rxi	/* 500 */
81*1da177e4SLinus Torvalds	.long	do_IRQ	!      txi
82*1da177e4SLinus Torvalds	.long	do_IRQ	!      tei
83*1da177e4SLinus Torvalds	.long	do_IRQ	! WDT  iti	/* 560 */
84*1da177e4SLinus Torvalds	.long	do_IRQ	! REF  rcmi
85*1da177e4SLinus Torvalds	.long	do_IRQ	!      rovi
86*1da177e4SLinus Torvalds	.long	do_IRQ
87*1da177e4SLinus Torvalds	.long	do_IRQ			/* 5E0 */
88*1da177e4SLinus Torvalds#if  defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \
89*1da177e4SLinus Torvalds     defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7705)
90*1da177e4SLinus Torvalds	.long	do_IRQ	! 32 IRQ  irq0	/* 600 */
91*1da177e4SLinus Torvalds	.long	do_IRQ	! 33      irq1
92*1da177e4SLinus Torvalds	.long	do_IRQ	! 34      irq2
93*1da177e4SLinus Torvalds	.long	do_IRQ	! 35      irq3
94*1da177e4SLinus Torvalds	.long	do_IRQ	! 36      irq4
95*1da177e4SLinus Torvalds	.long	do_IRQ	! 37      irq5
96*1da177e4SLinus Torvalds	.long	do_IRQ	! 38
97*1da177e4SLinus Torvalds	.long	do_IRQ	! 39
98*1da177e4SLinus Torvalds	.long	do_IRQ	! 40 PINT pint0-7	/* 700 */
99*1da177e4SLinus Torvalds	.long	do_IRQ	! 41      pint8-15
100*1da177e4SLinus Torvalds	.long	do_IRQ	! 42
101*1da177e4SLinus Torvalds	.long	do_IRQ	! 43
102*1da177e4SLinus Torvalds	.long	do_IRQ	! 44
103*1da177e4SLinus Torvalds	.long	do_IRQ	! 45
104*1da177e4SLinus Torvalds	.long	do_IRQ	! 46
105*1da177e4SLinus Torvalds	.long	do_IRQ	! 47
106*1da177e4SLinus Torvalds	.long	do_IRQ	! 48 DMAC dei0	/* 800 */
107*1da177e4SLinus Torvalds	.long	do_IRQ	! 49      dei1
108*1da177e4SLinus Torvalds	.long	do_IRQ	! 50      dei2
109*1da177e4SLinus Torvalds	.long	do_IRQ	! 51      dei3
110*1da177e4SLinus Torvalds	.long	do_IRQ	! 52 IrDA eri1
111*1da177e4SLinus Torvalds	.long	do_IRQ	! 53      rxi1
112*1da177e4SLinus Torvalds	.long	do_IRQ	! 54      bri1
113*1da177e4SLinus Torvalds	.long	do_IRQ	! 55      txi1
114*1da177e4SLinus Torvalds	.long	do_IRQ	! 56 SCIF eri2
115*1da177e4SLinus Torvalds	.long	do_IRQ	! 57      rxi2
116*1da177e4SLinus Torvalds	.long	do_IRQ	! 58      bri2
117*1da177e4SLinus Torvalds	.long	do_IRQ	! 59      txi2
118*1da177e4SLinus Torvalds	.long	do_IRQ	! 60 ADC  adi	/* 980 */
119*1da177e4SLinus Torvalds#if defined(CONFIG_CPU_SUBTYPE_SH7705)
120*1da177e4SLinus Torvalds	.long	exception_none	! 61	/* 9A0 */
121*1da177e4SLinus Torvalds	.long	exception_none	! 62
122*1da177e4SLinus Torvalds	.long	exception_none	! 63
123*1da177e4SLinus Torvalds	.long	exception_none	! 64	/* A00 */
124*1da177e4SLinus Torvalds	.long	do_IRQ	! 65 USB  usi0
125*1da177e4SLinus Torvalds	.long	do_IRQ	! 66      usi1
126*1da177e4SLinus Torvalds	.long	exception_none	! 67
127*1da177e4SLinus Torvalds	.long	exception_none	! 68
128*1da177e4SLinus Torvalds	.long	exception_none	! 69
129*1da177e4SLinus Torvalds	.long	exception_none	! 70
130*1da177e4SLinus Torvalds	.long	exception_none	! 71
131*1da177e4SLinus Torvalds	.long	exception_none	! 72	/* B00 */
132*1da177e4SLinus Torvalds	.long	exception_none	! 73
133*1da177e4SLinus Torvalds	.long	exception_none	! 74
134*1da177e4SLinus Torvalds	.long	exception_none	! 75
135*1da177e4SLinus Torvalds	.long	exception_none	! 76
136*1da177e4SLinus Torvalds	.long	exception_none	! 77
137*1da177e4SLinus Torvalds	.long	exception_none	! 78
138*1da177e4SLinus Torvalds	.long	exception_none	! 79
139*1da177e4SLinus Torvalds	.long	do_IRQ	! 80 TPU0 tpi0	/* C00 */
140*1da177e4SLinus Torvalds	.long	do_IRQ	! 81 TPU1 tpi1
141*1da177e4SLinus Torvalds	.long	exception_none	! 82
142*1da177e4SLinus Torvalds	.long	exception_none	! 83
143*1da177e4SLinus Torvalds	.long	do_IRQ	! 84 TPU2 tpi2
144*1da177e4SLinus Torvalds	.long	do_IRQ	! 85 TPU3 tpi3	/* CA0 */
145*1da177e4SLinus Torvalds#endif
146*1da177e4SLinus Torvalds#if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7300)
147*1da177e4SLinus Torvalds	.long   do_IRQ	! 61 LCDC lcdi	/* 9A0 */
148*1da177e4SLinus Torvalds	.long   do_IRQ	! 62 PCC  pcc0i
149*1da177e4SLinus Torvalds	.long   do_IRQ	! 63      pcc1i	/* 9E0 */
150*1da177e4SLinus Torvalds#endif
151*1da177e4SLinus Torvalds#if defined(CONFIG_CPU_SUBTYPE_SH7300)
152*1da177e4SLinus Torvalds	.long   do_IRQ	! 64
153*1da177e4SLinus Torvalds	.long   do_IRQ	! 65
154*1da177e4SLinus Torvalds	.long   do_IRQ	! 66
155*1da177e4SLinus Torvalds	.long   do_IRQ	! 67
156*1da177e4SLinus Torvalds	.long   do_IRQ	! 68
157*1da177e4SLinus Torvalds	.long   do_IRQ	! 69
158*1da177e4SLinus Torvalds	.long   do_IRQ	! 70
159*1da177e4SLinus Torvalds	.long   do_IRQ	! 71
160*1da177e4SLinus Torvalds	.long   do_IRQ	! 72
161*1da177e4SLinus Torvalds	.long   do_IRQ	! 73
162*1da177e4SLinus Torvalds	.long   do_IRQ	! 74
163*1da177e4SLinus Torvalds	.long   do_IRQ	! 75
164*1da177e4SLinus Torvalds	.long   do_IRQ	! 76
165*1da177e4SLinus Torvalds	.long   do_IRQ	! 77
166*1da177e4SLinus Torvalds	.long   do_IRQ	! 78
167*1da177e4SLinus Torvalds	.long   do_IRQ	! 79
168*1da177e4SLinus Torvalds	.long   do_IRQ	! 80 SCIF0(SH7300)
169*1da177e4SLinus Torvalds	.long   do_IRQ	! 81
170*1da177e4SLinus Torvalds	.long   do_IRQ	! 82
171*1da177e4SLinus Torvalds	.long   do_IRQ	! 83
172*1da177e4SLinus Torvalds	.long   do_IRQ	! 84
173*1da177e4SLinus Torvalds	.long   do_IRQ	! 85
174*1da177e4SLinus Torvalds	.long   do_IRQ	! 86
175*1da177e4SLinus Torvalds	.long   do_IRQ	! 87
176*1da177e4SLinus Torvalds	.long   do_IRQ	! 88
177*1da177e4SLinus Torvalds	.long   do_IRQ	! 89
178*1da177e4SLinus Torvalds	.long   do_IRQ	! 90
179*1da177e4SLinus Torvalds	.long   do_IRQ	! 91
180*1da177e4SLinus Torvalds	.long   do_IRQ	! 92
181*1da177e4SLinus Torvalds	.long   do_IRQ	! 93
182*1da177e4SLinus Torvalds	.long   do_IRQ	! 94
183*1da177e4SLinus Torvalds	.long   do_IRQ	! 95
184*1da177e4SLinus Torvalds	.long   do_IRQ	! 96
185*1da177e4SLinus Torvalds	.long   do_IRQ	! 97
186*1da177e4SLinus Torvalds	.long   do_IRQ	! 98
187*1da177e4SLinus Torvalds	.long   do_IRQ	! 99
188*1da177e4SLinus Torvalds	.long   do_IRQ	! 100
189*1da177e4SLinus Torvalds	.long   do_IRQ	! 101
190*1da177e4SLinus Torvalds	.long   do_IRQ	! 102
191*1da177e4SLinus Torvalds	.long   do_IRQ	! 103
192*1da177e4SLinus Torvalds	.long   do_IRQ	! 104
193*1da177e4SLinus Torvalds	.long   do_IRQ	! 105
194*1da177e4SLinus Torvalds	.long   do_IRQ	! 106
195*1da177e4SLinus Torvalds	.long   do_IRQ	! 107
196*1da177e4SLinus Torvalds	.long   do_IRQ	! 108
197*1da177e4SLinus Torvalds#endif
198*1da177e4SLinus Torvalds#endif
199*1da177e4SLinus Torvalds
200