diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2007-08-21 23:47:24 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-08-22 02:48:35 -0400 |
commit | dc8f571a26689102f6abe2565a84226edeaacc61 (patch) | |
tree | 2a155e79e63f2ff2c1321e3bc704eb472e516cc1 /arch/powerpc/kernel/head_64.S | |
parent | f9ff0f304833be9a6a605c84e24d630d5aef2230 (diff) |
[POWERPC] Move the iSeries exception vectors
out of head_64.S and into platforms/iseries/exception.S
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/head_64.S')
-rw-r--r-- | arch/powerpc/kernel/head_64.S | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index fe6122bfd073..33c4e8cab0ba 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S | |||
@@ -358,142 +358,6 @@ machine_check_fwnmi: | |||
358 | mtspr SPRN_SPRG1,r13 /* save r13 */ | 358 | mtspr SPRN_SPRG1,r13 /* save r13 */ |
359 | EXCEPTION_PROLOG_PSERIES_FORCE_64BIT(PACA_EXMC, machine_check_common) | 359 | EXCEPTION_PROLOG_PSERIES_FORCE_64BIT(PACA_EXMC, machine_check_common) |
360 | 360 | ||
361 | #ifdef CONFIG_PPC_ISERIES | ||
362 | /*** ISeries-LPAR interrupt handlers ***/ | ||
363 | |||
364 | STD_EXCEPTION_ISERIES(0x200, machine_check, PACA_EXMC) | ||
365 | |||
366 | .globl data_access_iSeries | ||
367 | data_access_iSeries: | ||
368 | mtspr SPRN_SPRG1,r13 | ||
369 | BEGIN_FTR_SECTION | ||
370 | mtspr SPRN_SPRG2,r12 | ||
371 | mfspr r13,SPRN_DAR | ||
372 | mfspr r12,SPRN_DSISR | ||
373 | srdi r13,r13,60 | ||
374 | rlwimi r13,r12,16,0x20 | ||
375 | mfcr r12 | ||
376 | cmpwi r13,0x2c | ||
377 | beq .do_stab_bolted_iSeries | ||
378 | mtcrf 0x80,r12 | ||
379 | mfspr r12,SPRN_SPRG2 | ||
380 | END_FTR_SECTION_IFCLR(CPU_FTR_SLB) | ||
381 | EXCEPTION_PROLOG_ISERIES_1(PACA_EXGEN) | ||
382 | EXCEPTION_PROLOG_ISERIES_2 | ||
383 | b data_access_common | ||
384 | |||
385 | .do_stab_bolted_iSeries: | ||
386 | mtcrf 0x80,r12 | ||
387 | mfspr r12,SPRN_SPRG2 | ||
388 | EXCEPTION_PROLOG_ISERIES_1(PACA_EXSLB) | ||
389 | EXCEPTION_PROLOG_ISERIES_2 | ||
390 | b .do_stab_bolted | ||
391 | |||
392 | .globl data_access_slb_iSeries | ||
393 | data_access_slb_iSeries: | ||
394 | mtspr SPRN_SPRG1,r13 /* save r13 */ | ||
395 | mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ | ||
396 | std r3,PACA_EXSLB+EX_R3(r13) | ||
397 | mfspr r3,SPRN_DAR | ||
398 | std r9,PACA_EXSLB+EX_R9(r13) | ||
399 | mfcr r9 | ||
400 | #ifdef __DISABLED__ | ||
401 | cmpdi r3,0 | ||
402 | bge slb_miss_user_iseries | ||
403 | #endif | ||
404 | std r10,PACA_EXSLB+EX_R10(r13) | ||
405 | std r11,PACA_EXSLB+EX_R11(r13) | ||
406 | std r12,PACA_EXSLB+EX_R12(r13) | ||
407 | mfspr r10,SPRN_SPRG1 | ||
408 | std r10,PACA_EXSLB+EX_R13(r13) | ||
409 | ld r12,PACALPPACAPTR(r13) | ||
410 | ld r12,LPPACASRR1(r12) | ||
411 | b .slb_miss_realmode | ||
412 | |||
413 | STD_EXCEPTION_ISERIES(0x400, instruction_access, PACA_EXGEN) | ||
414 | |||
415 | .globl instruction_access_slb_iSeries | ||
416 | instruction_access_slb_iSeries: | ||
417 | mtspr SPRN_SPRG1,r13 /* save r13 */ | ||
418 | mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ | ||
419 | std r3,PACA_EXSLB+EX_R3(r13) | ||
420 | ld r3,PACALPPACAPTR(r13) | ||
421 | ld r3,LPPACASRR0(r3) /* get SRR0 value */ | ||
422 | std r9,PACA_EXSLB+EX_R9(r13) | ||
423 | mfcr r9 | ||
424 | #ifdef __DISABLED__ | ||
425 | cmpdi r3,0 | ||
426 | bge .slb_miss_user_iseries | ||
427 | #endif | ||
428 | std r10,PACA_EXSLB+EX_R10(r13) | ||
429 | std r11,PACA_EXSLB+EX_R11(r13) | ||
430 | std r12,PACA_EXSLB+EX_R12(r13) | ||
431 | mfspr r10,SPRN_SPRG1 | ||
432 | std r10,PACA_EXSLB+EX_R13(r13) | ||
433 | ld r12,PACALPPACAPTR(r13) | ||
434 | ld r12,LPPACASRR1(r12) | ||
435 | b .slb_miss_realmode | ||
436 | |||
437 | #ifdef __DISABLED__ | ||
438 | slb_miss_user_iseries: | ||
439 | std r10,PACA_EXGEN+EX_R10(r13) | ||
440 | std r11,PACA_EXGEN+EX_R11(r13) | ||
441 | std r12,PACA_EXGEN+EX_R12(r13) | ||
442 | mfspr r10,SPRG1 | ||
443 | ld r11,PACA_EXSLB+EX_R9(r13) | ||
444 | ld r12,PACA_EXSLB+EX_R3(r13) | ||
445 | std r10,PACA_EXGEN+EX_R13(r13) | ||
446 | std r11,PACA_EXGEN+EX_R9(r13) | ||
447 | std r12,PACA_EXGEN+EX_R3(r13) | ||
448 | EXCEPTION_PROLOG_ISERIES_2 | ||
449 | b slb_miss_user_common | ||
450 | #endif | ||
451 | |||
452 | MASKABLE_EXCEPTION_ISERIES(0x500, hardware_interrupt) | ||
453 | STD_EXCEPTION_ISERIES(0x600, alignment, PACA_EXGEN) | ||
454 | STD_EXCEPTION_ISERIES(0x700, program_check, PACA_EXGEN) | ||
455 | STD_EXCEPTION_ISERIES(0x800, fp_unavailable, PACA_EXGEN) | ||
456 | MASKABLE_EXCEPTION_ISERIES(0x900, decrementer) | ||
457 | STD_EXCEPTION_ISERIES(0xa00, trap_0a, PACA_EXGEN) | ||
458 | STD_EXCEPTION_ISERIES(0xb00, trap_0b, PACA_EXGEN) | ||
459 | |||
460 | .globl system_call_iSeries | ||
461 | system_call_iSeries: | ||
462 | mr r9,r13 | ||
463 | mfspr r13,SPRN_SPRG3 | ||
464 | EXCEPTION_PROLOG_ISERIES_2 | ||
465 | b system_call_common | ||
466 | |||
467 | STD_EXCEPTION_ISERIES( 0xd00, single_step, PACA_EXGEN) | ||
468 | STD_EXCEPTION_ISERIES( 0xe00, trap_0e, PACA_EXGEN) | ||
469 | STD_EXCEPTION_ISERIES( 0xf00, performance_monitor, PACA_EXGEN) | ||
470 | |||
471 | decrementer_iSeries_masked: | ||
472 | /* We may not have a valid TOC pointer in here. */ | ||
473 | li r11,1 | ||
474 | ld r12,PACALPPACAPTR(r13) | ||
475 | stb r11,LPPACADECRINT(r12) | ||
476 | LOAD_REG_IMMEDIATE(r12, tb_ticks_per_jiffy) | ||
477 | lwz r12,0(r12) | ||
478 | mtspr SPRN_DEC,r12 | ||
479 | /* fall through */ | ||
480 | |||
481 | hardware_interrupt_iSeries_masked: | ||
482 | mtcrf 0x80,r9 /* Restore regs */ | ||
483 | ld r12,PACALPPACAPTR(r13) | ||
484 | ld r11,LPPACASRR0(r12) | ||
485 | ld r12,LPPACASRR1(r12) | ||
486 | mtspr SPRN_SRR0,r11 | ||
487 | mtspr SPRN_SRR1,r12 | ||
488 | ld r9,PACA_EXGEN+EX_R9(r13) | ||
489 | ld r10,PACA_EXGEN+EX_R10(r13) | ||
490 | ld r11,PACA_EXGEN+EX_R11(r13) | ||
491 | ld r12,PACA_EXGEN+EX_R12(r13) | ||
492 | ld r13,PACA_EXGEN+EX_R13(r13) | ||
493 | rfid | ||
494 | b . /* prevent speculative execution */ | ||
495 | #endif /* CONFIG_PPC_ISERIES */ | ||
496 | |||
497 | /*** Common interrupt handlers ***/ | 361 | /*** Common interrupt handlers ***/ |
498 | 362 | ||
499 | STD_EXCEPTION_COMMON(0x100, system_reset, .system_reset_exception) | 363 | STD_EXCEPTION_COMMON(0x100, system_reset, .system_reset_exception) |