source: mainline/kernel/arch/ppc32/src/exception.S@ 6cd9aa6

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 6cd9aa6 was 0867321, checked in by Martin Decky <martin@…>, 17 years ago

very experimental TLB refill for ppc32

  • Property mode set to 100644
File size: 5.7 KB
Line 
1#
2# Copyright (c) 2006 Martin Decky
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29#include <arch/asm/regname.h>
30#include <arch/mm/page.h>
31
32.section K_UNMAPPED_TEXT_START, "ax"
33
34.macro CONTEXT_STORE
35
36 # save R12 in SPRG1, backup CR in R12
37 # save SP in SPRG2
38
39 mtsprg1 r12
40 mfcr r12
41 mtsprg2 sp
42
43 # check whether SP is in kernel
44
45 andis. sp, sp, 0x8000
46 bne 1f
47
48 # stack is in user-space
49
50 mfsprg0 sp
51
52 b 2f
53
54 1:
55
56 # stack is in kernel
57
58 mfsprg2 sp
59 subis sp, sp, 0x8000
60
61 2:
62
63 subi sp, sp, 164
64 stw r0, 8(sp)
65 stw r2, 12(sp)
66 stw r3, 16(sp)
67 stw r4, 20(sp)
68 stw r5, 24(sp)
69 stw r6, 28(sp)
70 stw r7, 32(sp)
71 stw r8, 36(sp)
72 stw r9, 40(sp)
73 stw r10, 44(sp)
74 stw r11, 48(sp)
75 stw r13, 52(sp)
76 stw r14, 56(sp)
77 stw r15, 60(sp)
78 stw r16, 64(sp)
79 stw r17, 68(sp)
80 stw r18, 72(sp)
81 stw r19, 76(sp)
82 stw r20, 80(sp)
83 stw r21, 84(sp)
84 stw r22, 88(sp)
85 stw r23, 92(sp)
86 stw r24, 96(sp)
87 stw r25, 100(sp)
88 stw r26, 104(sp)
89 stw r27, 108(sp)
90 stw r28, 112(sp)
91 stw r29, 116(sp)
92 stw r30, 120(sp)
93 stw r31, 124(sp)
94
95 stw r12, 128(sp)
96
97 mfsrr0 r12
98 stw r12, 132(sp)
99
100 mfsrr1 r12
101 stw r12, 136(sp)
102
103 mflr r12
104 stw r12, 140(sp)
105
106 mfctr r12
107 stw r12, 144(sp)
108
109 mfxer r12
110 stw r12, 148(sp)
111
112 mfdar r12
113 stw r12, 152(sp)
114
115 mfsprg1 r12
116 stw r12, 156(sp)
117
118 mfsprg2 r12
119 stw r12, 160(sp)
120.endm
121
122.org 0x100
123.global exc_system_reset
124exc_system_reset:
125 CONTEXT_STORE
126
127 li r3, 0
128 b jump_to_kernel
129
130.org 0x200
131.global exc_machine_check
132exc_machine_check:
133 CONTEXT_STORE
134
135 li r3, 1
136 b jump_to_kernel
137
138.org 0x300
139.global exc_data_storage
140exc_data_storage:
141 CONTEXT_STORE
142
143 b data_storage
144
145.org 0x400
146.global exc_instruction_storage
147exc_instruction_storage:
148 CONTEXT_STORE
149
150 b instruction_storage
151
152.org 0x500
153.global exc_external
154exc_external:
155 CONTEXT_STORE
156
157 li r3, 4
158 b jump_to_kernel
159
160.org 0x600
161.global exc_alignment
162exc_alignment:
163 CONTEXT_STORE
164
165 li r3, 5
166 b jump_to_kernel
167
168.org 0x700
169.global exc_program
170exc_program:
171 CONTEXT_STORE
172
173 li r3, 6
174 b jump_to_kernel
175
176.org 0x800
177.global exc_fp_unavailable
178exc_fp_unavailable:
179 CONTEXT_STORE
180
181 li r3, 7
182 b jump_to_kernel
183
184.org 0x900
185.global exc_decrementer
186exc_decrementer:
187 CONTEXT_STORE
188
189 li r3, 8
190 b jump_to_kernel
191
192.org 0xa00
193.global exc_reserved0
194exc_reserved0:
195 CONTEXT_STORE
196
197 li r3, 9
198 b jump_to_kernel
199
200.org 0xb00
201.global exc_reserved1
202exc_reserved1:
203 CONTEXT_STORE
204
205 li r3, 10
206 b jump_to_kernel
207
208.org 0xc00
209.global exc_syscall
210exc_syscall:
211 CONTEXT_STORE
212
213 b jump_to_kernel_syscall
214
215.org 0xd00
216.global exc_trace
217exc_trace:
218 CONTEXT_STORE
219
220 li r3, 12
221 b jump_to_kernel
222
223.org 0x1000
224.global exc_itlb_miss
225exc_itlb_miss:
226 CONTEXT_STORE
227
228 b tlb_miss
229
230.org 0x1100
231.global exc_dtlb_miss_load
232exc_dtlb_miss_load:
233 CONTEXT_STORE
234
235 b tlb_miss
236
237.org 0x1200
238.global exc_dtlb_miss_store
239exc_dtlb_miss_store:
240 CONTEXT_STORE
241
242 b tlb_miss
243
244.org 0x4000
245data_storage:
246 li r3, 2
247 mr r4, sp
248 addi r4, r4, 8
249 bl pht_refill_real
250
251 cmpwi r3, 0
252 bne iret_real
253
254 li r3, 2
255 b jump_to_kernel
256
257instruction_storage:
258 li r3, 3
259 mr r4, sp
260 addi r4, r4, 8
261 bl pht_refill_real
262
263 cmpwi r3, 0
264 bne iret_real
265
266 li r3, 3
267 b jump_to_kernel
268
269tlb_miss:
270 li r3, 16
271 mfspr r4, tlbmiss
272 mfspr r5, ptehi
273 mfspr r6, ptelo
274 mr r7, sp
275 addi r7, r7, 20
276
277 bl tlb_refill_real
278 b iret_real
279
280jump_to_kernel:
281 lis r12, iret@ha
282 addi r12, r12, iret@l
283 mtlr r12
284
285 lis r12, exc_dispatch@ha
286 addi r12, r12, exc_dispatch@l
287 mtsrr0 r12
288
289 mfmsr r12
290 ori r12, r12, (msr_ir | msr_dr)@l
291 mtsrr1 r12
292
293 addis sp, sp, 0x8000
294 mr r4, sp
295 addi r4, r4, 8
296
297 rfi
298
299jump_to_kernel_syscall:
300 lis r12, syscall_handler@ha
301 addi r12, r12, syscall_handler@l
302 mtsrr0 r12
303
304 lis r12, iret_syscall@ha
305 addi r12, r12, iret_syscall@l
306 mtlr r12
307
308 mfmsr r12
309 ori r12, r12, (msr_ir | msr_dr)@l
310 mtsrr1 r12
311
312 addis sp, sp, 0x8000
313 rfi
314
315iret_real:
316 lwz r0, 8(sp)
317 lwz r2, 12(sp)
318 lwz r3, 16(sp)
319 lwz r4, 20(sp)
320 lwz r5, 24(sp)
321 lwz r6, 28(sp)
322 lwz r7, 32(sp)
323 lwz r8, 36(sp)
324 lwz r9, 40(sp)
325 lwz r10, 44(sp)
326 lwz r11, 48(sp)
327 lwz r13, 52(sp)
328 lwz r14, 56(sp)
329 lwz r15, 60(sp)
330 lwz r16, 64(sp)
331 lwz r17, 68(sp)
332 lwz r18, 72(sp)
333 lwz r19, 76(sp)
334 lwz r20, 80(sp)
335 lwz r21, 84(sp)
336 lwz r22, 88(sp)
337 lwz r23, 92(sp)
338 lwz r24, 96(sp)
339 lwz r25, 100(sp)
340 lwz r26, 104(sp)
341 lwz r27, 108(sp)
342 lwz r28, 112(sp)
343 lwz r29, 116(sp)
344 lwz r30, 120(sp)
345 lwz r31, 124(sp)
346
347 lwz r12, 128(sp)
348 mtcr r12
349
350 lwz r12, 132(sp)
351 mtsrr0 r12
352
353 lwz r12, 136(sp)
354 mtsrr1 r12
355
356 lwz r12, 140(sp)
357 mtlr r12
358
359 lwz r12, 144(sp)
360 mtctr r12
361
362 lwz r12, 148(sp)
363 mtxer r12
364
365 lwz r12, 156(sp)
366 lwz sp, 160(sp)
367
368 rfi
Note: See TracBrowser for help on using the repository browser.