summaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/ttable.S
blob: 8365bc1f81f3105f969ad938c3b3de3cebf221e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
/* $Id: ttable.S,v 1.38 2002/02/09 19:49:30 davem Exp $
 * ttable.S: Sparc V9 Trap Table(s) with SpitFire/Cheetah extensions.
 *
 * Copyright (C) 1996, 2001 David S. Miller (davem@caip.rutgers.edu)
 */

#include <linux/config.h>

	.globl	sparc64_ttable_tl0, sparc64_ttable_tl1
	.globl	tl0_icpe, tl1_icpe
	.globl	tl0_dcpe, tl1_dcpe
	.globl	tl0_fecc, tl1_fecc
	.globl	tl0_cee, tl1_cee
	.globl	tl0_iae, tl1_iae
	.globl	tl0_dae, tl1_dae

sparc64_ttable_tl0:
tl0_resv000:	BOOT_KERNEL BTRAP(0x1) BTRAP(0x2) BTRAP(0x3)
tl0_resv004:	BTRAP(0x4)  BTRAP(0x5) BTRAP(0x6) BTRAP(0x7)
tl0_iax:	membar #Sync
		TRAP_NOSAVE_7INSNS(__spitfire_insn_access_exception)
tl0_resv009:	BTRAP(0x9)
tl0_iae:	membar #Sync
		TRAP_NOSAVE_7INSNS(__spitfire_access_error)
tl0_resv00b:	BTRAP(0xb) BTRAP(0xc) BTRAP(0xd) BTRAP(0xe) BTRAP(0xf)
tl0_ill:	membar #Sync
		TRAP_7INSNS(do_illegal_instruction)
tl0_privop:	TRAP(do_privop)
tl0_resv012:	BTRAP(0x12) BTRAP(0x13) BTRAP(0x14) BTRAP(0x15) BTRAP(0x16) BTRAP(0x17)
tl0_resv018:	BTRAP(0x18) BTRAP(0x19) BTRAP(0x1a) BTRAP(0x1b) BTRAP(0x1c) BTRAP(0x1d)
tl0_resv01e:	BTRAP(0x1e) BTRAP(0x1f)
tl0_fpdis:	TRAP_NOSAVE(do_fpdis)
tl0_fpieee:	TRAP_SAVEFPU(do_fpieee)
tl0_fpother:	TRAP_NOSAVE(do_fpother_check_fitos)
tl0_tof:	TRAP(do_tof)
tl0_cwin:	CLEAN_WINDOW
tl0_div0:	TRAP(do_div0)
tl0_resv029:	BTRAP(0x29) BTRAP(0x2a) BTRAP(0x2b) BTRAP(0x2c) BTRAP(0x2d) BTRAP(0x2e)
tl0_resv02f:	BTRAP(0x2f)
tl0_dax:	TRAP_NOSAVE(__spitfire_data_access_exception)
tl0_resv031:	BTRAP(0x31)
tl0_dae:	membar #Sync
		TRAP_NOSAVE_7INSNS(__spitfire_access_error)
