diff options
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64e.S')
-rw-r--r-- | arch/powerpc/kernel/exceptions-64e.S | 128 |
1 files changed, 64 insertions, 64 deletions
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S index c1bee3ce9d1f..5e37338c2e5c 100644 --- a/arch/powerpc/kernel/exceptions-64e.S +++ b/arch/powerpc/kernel/exceptions-64e.S | |||
@@ -499,7 +499,7 @@ exc_##n##_bad_stack: \ | |||
499 | CHECK_NAPPING(); \ | 499 | CHECK_NAPPING(); \ |
500 | addi r3,r1,STACK_FRAME_OVERHEAD; \ | 500 | addi r3,r1,STACK_FRAME_OVERHEAD; \ |
501 | bl hdlr; \ | 501 | bl hdlr; \ |
502 | b .ret_from_except_lite; | 502 | b ret_from_except_lite; |
503 | 503 | ||
504 | /* This value is used to mark exception frames on the stack. */ | 504 | /* This value is used to mark exception frames on the stack. */ |
505 | .section ".toc","aw" | 505 | .section ".toc","aw" |
@@ -550,11 +550,11 @@ interrupt_end_book3e: | |||
550 | CRIT_EXCEPTION_PROLOG(0x100, BOOKE_INTERRUPT_CRITICAL, | 550 | CRIT_EXCEPTION_PROLOG(0x100, BOOKE_INTERRUPT_CRITICAL, |
551 | PROLOG_ADDITION_NONE) | 551 | PROLOG_ADDITION_NONE) |
552 | EXCEPTION_COMMON_CRIT(0x100) | 552 | EXCEPTION_COMMON_CRIT(0x100) |
553 | bl .save_nvgprs | 553 | bl save_nvgprs |
554 | bl special_reg_save | 554 | bl special_reg_save |
555 | CHECK_NAPPING(); | 555 | CHECK_NAPPING(); |
556 | addi r3,r1,STACK_FRAME_OVERHEAD | 556 | addi r3,r1,STACK_FRAME_OVERHEAD |
557 | bl .unknown_exception | 557 | bl unknown_exception |
558 | b ret_from_crit_except | 558 | b ret_from_crit_except |
559 | 559 | ||
560 | /* Machine Check Interrupt */ | 560 | /* Machine Check Interrupt */ |
@@ -562,11 +562,11 @@ interrupt_end_book3e: | |||
562 | MC_EXCEPTION_PROLOG(0x000, BOOKE_INTERRUPT_MACHINE_CHECK, | 562 | MC_EXCEPTION_PROLOG(0x000, BOOKE_INTERRUPT_MACHINE_CHECK, |
563 | PROLOG_ADDITION_NONE) | 563 | PROLOG_ADDITION_NONE) |
564 | EXCEPTION_COMMON_MC(0x000) | 564 | EXCEPTION_COMMON_MC(0x000) |
565 | bl .save_nvgprs | 565 | bl save_nvgprs |
566 | bl special_reg_save | 566 | bl special_reg_save |
567 | CHECK_NAPPING(); | 567 | CHECK_NAPPING(); |
568 | addi r3,r1,STACK_FRAME_OVERHEAD | 568 | addi r3,r1,STACK_FRAME_OVERHEAD |
569 | bl .machine_check_exception | 569 | bl machine_check_exception |
570 | b ret_from_mc_except | 570 | b ret_from_mc_except |
571 | 571 | ||
572 | /* Data Storage Interrupt */ | 572 | /* Data Storage Interrupt */ |
@@ -612,9 +612,9 @@ interrupt_end_book3e: | |||
612 | std r14,_DSISR(r1) | 612 | std r14,_DSISR(r1) |
613 | addi r3,r1,STACK_FRAME_OVERHEAD | 613 | addi r3,r1,STACK_FRAME_OVERHEAD |
614 | ld r14,PACA_EXGEN+EX_R14(r13) | 614 | ld r14,PACA_EXGEN+EX_R14(r13) |
615 | bl .save_nvgprs | 615 | bl save_nvgprs |
616 | bl .program_check_exception | 616 | bl program_check_exception |
617 | b .ret_from_except | 617 | b ret_from_except |
618 | 618 | ||
619 | /* Floating Point Unavailable Interrupt */ | 619 | /* Floating Point Unavailable Interrupt */ |
620 | START_EXCEPTION(fp_unavailable); | 620 | START_EXCEPTION(fp_unavailable); |
@@ -625,13 +625,13 @@ interrupt_end_book3e: | |||
625 | ld r12,_MSR(r1) | 625 | ld r12,_MSR(r1) |
626 | andi. r0,r12,MSR_PR; | 626 | andi. r0,r12,MSR_PR; |
627 | beq- 1f | 627 | beq- 1f |
628 | bl .load_up_fpu | 628 | bl load_up_fpu |
629 | b fast_exception_return | 629 | b fast_exception_return |
630 | 1: INTS_DISABLE | 630 | 1: INTS_DISABLE |
631 | bl .save_nvgprs | 631 | bl save_nvgprs |
632 | addi r3,r1,STACK_FRAME_OVERHEAD | 632 | addi r3,r1,STACK_FRAME_OVERHEAD |
633 | bl .kernel_fp_unavailable_exception | 633 | bl kernel_fp_unavailable_exception |
634 | b .ret_from_except | 634 | b ret_from_except |
635 | 635 | ||
636 | /* Altivec Unavailable Interrupt */ | 636 | /* Altivec Unavailable Interrupt */ |
637 | START_EXCEPTION(altivec_unavailable); | 637 | START_EXCEPTION(altivec_unavailable); |
@@ -644,16 +644,16 @@ BEGIN_FTR_SECTION | |||
644 | ld r12,_MSR(r1) | 644 | ld r12,_MSR(r1) |
645 | andi. r0,r12,MSR_PR; | 645 | andi. r0,r12,MSR_PR; |
646 | beq- 1f | 646 | beq- 1f |
647 | bl .load_up_altivec | 647 | bl load_up_altivec |
648 | b fast_exception_return | 648 | b fast_exception_return |
649 | 1: | 649 | 1: |
650 | END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) | 650 | END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) |
651 | #endif | 651 | #endif |
652 | INTS_DISABLE | 652 | INTS_DISABLE |
653 | bl .save_nvgprs | 653 | bl save_nvgprs |
654 | addi r3,r1,STACK_FRAME_OVERHEAD | 654 | addi r3,r1,STACK_FRAME_OVERHEAD |
655 | bl .altivec_unavailable_exception | 655 | bl altivec_unavailable_exception |
656 | b .ret_from_except | 656 | b ret_from_except |
657 | 657 | ||
658 | /* AltiVec Assist */ | 658 | /* AltiVec Assist */ |
659 | START_EXCEPTION(altivec_assist); | 659 | START_EXCEPTION(altivec_assist); |
@@ -662,16 +662,16 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) | |||
662 | PROLOG_ADDITION_NONE) | 662 | PROLOG_ADDITION_NONE) |
663 | EXCEPTION_COMMON(0x220) | 663 | EXCEPTION_COMMON(0x220) |
664 | INTS_DISABLE | 664 | INTS_DISABLE |
665 | bl .save_nvgprs | 665 | bl save_nvgprs |
666 | addi r3,r1,STACK_FRAME_OVERHEAD | 666 | addi r3,r1,STACK_FRAME_OVERHEAD |
667 | #ifdef CONFIG_ALTIVEC | 667 | #ifdef CONFIG_ALTIVEC |
668 | BEGIN_FTR_SECTION | 668 | BEGIN_FTR_SECTION |
669 | bl .altivec_assist_exception | 669 | bl altivec_assist_exception |
670 | END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) | 670 | END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) |
671 | #else | 671 | #else |
672 | bl .unknown_exception | 672 | bl unknown_exception |
673 | #endif | 673 | #endif |
674 | b .ret_from_except | 674 | b ret_from_except |
675 | 675 | ||
676 | 676 | ||
677 | /* Decrementer Interrupt */ | 677 | /* Decrementer Interrupt */ |
@@ -687,14 +687,14 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) | |||
687 | CRIT_EXCEPTION_PROLOG(0x9f0, BOOKE_INTERRUPT_WATCHDOG, | 687 | CRIT_EXCEPTION_PROLOG(0x9f0, BOOKE_INTERRUPT_WATCHDOG, |
688 | PROLOG_ADDITION_NONE) | 688 | PROLOG_ADDITION_NONE) |
689 | EXCEPTION_COMMON_CRIT(0x9f0) | 689 | EXCEPTION_COMMON_CRIT(0x9f0) |
690 | bl .save_nvgprs | 690 | bl save_nvgprs |
691 | bl special_reg_save | 691 | bl special_reg_save |
692 | CHECK_NAPPING(); | 692 | CHECK_NAPPING(); |
693 | addi r3,r1,STACK_FRAME_OVERHEAD | 693 | addi r3,r1,STACK_FRAME_OVERHEAD |
694 | #ifdef CONFIG_BOOKE_WDT | 694 | #ifdef CONFIG_BOOKE_WDT |
695 | bl .WatchdogException | 695 | bl WatchdogException |
696 | #else | 696 | #else |
697 | bl .unknown_exception | 697 | bl unknown_exception |
698 | #endif | 698 | #endif |
699 | b ret_from_crit_except | 699 | b ret_from_crit_except |
700 | 700 | ||
@@ -712,10 +712,10 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) | |||
712 | PROLOG_ADDITION_NONE) | 712 | PROLOG_ADDITION_NONE) |
713 | EXCEPTION_COMMON(0xf20) | 713 | EXCEPTION_COMMON(0xf20) |
714 | INTS_DISABLE | 714 | INTS_DISABLE |
715 | bl .save_nvgprs | 715 | bl save_nvgprs |
716 | addi r3,r1,STACK_FRAME_OVERHEAD | 716 | addi r3,r1,STACK_FRAME_OVERHEAD |
717 | bl .unknown_exception | 717 | bl unknown_exception |
718 | b .ret_from_except | 718 | b ret_from_except |
719 | 719 | ||
720 | /* Debug exception as a critical interrupt*/ | 720 | /* Debug exception as a critical interrupt*/ |
721 | START_EXCEPTION(debug_crit); | 721 | START_EXCEPTION(debug_crit); |
@@ -774,9 +774,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) | |||
774 | mr r4,r14 | 774 | mr r4,r14 |
775 | ld r14,PACA_EXCRIT+EX_R14(r13) | 775 | ld r14,PACA_EXCRIT+EX_R14(r13) |
776 | ld r15,PACA_EXCRIT+EX_R15(r13) | 776 | ld r15,PACA_EXCRIT+EX_R15(r13) |
777 | bl .save_nvgprs | 777 | bl save_nvgprs |
778 | bl .DebugException | 778 | bl DebugException |
779 | b .ret_from_except | 779 | b ret_from_except |
780 | 780 | ||
781 | kernel_dbg_exc: | 781 | kernel_dbg_exc: |
782 | b . /* NYI */ | 782 | b . /* NYI */ |
@@ -839,9 +839,9 @@ kernel_dbg_exc: | |||
839 | mr r4,r14 | 839 | mr r4,r14 |
840 | ld r14,PACA_EXDBG+EX_R14(r13) | 840 | ld r14,PACA_EXDBG+EX_R14(r13) |
841 | ld r15,PACA_EXDBG+EX_R15(r13) | 841 | ld r15,PACA_EXDBG+EX_R15(r13) |
842 | bl .save_nvgprs | 842 | bl save_nvgprs |
843 | bl .DebugException | 843 | bl DebugException |
844 | b .ret_from_except | 844 | b ret_from_except |
845 | 845 | ||
846 | START_EXCEPTION(perfmon); | 846 | START_EXCEPTION(perfmon); |
847 | NORMAL_EXCEPTION_PROLOG(0x260, BOOKE_INTERRUPT_PERFORMANCE_MONITOR, | 847 | NORMAL_EXCEPTION_PROLOG(0x260, BOOKE_INTERRUPT_PERFORMANCE_MONITOR, |
@@ -850,8 +850,8 @@ kernel_dbg_exc: | |||
850 | INTS_DISABLE | 850 | INTS_DISABLE |
851 | CHECK_NAPPING() | 851 | CHECK_NAPPING() |
852 | addi r3,r1,STACK_FRAME_OVERHEAD | 852 | addi r3,r1,STACK_FRAME_OVERHEAD |
853 | bl .performance_monitor_exception | 853 | bl performance_monitor_exception |
854 | b .ret_from_except_lite | 854 | b ret_from_except_lite |
855 | 855 | ||
856 | /* Doorbell interrupt */ | 856 | /* Doorbell interrupt */ |
857 | MASKABLE_EXCEPTION(0x280, BOOKE_INTERRUPT_DOORBELL, | 857 | MASKABLE_EXCEPTION(0x280, BOOKE_INTERRUPT_DOORBELL, |
@@ -862,11 +862,11 @@ kernel_dbg_exc: | |||
862 | CRIT_EXCEPTION_PROLOG(0x2a0, BOOKE_INTERRUPT_DOORBELL_CRITICAL, | 862 | CRIT_EXCEPTION_PROLOG(0x2a0, BOOKE_INTERRUPT_DOORBELL_CRITICAL, |
863 | PROLOG_ADDITION_NONE) | 863 | PROLOG_ADDITION_NONE) |
864 | EXCEPTION_COMMON_CRIT(0x2a0) | 864 | EXCEPTION_COMMON_CRIT(0x2a0) |
865 | bl .save_nvgprs | 865 | bl save_nvgprs |
866 | bl special_reg_save | 866 | bl special_reg_save |
867 | CHECK_NAPPING(); | 867 | CHECK_NAPPING(); |
868 | addi r3,r1,STACK_FRAME_OVERHEAD | 868 | addi r3,r1,STACK_FRAME_OVERHEAD |
869 | bl .unknown_exception | 869 | bl unknown_exception |
870 | b ret_from_crit_except | 870 | b ret_from_crit_except |
871 | 871 | ||
872 | /* | 872 | /* |
@@ -878,21 +878,21 @@ kernel_dbg_exc: | |||
878 | PROLOG_ADDITION_NONE) | 878 | PROLOG_ADDITION_NONE) |
879 | EXCEPTION_COMMON(0x2c0) | 879 | EXCEPTION_COMMON(0x2c0) |
880 | addi r3,r1,STACK_FRAME_OVERHEAD | 880 | addi r3,r1,STACK_FRAME_OVERHEAD |
881 | bl .save_nvgprs | 881 | bl save_nvgprs |
882 | INTS_RESTORE_HARD | 882 | INTS_RESTORE_HARD |
883 | bl .unknown_exception | 883 | bl unknown_exception |
884 | b .ret_from_except | 884 | b ret_from_except |
885 | 885 | ||
886 | /* Guest Doorbell critical Interrupt */ | 886 | /* Guest Doorbell critical Interrupt */ |
887 | START_EXCEPTION(guest_doorbell_crit); | 887 | START_EXCEPTION(guest_doorbell_crit); |
888 | CRIT_EXCEPTION_PROLOG(0x2e0, BOOKE_INTERRUPT_GUEST_DBELL_CRIT, | 888 | CRIT_EXCEPTION_PROLOG(0x2e0, BOOKE_INTERRUPT_GUEST_DBELL_CRIT, |
889 | PROLOG_ADDITION_NONE) | 889 | PROLOG_ADDITION_NONE) |
890 | EXCEPTION_COMMON_CRIT(0x2e0) | 890 | EXCEPTION_COMMON_CRIT(0x2e0) |
891 | bl .save_nvgprs | 891 | bl save_nvgprs |
892 | bl special_reg_save | 892 | bl special_reg_save |
893 | CHECK_NAPPING(); | 893 | CHECK_NAPPING(); |
894 | addi r3,r1,STACK_FRAME_OVERHEAD | 894 | addi r3,r1,STACK_FRAME_OVERHEAD |
895 | bl .unknown_exception | 895 | bl unknown_exception |
896 | b ret_from_crit_except | 896 | b ret_from_crit_except |
897 | 897 | ||
898 | /* Hypervisor call */ | 898 | /* Hypervisor call */ |
@@ -901,10 +901,10 @@ kernel_dbg_exc: | |||
901 | PROLOG_ADDITION_NONE) | 901 | PROLOG_ADDITION_NONE) |
902 | EXCEPTION_COMMON(0x310) | 902 | EXCEPTION_COMMON(0x310) |
903 | addi r3,r1,STACK_FRAME_OVERHEAD | 903 | addi r3,r1,STACK_FRAME_OVERHEAD |
904 | bl .save_nvgprs | 904 | bl save_nvgprs |
905 | INTS_RESTORE_HARD | 905 | INTS_RESTORE_HARD |
906 | bl .unknown_exception | 906 | bl unknown_exception |
907 | b .ret_from_except | 907 | b ret_from_except |
908 | 908 | ||
909 | /* Embedded Hypervisor priviledged */ | 909 | /* Embedded Hypervisor priviledged */ |
910 | START_EXCEPTION(ehpriv); | 910 | START_EXCEPTION(ehpriv); |
@@ -912,10 +912,10 @@ kernel_dbg_exc: | |||
912 | PROLOG_ADDITION_NONE) | 912 | PROLOG_ADDITION_NONE) |
913 | EXCEPTION_COMMON(0x320) | 913 | EXCEPTION_COMMON(0x320) |
914 | addi r3,r1,STACK_FRAME_OVERHEAD | 914 | addi r3,r1,STACK_FRAME_OVERHEAD |
915 | bl .save_nvgprs | 915 | bl save_nvgprs |
916 | INTS_RESTORE_HARD | 916 | INTS_RESTORE_HARD |
917 | bl .unknown_exception | 917 | bl unknown_exception |
918 | b .ret_from_except | 918 | b ret_from_except |
919 | 919 | ||
920 | /* LRAT Error interrupt */ | 920 | /* LRAT Error interrupt */ |
921 | START_EXCEPTION(lrat_error); | 921 | START_EXCEPTION(lrat_error); |
@@ -1014,16 +1014,16 @@ storage_fault_common: | |||
1014 | mr r5,r15 | 1014 | mr r5,r15 |
1015 | ld r14,PACA_EXGEN+EX_R14(r13) | 1015 | ld r14,PACA_EXGEN+EX_R14(r13) |
1016 | ld r15,PACA_EXGEN+EX_R15(r13) | 1016 | ld r15,PACA_EXGEN+EX_R15(r13) |
1017 | bl .do_page_fault | 1017 | bl do_page_fault |
1018 | cmpdi r3,0 | 1018 | cmpdi r3,0 |
1019 | bne- 1f | 1019 | bne- 1f |
1020 | b .ret_from_except_lite | 1020 | b ret_from_except_lite |
1021 | 1: bl .save_nvgprs | 1021 | 1: bl save_nvgprs |
1022 | mr r5,r3 | 1022 | mr r5,r3 |
1023 | addi r3,r1,STACK_FRAME_OVERHEAD | 1023 | addi r3,r1,STACK_FRAME_OVERHEAD |
1024 | ld r4,_DAR(r1) | 1024 | ld r4,_DAR(r1) |
1025 | bl .bad_page_fault | 1025 | bl bad_page_fault |
1026 | b .ret_from_except | 1026 | b ret_from_except |
1027 | 1027 | ||
1028 | /* | 1028 | /* |
1029 | * Alignment exception doesn't fit entirely in the 0x100 bytes so it | 1029 | * Alignment exception doesn't fit entirely in the 0x100 bytes so it |
@@ -1035,10 +1035,10 @@ alignment_more: | |||
1035 | addi r3,r1,STACK_FRAME_OVERHEAD | 1035 | addi r3,r1,STACK_FRAME_OVERHEAD |
1036 | ld r14,PACA_EXGEN+EX_R14(r13) | 1036 | ld r14,PACA_EXGEN+EX_R14(r13) |
1037 | ld r15,PACA_EXGEN+EX_R15(r13) | 1037 | ld r15,PACA_EXGEN+EX_R15(r13) |
1038 | bl .save_nvgprs | 1038 | bl save_nvgprs |
1039 | INTS_RESTORE_HARD | 1039 | INTS_RESTORE_HARD |
1040 | bl .alignment_exception | 1040 | bl alignment_exception |
1041 | b .ret_from_except | 1041 | b ret_from_except |
1042 | 1042 | ||
1043 | /* | 1043 | /* |
1044 | * We branch here from entry_64.S for the last stage of the exception | 1044 | * We branch here from entry_64.S for the last stage of the exception |
@@ -1172,7 +1172,7 @@ bad_stack_book3e: | |||
1172 | std r12,0(r11) | 1172 | std r12,0(r11) |
1173 | ld r2,PACATOC(r13) | 1173 | ld r2,PACATOC(r13) |
1174 | 1: addi r3,r1,STACK_FRAME_OVERHEAD | 1174 | 1: addi r3,r1,STACK_FRAME_OVERHEAD |
1175 | bl .kernel_bad_stack | 1175 | bl kernel_bad_stack |
1176 | b 1b | 1176 | b 1b |
1177 | 1177 | ||
1178 | /* | 1178 | /* |
@@ -1521,13 +1521,13 @@ _GLOBAL(start_initialization_book3e) | |||
1521 | * and always use AS 0, so we just set it up to match our link | 1521 | * and always use AS 0, so we just set it up to match our link |
1522 | * address and never use 0 based addresses. | 1522 | * address and never use 0 based addresses. |
1523 | */ | 1523 | */ |
1524 | bl .initial_tlb_book3e | 1524 | bl initial_tlb_book3e |
1525 | 1525 | ||
1526 | /* Init global core bits */ | 1526 | /* Init global core bits */ |
1527 | bl .init_core_book3e | 1527 | bl init_core_book3e |
1528 | 1528 | ||
1529 | /* Init per-thread bits */ | 1529 | /* Init per-thread bits */ |
1530 | bl .init_thread_book3e | 1530 | bl init_thread_book3e |
1531 | 1531 | ||
1532 | /* Return to common init code */ | 1532 | /* Return to common init code */ |
1533 | tovirt(r28,r28) | 1533 | tovirt(r28,r28) |
@@ -1548,7 +1548,7 @@ _GLOBAL(start_initialization_book3e) | |||
1548 | */ | 1548 | */ |
1549 | _GLOBAL(book3e_secondary_core_init_tlb_set) | 1549 | _GLOBAL(book3e_secondary_core_init_tlb_set) |
1550 | li r4,1 | 1550 | li r4,1 |
1551 | b .generic_secondary_smp_init | 1551 | b generic_secondary_smp_init |
1552 | 1552 | ||
1553 | _GLOBAL(book3e_secondary_core_init) | 1553 | _GLOBAL(book3e_secondary_core_init) |
1554 | mflr r28 | 1554 | mflr r28 |
@@ -1558,18 +1558,18 @@ _GLOBAL(book3e_secondary_core_init) | |||
1558 | bne 2f | 1558 | bne 2f |
1559 | 1559 | ||
1560 | /* Setup TLB for this core */ | 1560 | /* Setup TLB for this core */ |
1561 | bl .initial_tlb_book3e | 1561 | bl initial_tlb_book3e |
1562 | 1562 | ||
1563 | /* We can return from the above running at a different | 1563 | /* We can return from the above running at a different |
1564 | * address, so recalculate r2 (TOC) | 1564 | * address, so recalculate r2 (TOC) |
1565 | */ | 1565 | */ |
1566 | bl .relative_toc | 1566 | bl relative_toc |
1567 | 1567 | ||
1568 | /* Init global core bits */ | 1568 | /* Init global core bits */ |
1569 | 2: bl .init_core_book3e | 1569 | 2: bl init_core_book3e |
1570 | 1570 | ||
1571 | /* Init per-thread bits */ | 1571 | /* Init per-thread bits */ |
1572 | 3: bl .init_thread_book3e | 1572 | 3: bl init_thread_book3e |
1573 | 1573 | ||
1574 | /* Return to common init code at proper virtual address. | 1574 | /* Return to common init code at proper virtual address. |
1575 | * | 1575 | * |