diff options
Diffstat (limited to 'arch/powerpc/kernel/head_fsl_booke.S')
-rw-r--r-- | arch/powerpc/kernel/head_fsl_booke.S | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index 1f4434a38608..0f59863c3ade 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S | |||
@@ -192,7 +192,7 @@ _ENTRY(__early_start) | |||
192 | li r0,0 | 192 | li r0,0 |
193 | stwu r0,THREAD_SIZE-STACK_FRAME_OVERHEAD(r1) | 193 | stwu r0,THREAD_SIZE-STACK_FRAME_OVERHEAD(r1) |
194 | 194 | ||
195 | rlwinm r22,r1,0,0,31-THREAD_SHIFT /* current thread_info */ | 195 | CURRENT_THREAD_INFO(r22, r1) |
196 | stw r24, TI_CPU(r22) | 196 | stw r24, TI_CPU(r22) |
197 | 197 | ||
198 | bl early_init | 198 | bl early_init |
@@ -556,8 +556,10 @@ END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV) | |||
556 | /* SPE Unavailable */ | 556 | /* SPE Unavailable */ |
557 | START_EXCEPTION(SPEUnavailable) | 557 | START_EXCEPTION(SPEUnavailable) |
558 | NORMAL_EXCEPTION_PROLOG(SPE_UNAVAIL) | 558 | NORMAL_EXCEPTION_PROLOG(SPE_UNAVAIL) |
559 | bne load_up_spe | 559 | beq 1f |
560 | addi r3,r1,STACK_FRAME_OVERHEAD | 560 | bl load_up_spe |
561 | b fast_exception_return | ||
562 | 1: addi r3,r1,STACK_FRAME_OVERHEAD | ||
561 | EXC_XFER_EE_LITE(0x2010, KernelSPE) | 563 | EXC_XFER_EE_LITE(0x2010, KernelSPE) |
562 | #else | 564 | #else |
563 | EXCEPTION(0x2020, SPE_UNAVAIL, SPEUnavailable, \ | 565 | EXCEPTION(0x2020, SPE_UNAVAIL, SPEUnavailable, \ |
@@ -778,7 +780,7 @@ tlb_write_entry: | |||
778 | /* Note that the SPE support is closely modeled after the AltiVec | 780 | /* Note that the SPE support is closely modeled after the AltiVec |
779 | * support. Changes to one are likely to be applicable to the | 781 | * support. Changes to one are likely to be applicable to the |
780 | * other! */ | 782 | * other! */ |
781 | load_up_spe: | 783 | _GLOBAL(load_up_spe) |
782 | /* | 784 | /* |
783 | * Disable SPE for the task which had SPE previously, | 785 | * Disable SPE for the task which had SPE previously, |
784 | * and save its SPE registers in its thread_struct. | 786 | * and save its SPE registers in its thread_struct. |
@@ -826,20 +828,7 @@ load_up_spe: | |||
826 | subi r4,r5,THREAD | 828 | subi r4,r5,THREAD |
827 | stw r4,last_task_used_spe@l(r3) | 829 | stw r4,last_task_used_spe@l(r3) |
828 | #endif /* !CONFIG_SMP */ | 830 | #endif /* !CONFIG_SMP */ |
829 | /* restore registers and return */ | 831 | blr |
830 | 2: REST_4GPRS(3, r11) | ||
831 | lwz r10,_CCR(r11) | ||
832 | REST_GPR(1, r11) | ||
833 | mtcr r10 | ||
834 | lwz r10,_LINK(r11) | ||
835 | mtlr r10 | ||
836 | REST_GPR(10, r11) | ||
837 | mtspr SPRN_SRR1,r9 | ||
838 | mtspr SPRN_SRR0,r12 | ||
839 | REST_GPR(9, r11) | ||
840 | REST_GPR(12, r11) | ||
841 | lwz r11,GPR11(r11) | ||
842 | rfi | ||
843 | 832 | ||
844 | /* | 833 | /* |
845 | * SPE unavailable trap from kernel - print a message, but let | 834 | * SPE unavailable trap from kernel - print a message, but let |