tl0_resv033:	BTRAP(0x33)
tl0_mna:	TRAP_NOSAVE(do_mna)
tl0_lddfmna:	TRAP_NOSAVE(do_lddfmna)
tl0_stdfmna:	TRAP_NOSAVE(do_stdfmna)
tl0_privact:	TRAP_NOSAVE(__do_privact)
tl0_resv038:	BTRAP(0x38) BTRAP(0x39) BTRAP(0x3a) BTRAP(0x3b) BTRAP(0x3c) BTRAP(0x3d)
tl0_resv03e:	BTRAP(0x3e) BTRAP(0x3f) BTRAP(0x40)
#ifdef CONFIG_SMP
tl0_irq1:	TRAP_IRQ(smp_call_function_client, 1)
tl0_irq2:	TRAP_IRQ(smp_receive_signal_client, 2)
tl0_irq3:	TRAP_IRQ(smp_penguin_jailcell, 3)
#else
tl0_irq1:	BTRAP(0x41)
tl0_irq2:	BTRAP(0x42)
tl0_irq3:	BTRAP(0x43)
#endif
tl0_irq4:	TRAP_IRQ(handler_irq, 4)
tl0_irq5:	TRAP_IRQ(handler_irq, 5)  TRAP_IRQ(handler_irq, 6)
tl0_irq7:	TRAP_IRQ(handler_irq, 7)  TRAP_IRQ(handler_irq, 8)
tl0_irq9:	TRAP_IRQ(handler_irq, 9)  TRAP_IRQ(handler_irq, 10)
tl0_irq11:	TRAP_IRQ(handler_irq, 11) TRAP_IRQ(handler_irq, 12)
tl0_irq13:	TRAP_IRQ(handler_irq, 13)
#ifndef CONFIG_SMP
tl0_irq14:	TRAP_IRQ(handler_irq, 14)
#else
tl0_irq14:	TICK_SMP_IRQ
#endif
tl0_irq15:	TRAP_IRQ(handler_irq, 15)
tl0_resv050:	BTRAP(0x50) BTRAP(0x51) BTRAP(0x52) BTRAP(0x53) BTRAP(0x54) BTRAP(0x55)
tl0_resv056:	BTRAP(0x56) BTRAP(0x57) BTRAP(0x58) BTRAP(0x59) BTRAP(0x5a) BTRAP(0x5b)
tl0_resv05c:	BTRAP(0x5c) BTRAP(0x5d) BTRAP(0x5e) BTRAP(0x5f)
tl0_ivec:	TRAP_IVEC
tl0_paw:	TRAP(do_paw)
tl0_vaw:	TRAP(do_vaw)
tl0_cee:	membar #Sync
		TRAP_NOSAVE_7INSNS(__spitfire_cee_trap)
tl0_iamiss:
#include	"itlb_base.S"
tl0_damiss:
#include	"dtlb_base.S"
tl0_daprot:
#include	"dtlb_prot.S"
tl0_fecc:	BTRAP(0x70)	/* Fast-ECC on Cheetah */
tl0_dcpe:	BTRAP(0x71)	/* D-cache Parity Error on Cheetah+ */
tl0_icpe:	BTRAP(0x72)	/* I-cache Parity Error on Cheetah+ */
tl0_resv073:	BTRAP(0x73) BTRAP(0x74) BTRAP(0x75)
tl0_resv076:	BTRAP(0x76) BTRAP(0x77) BTRAP(0x78) BTRAP(0x79) BTRAP(0x7a) BTRAP(0x7b)
tl0_resv07c:	BTRAP(0x7c) BTRAP(0x7d) BTRAP(0x7e) BTRAP(0x7f)
tl0_s0n:	SPILL_0_NORMAL
tl0_s1n:	SPILL_1_NORMAL
tl0_s2n:	SPILL_2_NORMAL
tl0_s3n:	SPILL_3_NORMAL
tl0_s4n:	SPILL_4_NORMAL
tl0_s5n:	SPILL_5_NORMAL
tl0_s6n:	SPILL_6_NORMAL
tl0_s7n:	SPILL_7_NORMAL
tl0_s0o:	SPILL_0_OTHER
tl0_s1o:	SPILL_1_OTHER
tl0_s2o:	SPILL_2_OTHER
tl0_s3o:	SPILL_3_OTHER
tl0_s4o:	SPILL_4_OTHER
tl0_s5o:	SPILL_5_OTHER
tl0_s6o:	SPILL_6_OTHER
tl0_s7o:	SPILL_7_OTHER
tl0_f0n:	FILL_0_NORMAL
tl0_f1n:	FILL_1_NORMAL
tl0_f2n:	FILL_2_NORMAL
tl0_f3n:	FILL_3_NORMAL
tl0_f4n:	FILL_4_NORMAL
tl0_f5n:	FILL_5_NORMAL
tl0_f6n:	FILL_6_NORMAL
tl0_f7n:	FILL_7_NORMAL
tl0_f0o:	FILL_0_OTHER
tl0_f1o:	FILL_1_OTHER
tl0_f2o:	FILL_2_OTHER
tl0_f3o:	FILL_3_OTHER
tl0_f4o:	FILL_4_OTHER
tl0_f5o:	FILL_5_OTHER
tl0_f6o:	FILL_6_OTHER
tl0_f7o:	FILL_7_OTHER
tl0_sunos:	SUNOS_SYSCALL_TRAP
tl0_bkpt:	BREAKPOINT_TRAP
tl0_divz:	TRAP(do_div0)
tl0_flushw:	FLUSH_WINDOW_TRAP
tl0_resv104:	BTRAP(0x104) BTRAP(0x105) BTRAP(0x106) BTRAP(0x107)
		.globl tl0_solaris
