aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/exceptions-64e.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64e.S')
-rw-r--r--arch/powerpc/kernel/exceptions-64e.S128
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
6301: INTS_DISABLE 6301: 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
6491: 6491:
650END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) 650END_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
668BEGIN_FTR_SECTION 668BEGIN_FTR_SECTION
669 bl .altivec_assist_exception 669 bl altivec_assist_exception
670END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) 670END_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
781kernel_dbg_exc: 781kernel_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
10211: bl .save_nvgprs 10211: 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)
11741: addi r3,r1,STACK_FRAME_OVERHEAD 11741: 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 */
15692: bl .init_core_book3e 15692: bl init_core_book3e
1570 1570
1571 /* Init per-thread bits */ 1571 /* Init per-thread bits */
15723: bl .init_thread_book3e 15723: 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 *