diff options
Diffstat (limited to 'arch/ppc/kernel/entry.S')
-rw-r--r-- | arch/ppc/kernel/entry.S | 60 |
1 files changed, 6 insertions, 54 deletions
diff --git a/arch/ppc/kernel/entry.S b/arch/ppc/kernel/entry.S index 3a2815978488..5891ecbdc703 100644 --- a/arch/ppc/kernel/entry.S +++ b/arch/ppc/kernel/entry.S | |||
@@ -135,10 +135,10 @@ transfer_to_handler: | |||
135 | mfspr r11,SPRN_HID0 | 135 | mfspr r11,SPRN_HID0 |
136 | mtcr r11 | 136 | mtcr r11 |
137 | BEGIN_FTR_SECTION | 137 | BEGIN_FTR_SECTION |
138 | bt- 8,power_save_6xx_restore /* Check DOZE */ | 138 | bt- 8,4f /* Check DOZE */ |
139 | END_FTR_SECTION_IFSET(CPU_FTR_CAN_DOZE) | 139 | END_FTR_SECTION_IFSET(CPU_FTR_CAN_DOZE) |
140 | BEGIN_FTR_SECTION | 140 | BEGIN_FTR_SECTION |
141 | bt- 9,power_save_6xx_restore /* Check NAP */ | 141 | bt- 9,4f /* Check NAP */ |
142 | END_FTR_SECTION_IFSET(CPU_FTR_CAN_NAP) | 142 | END_FTR_SECTION_IFSET(CPU_FTR_CAN_NAP) |
143 | #endif /* CONFIG_6xx */ | 143 | #endif /* CONFIG_6xx */ |
144 | .globl transfer_to_handler_cont | 144 | .globl transfer_to_handler_cont |
@@ -157,6 +157,10 @@ transfer_to_handler_cont: | |||
157 | SYNC | 157 | SYNC |
158 | RFI /* jump to handler, enable MMU */ | 158 | RFI /* jump to handler, enable MMU */ |
159 | 159 | ||
160 | #ifdef CONFIG_6xx | ||
161 | 4: b power_save_6xx_restore | ||
162 | #endif | ||
163 | |||
160 | /* | 164 | /* |
161 | * On kernel stack overflow, load up an initial stack pointer | 165 | * On kernel stack overflow, load up an initial stack pointer |
162 | * and call StackOverflow(regs), which should not return. | 166 | * and call StackOverflow(regs), which should not return. |
@@ -926,55 +930,3 @@ END_FTR_SECTION_IFSET(CPU_FTR_601) | |||
926 | b 4b | 930 | b 4b |
927 | 931 | ||
928 | .comm ee_restarts,4 | 932 | .comm ee_restarts,4 |
929 | |||
930 | /* | ||
931 | * PROM code for specific machines follows. Put it | ||
932 | * here so it's easy to add arch-specific sections later. | ||
933 | * -- Cort | ||
934 | */ | ||
935 | #ifdef CONFIG_PPC_OF | ||
936 | /* | ||
937 | * On CHRP, the Run-Time Abstraction Services (RTAS) have to be | ||
938 | * called with the MMU off. | ||
939 | */ | ||
940 | _GLOBAL(enter_rtas) | ||
941 | stwu r1,-INT_FRAME_SIZE(r1) | ||
942 | mflr r0 | ||
943 | stw r0,INT_FRAME_SIZE+4(r1) | ||
944 | lis r4,rtas_data@ha | ||
945 | lwz r4,rtas_data@l(r4) | ||
946 | lis r6,1f@ha /* physical return address for rtas */ | ||
947 | addi r6,r6,1f@l | ||
948 | tophys(r6,r6) | ||
949 | tophys(r7,r1) | ||
950 | lis r8,rtas_entry@ha | ||
951 | lwz r8,rtas_entry@l(r8) | ||
952 | mfmsr r9 | ||
953 | stw r9,8(r1) | ||
954 | LOAD_MSR_KERNEL(r0,MSR_KERNEL) | ||
955 | SYNC /* disable interrupts so SRR0/1 */ | ||
956 | MTMSRD(r0) /* don't get trashed */ | ||
957 | li r9,MSR_KERNEL & ~(MSR_IR|MSR_DR) | ||
958 | mtlr r6 | ||
959 | CLR_TOP32(r7) | ||
960 | mtspr SPRN_SPRG2,r7 | ||
961 | mtspr SPRN_SRR0,r8 | ||
962 | mtspr SPRN_SRR1,r9 | ||
963 | RFI | ||
964 | 1: tophys(r9,r1) | ||
965 | lwz r8,INT_FRAME_SIZE+4(r9) /* get return address */ | ||
966 | lwz r9,8(r9) /* original msr value */ | ||
967 | FIX_SRR1(r9,r0) | ||
968 | addi r1,r1,INT_FRAME_SIZE | ||
969 | li r0,0 | ||
970 | mtspr SPRN_SPRG2,r0 | ||
971 | mtspr SPRN_SRR0,r8 | ||
972 | mtspr SPRN_SRR1,r9 | ||
973 | RFI /* return to caller */ | ||
974 | |||
975 | .globl machine_check_in_rtas | ||
976 | machine_check_in_rtas: | ||
977 | twi 31,0,0 | ||
978 | /* XXX load up BATs and panic */ | ||
979 | |||
980 | #endif /* CONFIG_PPC_OF */ | ||