tl0_solaris:	SOLARIS_SYSCALL_TRAP
tl0_netbsd:	NETBSD_SYSCALL_TRAP
tl0_resv10a:	BTRAP(0x10a) BTRAP(0x10b) BTRAP(0x10c) BTRAP(0x10d) BTRAP(0x10e)
tl0_resv10f:	BTRAP(0x10f)
tl0_linux32:	LINUX_32BIT_SYSCALL_TRAP
tl0_oldlinux64:	LINUX_64BIT_SYSCALL_TRAP
tl0_resv112:	TRAP_UTRAP(UT_TRAP_INSTRUCTION_18,0x112) TRAP_UTRAP(UT_TRAP_INSTRUCTION_19,0x113)
tl0_resv114:	TRAP_UTRAP(UT_TRAP_INSTRUCTION_20,0x114) TRAP_UTRAP(UT_TRAP_INSTRUCTION_21,0x115)
tl0_resv116:	TRAP_UTRAP(UT_TRAP_INSTRUCTION_22,0x116) TRAP_UTRAP(UT_TRAP_INSTRUCTION_23,0x117)
tl0_resv118:	TRAP_UTRAP(UT_TRAP_INSTRUCTION_24,0x118) TRAP_UTRAP(UT_TRAP_INSTRUCTION_25,0x119)
tl0_resv11a:	TRAP_UTRAP(UT_TRAP_INSTRUCTION_26,0x11a) TRAP_UTRAP(UT_TRAP_INSTRUCTION_27,0x11b)
tl0_resv11c:	TRAP_UTRAP(UT_TRAP_INSTRUCTION_28,0x11c) TRAP_UTRAP(UT_TRAP_INSTRUCTION_29,0x11d)
tl0_resv11e:	TRAP_UTRAP(UT_TRAP_INSTRUCTION_30,0x11e) TRAP_UTRAP(UT_TRAP_INSTRUCTION_31,0x11f)
tl0_getcc:	GETCC_TRAP
tl0_setcc:	SETCC_TRAP
tl0_getpsr:	TRAP(do_getpsr)
tl0_resv123:	BTRAP(0x123) BTRAP(0x124) BTRAP(0x125) BTRAP(0x126)
tl0_solindir:	INDIRECT_SOLARIS_SYSCALL(156)
tl0_resv128:	BTRAP(0x128) BTRAP(0x129) BTRAP(0x12a) BTRAP(0x12b) BTRAP(0x12c)
tl0_resv12d:	BTRAP(0x12d) BTRAP(0x12e) BTRAP(0x12f) BTRAP(0x130) BTRAP(0x131)
tl0_resv132:	BTRAP(0x132) BTRAP(0x133) BTRAP(0x134) BTRAP(0x135) BTRAP(0x136)
tl0_resv137:	BTRAP(0x137) BTRAP(0x138) BTRAP(0x139) BTRAP(0x13a) BTRAP(0x13b)
tl0_resv13c:	BTRAP(0x13c) BTRAP(0x13d) BTRAP(0x13e) BTRAP(0x13f) BTRAP(0x140)
tl0_resv141:	BTRAP(0x141) BTRAP(0x142) BTRAP(0x143) BTRAP(0x144) BTRAP(0x145)
tl0_resv146:	BTRAP(0x146) BTRAP(0x147) BTRAP(0x148) BTRAP(0x149) BTRAP(0x14a)
tl0_resv14b:	BTRAP(0x14b) BTRAP(0x14c) BTRAP(0x14d) BTRAP(0x14e) BTRAP(0x14f)
tl0_resv150:	BTRAP(0x150) BTRAP(0x151) BTRAP(0x152) BTRAP(0x153) BTRAP(0x154)
tl0_resv155:	BTRAP(0x155) BTRAP(0x156) BTRAP(0x157) BTRAP(0x158) BTRAP(0x159)
tl0_resv15a:	BTRAP(0x15a) BTRAP(0x15b) BTRAP(0x15c) BTRAP(0x15d) BTRAP(0x15e)
tl0_resv15f:	BTRAP(0x15f) BTRAP(0x160) BTRAP(0x161) BTRAP(0x162) BTRAP(0x163)
tl0_resv164:	BTRAP(0x164) BTRAP(0x165) BTRAP(0x166) BTRAP(0x167) BTRAP(0x168)
tl0_resv169:	BTRAP(0x169) BTRAP(0x16a) BTRAP(0x16b) BTRAP(0x16c)
tl0_linux64:	LINUX_64BIT_SYSCALL_TRAP
tl0_gsctx:	TRAP(sparc64_get_context) TRAP(sparc64_set_context)
tl0_resv170:	KPROBES_TRAP(0x170) KPROBES_TRAP(0x171) BTRAP(0x172)
tl0_resv173:	BTRAP(0x173) BTRAP(0x174) BTRAP(0x175) BTRAP(0x176) BTRAP(0x177)
tl0_resv178:	BTRAP(0x178) BTRAP(0x179) BTRAP(0x17a) BTRAP(0x17b) BTRAP(0x17c)
tl0_resv17d:	BTRAP(0x17d) BTRAP(0x17e) BTRAP(0x17f)
#define BTRAPS(x) BTRAP(x) BTRAP(x+1) BTRAP(x+2) BTRAP(x+3) BTRAP(x+4) BTRAP(x+5) BTRAP(x+6) BTRAP(x+7)
tl0_resv180:	BTRAPS(0x180) BTRAPS(0x188)
tl0_resv190:	BTRAPS(0x190) BTRAPS(0x198)
tl0_resv1a0:	BTRAPS(0x1a0) BTRAPS(0x1a8)
tl0_resv1b0:	BTRAPS(0x1b0) BTRAPS(0x1b8)
tl0_resv1c0:	BTRAPS(0x1c0) BTRAPS(0x1c8)
tl0_resv1d0:	BTRAPS(0x1d0) BTRAPS(0x1d8)
tl0_resv1e0:	BTRAPS(0x1e0) BTRAPS(0x1e8)
tl0_resv1f0:	BTRAPS(0x1f0) BTRAPS(0x1f8)

