diff options
Diffstat (limited to 'arch/powerpc/kernel/idle_power7.S')
-rw-r--r-- | arch/powerpc/kernel/idle_power7.S | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/idle_power7.S b/arch/powerpc/kernel/idle_power7.S index fcdff198da4b..0cdc9a392839 100644 --- a/arch/powerpc/kernel/idle_power7.S +++ b/arch/powerpc/kernel/idle_power7.S | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * This file contains the power_save function for 970-family CPUs. | 2 | * This file contains the power_save function for Power7 CPUs. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or | 4 | * This program is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU General Public License | 5 | * modify it under the terms of the GNU General Public License |
@@ -15,6 +15,7 @@ | |||
15 | #include <asm/ppc_asm.h> | 15 | #include <asm/ppc_asm.h> |
16 | #include <asm/asm-offsets.h> | 16 | #include <asm/asm-offsets.h> |
17 | #include <asm/ppc-opcode.h> | 17 | #include <asm/ppc-opcode.h> |
18 | #include <asm/hw_irq.h> | ||
18 | 19 | ||
19 | #undef DEBUG | 20 | #undef DEBUG |
20 | 21 | ||
@@ -51,9 +52,25 @@ _GLOBAL(power7_idle) | |||
51 | rldicl r9,r9,48,1 | 52 | rldicl r9,r9,48,1 |
52 | rotldi r9,r9,16 | 53 | rotldi r9,r9,16 |
53 | mtmsrd r9,1 /* hard-disable interrupts */ | 54 | mtmsrd r9,1 /* hard-disable interrupts */ |
55 | |||
56 | /* Check if something happened while soft-disabled */ | ||
57 | lbz r0,PACAIRQHAPPENED(r13) | ||
58 | cmpwi cr0,r0,0 | ||
59 | beq 1f | ||
60 | addi r1,r1,INT_FRAME_SIZE | ||
61 | ld r0,16(r1) | ||
62 | mtlr r0 | ||
63 | blr | ||
64 | |||
65 | 1: /* We mark irqs hard disabled as this is the state we'll | ||
66 | * be in when returning and we need to tell arch_local_irq_restore() | ||
67 | * about it | ||
68 | */ | ||
69 | li r0,PACA_IRQ_HARD_DIS | ||
70 | stb r0,PACAIRQHAPPENED(r13) | ||
71 | |||
72 | /* We haven't lost state ... yet */ | ||
54 | li r0,0 | 73 | li r0,0 |
55 | stb r0,PACASOFTIRQEN(r13) /* we'll hard-enable shortly */ | ||
56 | stb r0,PACAHARDIRQEN(r13) | ||
57 | stb r0,PACA_NAPSTATELOST(r13) | 74 | stb r0,PACA_NAPSTATELOST(r13) |
58 | 75 | ||
59 | /* Continue saving state */ | 76 | /* Continue saving state */ |