MIPS: cpuidle wait instruction state
authorPaul Burton <paul.burton@imgtec.com>
Mon, 14 Apr 2014 15:16:41 +0000 (16:16 +0100)
committerPaul Burton <paul.burton@imgtec.com>
Wed, 28 May 2014 15:20:34 +0000 (16:20 +0100)
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>
arch/mips/include/asm/idle.h
arch/mips/kernel/idle.c

index d192158886b1e5b5e56b71e895a38c2bec6e2497..d9f932de80e926f3701e4a63166e48f37ac89f8f 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __ASM_IDLE_H
 #define __ASM_IDLE_H
 
+#include <linux/cpuidle.h>
 #include <linux/linkage.h>
 
 extern void (*cpu_wait)(void);
@@ -20,4 +21,17 @@ static inline int address_is_in_r4k_wait_irqoff(unsigned long addr)
               addr < (unsigned long)__pastwait;
 }
 
+extern int mips_cpuidle_wait_enter(struct cpuidle_device *dev,
+                                  struct cpuidle_driver *drv, int index);
+
+#define MIPS_CPUIDLE_WAIT_STATE {\
+       .enter                  = mips_cpuidle_wait_enter,\
+       .exit_latency           = 1,\
+       .target_residency       = 1,\
+       .power_usage            = UINT_MAX,\
+       .flags                  = CPUIDLE_FLAG_TIME_VALID,\
+       .name                   = "wait",\
+       .desc                   = "MIPS wait",\
+}
+
 #endif /* __ASM_IDLE_H  */
index 837ff27950bcb7018f8130ab5700a7c3522fe7ab..2879e2ed51923d6b776b8289d16a3e7e87691845 100644 (file)
@@ -250,3 +250,14 @@ void arch_cpu_idle(void)
        else
                local_irq_enable();
 }
+
+#ifdef CONFIG_CPU_IDLE
+
+int mips_cpuidle_wait_enter(struct cpuidle_device *dev,
+                           struct cpuidle_driver *drv, int index)
+{
+       arch_cpu_idle();
+       return index;
+}
+
+#endif