sparc64_ttable_tl1:
tl1_resv000:	BOOT_KERNEL    BTRAPTL1(0x1) BTRAPTL1(0x2) BTRAPTL1(0x3)
tl1_resv004:	BTRAPTL1(0x4)  BTRAPTL1(0x5) BTRAPTL1(0x6) BTRAPTL1(0x7)
tl1_iax:	TRAP_NOSAVE(__spitfire_insn_access_exception_tl1)
tl1_resv009:	BTRAPTL1(0x9)
tl1_iae:	membar #Sync
		TRAP_NOSAVE_7INSNS(__spitfire_access_error)
tl1_resv00b:	BTRAPTL1(0xb) BTRAPTL1(0xc) BTRAPTL1(0xd) BTRAPTL1(0xe) BTRAPTL1(0xf)
tl1_ill:	TRAPTL1(do_ill_tl1)
tl1_privop:	BTRAPTL1(0x11)
tl1_resv012:	BTRAPTL1(0x12) BTRAPTL1(0x13) BTRAPTL1(0x14) BTRAPTL1(0x15)
tl1_resv016:	BTRAPTL1(0x16) BTRAPTL1(0x17) BTRAPTL1(0x18) BTRAPTL1(0x19)
tl1_resv01a:	BTRAPTL1(0x1a) BTRAPTL1(0x1b) BTRAPTL1(0x1c) BTRAPTL1(0x1d)
tl1_resv01e:	BTRAPTL1(0x1e) BTRAPTL1(0x1f)
tl1_fpdis:	TRAP_NOSAVE(do_fpdis)
tl1_fpieee:	TRAPTL1(do_fpieee_tl1)
tl1_fpother:	TRAPTL1(do_fpother_tl1)
tl1_tof:	TRAPTL1(do_tof_tl1)
tl1_cwin:	CLEAN_WINDOW
tl1_div0:	TRAPTL1(do_div0_tl1)
tl1_resv029:	BTRAPTL1(0x29) BTRAPTL1(0x2a) BTRAPTL1(0x2b) BTRAPTL1(0x2c)
tl1_resv02d:	BTRAPTL1(0x2d) BTRAPTL1(0x2e) BTRAPTL1(0x2f)
tl1_dax:	TRAP_NOSAVE(__spitfire_data_access_exception_tl1)
tl1_resv031:	BTRAPTL1(0x31)
tl1_dae:	membar #Sync
		TRAP_NOSAVE_7INSNS(__spitfire_access_error)
