Commit ea1e847c authored by Becky Bruce's avatar Becky Bruce Committed by Paul Mackerras

[PATCH] ppc: Fix powersave code on arch/ppc

Fix asm_offsets.c and entry.S to work with the new power save code.
Changes in arch/powerpc needed to exist in arch/ppc as well since the
idle code is shared by both ppc and powerpc..
Signed-off-by: default avatarBecky Bruce <becky.bruce@freescale.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 23b2527d
...@@ -134,6 +134,7 @@ main(void) ...@@ -134,6 +134,7 @@ main(void)
DEFINE(TI_TASK, offsetof(struct thread_info, task)); DEFINE(TI_TASK, offsetof(struct thread_info, task));
DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain));
DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
DEFINE(TI_LOCAL_FLAGS, offsetof(struct thread_info, flags));
DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); DEFINE(TI_CPU, offsetof(struct thread_info, cpu));
DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count));
......
...@@ -128,29 +128,26 @@ transfer_to_handler: ...@@ -128,29 +128,26 @@ transfer_to_handler:
stw r12,4(r11) stw r12,4(r11)
#endif #endif
b 3f b 3f
2: /* if from kernel, check interrupted DOZE/NAP mode and 2: /* if from kernel, check interrupted DOZE/NAP mode and
* check for stack overflow * check for stack overflow
*/ */
lwz r9,THREAD_INFO-THREAD(r12)
cmplw r1,r9 /* if r1 <= current->thread_info */
ble- stack_ovf /* then the kernel stack overflowed */
5:
#ifdef CONFIG_6xx #ifdef CONFIG_6xx
mfspr r11,SPRN_HID0 tophys(r9,r9) /* check local flags */
mtcr r11 lwz r12,TI_LOCAL_FLAGS(r9)
BEGIN_FTR_SECTION mtcrf 0x01,r12
bt- 8,4f /* Check DOZE */ bt- 31-TLF_NAPPING,4f
END_FTR_SECTION_IFSET(CPU_FTR_CAN_DOZE)
BEGIN_FTR_SECTION
bt- 9,4f /* Check NAP */
END_FTR_SECTION_IFSET(CPU_FTR_CAN_NAP)
#endif /* CONFIG_6xx */ #endif /* CONFIG_6xx */
.globl transfer_to_handler_cont .globl transfer_to_handler_cont
transfer_to_handler_cont: transfer_to_handler_cont:
lwz r11,THREAD_INFO-THREAD(r12)
cmplw r1,r11 /* if r1 <= current->thread_info */
ble- stack_ovf /* then the kernel stack overflowed */
3: 3:
mflr r9 mflr r9
lwz r11,0(r9) /* virtual address of handler */ lwz r11,0(r9) /* virtual address of handler */
lwz r9,4(r9) /* where to go when done */ lwz r9,4(r9) /* where to go when done */
FIX_SRR1(r10,r12)
mtspr SPRN_SRR0,r11 mtspr SPRN_SRR0,r11
mtspr SPRN_SRR1,r10 mtspr SPRN_SRR1,r10
mtlr r9 mtlr r9
...@@ -158,7 +155,9 @@ transfer_to_handler_cont: ...@@ -158,7 +155,9 @@ transfer_to_handler_cont:
RFI /* jump to handler, enable MMU */ RFI /* jump to handler, enable MMU */
#ifdef CONFIG_6xx #ifdef CONFIG_6xx
4: b power_save_6xx_restore 4: rlwinm r12,r12,0,~_TLF_NAPPING
stw r12,TI_LOCAL_FLAGS(r9)
b power_save_6xx_restore
#endif #endif
/* /*
...@@ -167,10 +166,10 @@ transfer_to_handler_cont: ...@@ -167,10 +166,10 @@ transfer_to_handler_cont:
*/ */
stack_ovf: stack_ovf:
/* sometimes we use a statically-allocated stack, which is OK. */ /* sometimes we use a statically-allocated stack, which is OK. */
lis r11,_end@h lis r12,_end@h
ori r11,r11,_end@l ori r12,r12,_end@l
cmplw r1,r11 cmplw r1,r12
ble 3b /* r1 <= &_end is OK */ ble 5b /* r1 <= &_end is OK */
SAVE_NVGPRS(r11) SAVE_NVGPRS(r11)
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
lis r1,init_thread_union@ha lis r1,init_thread_union@ha
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment