diff options
author | Paul Burton <paul.burton@imgtec.com> | 2014-04-14 11:16:41 -0400 |
---|---|---|
committer | Paul Burton <paul.burton@imgtec.com> | 2014-05-28 11:20:34 -0400 |
commit | da9f970fdd55a018ab97ec2d25653756407bdaaf (patch) | |
tree | 5f2cfee935680a9c819b33d1514620c152674a7f /arch | |
parent | 0155a06529d4c8425573596720829b6c578c05f2 (diff) |
MIPS: cpuidle wait instruction state
Defines a macro intended to allow trivial use of the regular MIPS wait
instruction from cpuidle drivers, which may simply invoke the macro
within their array of states.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/include/asm/idle.h | 14 | ||||
-rw-r--r-- | arch/mips/kernel/idle.c | 11 |
2 files changed, 25 insertions, 0 deletions
diff --git a/arch/mips/include/asm/idle.h b/arch/mips/include/asm/idle.h index d192158886b1..d9f932de80e9 100644 --- a/arch/mips/include/asm/idle.h +++ b/arch/mips/include/asm/idle.h | |||
@@ -1,6 +1,7 @@ | |||
1 | #ifndef __ASM_IDLE_H | 1 | #ifndef __ASM_IDLE_H |
2 | #define __ASM_IDLE_H | 2 | #define __ASM_IDLE_H |
3 | 3 | ||
4 | #include <linux/cpuidle.h> | ||
4 | #include <linux/linkage.h> | 5 | #include <linux/linkage.h> |
5 | 6 | ||
6 | extern void (*cpu_wait)(void); | 7 | extern void (*cpu_wait)(void); |
@@ -20,4 +21,17 @@ static inline int address_is_in_r4k_wait_irqoff(unsigned long addr) | |||
20 | addr < (unsigned long)__pastwait; | 21 | addr < (unsigned long)__pastwait; |
21 | } | 22 | } |
22 | 23 | ||
24 | extern int mips_cpuidle_wait_enter(struct cpuidle_device *dev, | ||
25 | struct cpuidle_driver *drv, int index); | ||
26 | |||
27 | #define MIPS_CPUIDLE_WAIT_STATE {\ | ||
28 | .enter = mips_cpuidle_wait_enter,\ | ||
29 | .exit_latency = 1,\ | ||
30 | .target_residency = 1,\ | ||
31 | .power_usage = UINT_MAX,\ | ||
32 | .flags = CPUIDLE_FLAG_TIME_VALID,\ | ||
33 | .name = "wait",\ | ||
34 | .desc = "MIPS wait",\ | ||
35 | } | ||
36 | |||
23 | #endif /* __ASM_IDLE_H */ | 37 | #endif /* __ASM_IDLE_H */ |
diff --git a/arch/mips/kernel/idle.c b/arch/mips/kernel/idle.c index 837ff27950bc..2879e2ed5192 100644 --- a/arch/mips/kernel/idle.c +++ b/arch/mips/kernel/idle.c | |||
@@ -250,3 +250,14 @@ void arch_cpu_idle(void) | |||
250 | else | 250 | else |
251 | local_irq_enable(); | 251 | local_irq_enable(); |
252 | } | 252 | } |
253 | |||
254 | #ifdef CONFIG_CPU_IDLE | ||
255 | |||
256 | int mips_cpuidle_wait_enter(struct cpuidle_device *dev, | ||
257 | struct cpuidle_driver *drv, int index) | ||
258 | { | ||
259 | arch_cpu_idle(); | ||
260 | return index; | ||
261 | } | ||
262 | |||
263 | #endif | ||