tl1_resv033:	BTRAPTL1(0x33)
tl1_mna:	TRAP_NOSAVE(do_mna)
tl1_lddfmna:	TRAPTL1(do_lddfmna_tl1)
tl1_stdfmna:	TRAPTL1(do_stdfmna_tl1)
tl1_privact:	BTRAPTL1(0x37)
tl1_resv038:	BTRAPTL1(0x38) BTRAPTL1(0x39) BTRAPTL1(0x3a) BTRAPTL1(0x3b)
tl1_resv03c:	BTRAPTL1(0x3c) BTRAPTL1(0x3d) BTRAPTL1(0x3e) BTRAPTL1(0x3f)
tl1_resv040:	BTRAPTL1(0x40)
tl1_irq1:	TRAP_IRQ(do_irq_tl1, 1)  TRAP_IRQ(do_irq_tl1, 2)  TRAP_IRQ(do_irq_tl1, 3)
tl1_irq4:	TRAP_IRQ(do_irq_tl1, 4)  TRAP_IRQ(do_irq_tl1, 5)  TRAP_IRQ(do_irq_tl1, 6)
tl1_irq7:	TRAP_IRQ(do_irq_tl1, 7)  TRAP_IRQ(do_irq_tl1, 8)  TRAP_IRQ(do_irq_tl1, 9)
tl1_irq10:	TRAP_IRQ(do_irq_tl1, 10) TRAP_IRQ(do_irq_tl1, 11)
tl1_irq12:	TRAP_IRQ(do_irq_tl1, 12) TRAP_IRQ(do_irq_tl1, 13)
tl1_irq14:	TRAP_IRQ(do_irq_tl1, 14) TRAP_IRQ(do_irq_tl1, 15)
tl1_resv050:	BTRAPTL1(0x50) BTRAPTL1(0x51) BTRAPTL1(0x52) BTRAPTL1(0x53)
tl1_resv054:	BTRAPTL1(0x54) BTRAPTL1(0x55) BTRAPTL1(0x56) BTRAPTL1(0x57)
tl1_resv058:	BTRAPTL1(0x58) BTRAPTL1(0x59) BTRAPTL1(0x5a) BTRAPTL1(0x5b)
tl1_resv05c:	BTRAPTL1(0x5c) BTRAPTL1(0x5d) BTRAPTL1(0x5e) BTRAPTL1(0x5f)
tl1_ivec:	TRAP_IVEC
tl1_paw:	TRAPTL1(do_paw_tl1)
tl1_vaw:	TRAPTL1(do_vaw_tl1)

		/* The grotty trick to save %g1 into current->thread.cee_stuff
		 * is because when we take this trap we could be interrupting
		 * trap code already using the trap alternate global registers.
		 *
		 * We cross our fingers and pray that this store/load does
		 * not cause yet another CEE trap.
		 */
