diff options
Diffstat (limited to 'arch/powerpc/kernel/idle_power7.S')
| -rw-r--r-- | arch/powerpc/kernel/idle_power7.S | 13 |
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) |
