aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/idle_power7.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/idle_power7.S')
-rw-r--r--arch/powerpc/kernel/idle_power7.S13
1 files changed, 11 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/idle_power7.S b/arch/powerpc/kernel/idle_power7.S
index c3ab86975614..2480256272d4 100644
--- a/arch/powerpc/kernel/idle_power7.S
+++ b/arch/powerpc/kernel/idle_power7.S
@@ -39,6 +39,10 @@
39 * Pass requested state in r3: 39 * Pass requested state in r3:
40 * 0 - nap 40 * 0 - nap
41 * 1 - sleep 41 * 1 - sleep
42 *
43 * To check IRQ_HAPPENED in r4
44 * 0 - don't check
45 * 1 - check
42 */ 46 */
43_GLOBAL(power7_powersave_common) 47_GLOBAL(power7_powersave_common)
44 /* Use r3 to pass state nap/sleep/winkle */ 48 /* Use r3 to pass state nap/sleep/winkle */
@@ -58,7 +62,7 @@ _GLOBAL(power7_powersave_common)
58 /* Make sure FPU, VSX etc... are flushed as we may lose 62 /* Make sure FPU, VSX etc... are flushed as we may lose
59 * state when going to nap mode 63 * state when going to nap mode
60 */ 64 */
61 bl .discard_lazy_cpu_state 65 bl discard_lazy_cpu_state
62#endif /* CONFIG_SMP */ 66#endif /* CONFIG_SMP */
63 67
64 /* Hard disable interrupts */ 68 /* Hard disable interrupts */
@@ -71,6 +75,8 @@ _GLOBAL(power7_powersave_common)
71 lbz r0,PACAIRQHAPPENED(r13) 75 lbz r0,PACAIRQHAPPENED(r13)
72 cmpwi cr0,r0,0 76 cmpwi cr0,r0,0
73 beq 1f 77 beq 1f
78 cmpwi cr0,r4,0
79 beq 1f
74 addi r1,r1,INT_FRAME_SIZE 80 addi r1,r1,INT_FRAME_SIZE
75 ld r0,16(r1) 81 ld r0,16(r1)
76 mtlr r0 82 mtlr r0
@@ -114,15 +120,18 @@ _GLOBAL(power7_idle)
114 lwz r4,ADDROFF(powersave_nap)(r3) 120 lwz r4,ADDROFF(powersave_nap)(r3)
115 cmpwi 0,r4,0 121 cmpwi 0,r4,0
116 beqlr 122 beqlr
123 li r3, 1
117 /* fall through */ 124 /* fall through */
118 125
119_GLOBAL(power7_nap) 126_GLOBAL(power7_nap)
127 mr r4,r3
120 li r3,0 128 li r3,0
121 b power7_powersave_common 129 b power7_powersave_common
122 /* No return */ 130 /* No return */
123 131
124_GLOBAL(power7_sleep) 132_GLOBAL(power7_sleep)
125 li r3,1 133 li r3,1
134 li r4,0
126 b power7_powersave_common 135 b power7_powersave_common
127 /* No return */ 136 /* No return */
128 137
@@ -168,7 +177,7 @@ _GLOBAL(power7_wakeup_loss)
168_GLOBAL(power7_wakeup_noloss) 177_GLOBAL(power7_wakeup_noloss)
169 lbz r0,PACA_NAPSTATELOST(r13) 178 lbz r0,PACA_NAPSTATELOST(r13)
170 cmpwi r0,0 179 cmpwi r0,0
171 bne .power7_wakeup_loss 180 bne power7_wakeup_loss
172 ld r1,PACAR1(r13) 181 ld r1,PACAR1(r13)
173 ld r4,_MSR(r1) 182 ld r4,_MSR(r1)
174 ld r5,_NIP(r1) 183 ld r5,_NIP(r1)