tl1_cee:	membar	#Sync
		stx	%g1, [%g6 + TI_CEE_STUFF]
		ldxa	[%g0] ASI_AFSR, %g1
		membar	#Sync
		stxa	%g1, [%g0] ASI_AFSR
		membar	#Sync
		ldx	[%g6 + TI_CEE_STUFF], %g1
		retry

tl1_iamiss:	BTRAPTL1(0x64) BTRAPTL1(0x65) BTRAPTL1(0x66) BTRAPTL1(0x67)
tl1_damiss:
#include	"dtlb_backend.S"
tl1_daprot:
#include	"dtlb_prot.S"
tl1_fecc:	BTRAPTL1(0x70)	/* Fast-ECC on Cheetah */
tl1_dcpe:	BTRAPTL1(0x71)	/* D-cache Parity Error on Cheetah+ */
tl1_icpe:	BTRAPTL1(0x72)	/* I-cache Parity Error on Cheetah+ */
tl1_resv073:	BTRAPTL1(0x73)
tl1_resv074:	BTRAPTL1(0x74) BTRAPTL1(0x75) BTRAPTL1(0x76) BTRAPTL1(0x77)
tl1_resv078:	BTRAPTL1(0x78) BTRAPTL1(0x79) BTRAPTL1(0x7a) BTRAPTL1(0x7b)
tl1_resv07c:	BTRAPTL1(0x7c) BTRAPTL1(0x7d) BTRAPTL1(0x7e) BTRAPTL1(0x7f)
tl1_s0n:	SPILL_0_NORMAL
tl1_s1n:	SPILL_1_NORMAL
tl1_s2n:	SPILL_2_NORMAL
tl1_s3n:	SPILL_3_NORMAL
tl1_s4n:	SPILL_4_NORMAL
tl1_s5n:	SPILL_5_NORMAL
tl1_s6n:	SPILL_6_NORMAL
tl1_s7n:	SPILL_7_NORMAL
tl1_s0o:	SPILL_0_OTHER
tl1_s1o:	SPILL_1_OTHER
tl1_s2o:	SPILL_2_OTHER
tl1_s3o:	SPILL_3_OTHER
tl1_s4o:	SPILL_4_OTHER
tl1_s5o:	SPILL_5_OTHER
tl1_s6o:	SPILL_6_OTHER
tl1_s7o:	SPILL_7_OTHER
tl1_f0n:	FILL_0_NORMAL
tl1_f1n:	FILL_1_NORMAL
tl1_f2n:	FILL_2_NORMAL
tl1_f3n:	FILL_3_NORMAL
tl1_f4n:	FILL_4_NORMAL
tl1_f5n:	FILL_5_NORMAL
tl1_f6n:	FILL_6_NORMAL
tl1_f7n:	FILL_7_NORMAL
tl1_f0o:	FILL_0_OTHER
tl1_f1o:	FILL_1_OTHER
tl1_f2o:	FILL_2_OTHER
tl1_f3o:	FILL_3_OTHER
tl1_f4o:	FILL_4_OTHER
tl1_f5o:	FILL_5_OTHER
tl1_f6o:	FILL_6_OTHER
tl1_f7o:	FILL_7_OTHER
OpenPOWER on IntegriCloud