diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2013-03-21 17:49:38 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2013-04-08 11:39:24 -0400 |
commit | f7b861b7a6d9d1838cbbb5f4053e61578b86d134 (patch) | |
tree | 07a20a48c6577f92ad702e93ccb308a6d12632db /arch | |
parent | a123322d8afcfb5f86e0cc0062024084658aeeb2 (diff) |
arm: Use generic idle loop
Use the generic idle loop and replace enable/disable_hlt with the
respective core functions.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Reviewed-by: Cc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Cc: Magnus Damm <magnus.damm@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Tested-by: Kevin Hilman <khilman@linaro.org> # OMAP
Link: http://lkml.kernel.org/r/20130321215233.826238797@linutronix.de
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/Kconfig | 2 | ||||
-rw-r--r-- | arch/arm/include/asm/system_misc.h | 3 | ||||
-rw-r--r-- | arch/arm/kernel/process.c | 96 | ||||
-rw-r--r-- | arch/arm/kernel/smp.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-gemini/idle.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-gemini/irq.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-ixp4xx/common.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap1/pm.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-omap2/pm.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/board-dt.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/common.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-shark/core.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-shmobile/suspend.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-w90x900/dev.c | 3 |
15 files changed, 57 insertions, 92 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 1cacda426a0e..128551fcc6dd 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -15,6 +15,8 @@ config ARM | |||
15 | select GENERIC_IRQ_SHOW | 15 | select GENERIC_IRQ_SHOW |
16 | select GENERIC_PCI_IOMAP | 16 | select GENERIC_PCI_IOMAP |
17 | select GENERIC_SMP_IDLE_THREAD | 17 | select GENERIC_SMP_IDLE_THREAD |
18 | select GENERIC_IDLE_LOOP | ||
19 | select GENERIC_IDLE_POLL_SETUP | ||
18 | select GENERIC_STRNCPY_FROM_USER | 20 | select GENERIC_STRNCPY_FROM_USER |
19 | select GENERIC_STRNLEN_USER | 21 | select GENERIC_STRNLEN_USER |
20 | select HARDIRQS_SW_RESEND | 22 | select HARDIRQS_SW_RESEND |
diff --git a/arch/arm/include/asm/system_misc.h b/arch/arm/include/asm/system_misc.h index 5a85f148b607..21a23e378bbe 100644 --- a/arch/arm/include/asm/system_misc.h +++ b/arch/arm/include/asm/system_misc.h | |||
@@ -21,9 +21,6 @@ extern void (*arm_pm_idle)(void); | |||
21 | 21 | ||
22 | extern unsigned int user_debug; | 22 | extern unsigned int user_debug; |
23 | 23 | ||
24 | extern void disable_hlt(void); | ||
25 | extern void enable_hlt(void); | ||
26 | |||
27 | #endif /* !__ASSEMBLY__ */ | 24 | #endif /* !__ASSEMBLY__ */ |
28 | 25 | ||
29 | #endif /* __ASM_ARM_SYSTEM_MISC_H */ | 26 | #endif /* __ASM_ARM_SYSTEM_MISC_H */ |
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 92884c86189d..c9a5e2ce8aa9 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -57,34 +57,6 @@ static const char *isa_modes[] = { | |||
57 | "ARM" , "Thumb" , "Jazelle", "ThumbEE" | 57 | "ARM" , "Thumb" , "Jazelle", "ThumbEE" |
58 | }; | 58 | }; |
59 | 59 | ||
60 | static volatile int hlt_counter; | ||
61 | |||
62 | void disable_hlt(void) | ||
63 | { | ||
64 | hlt_counter++; | ||
65 | } | ||
66 | |||
67 | void enable_hlt(void) | ||
68 | { | ||
69 | hlt_counter--; | ||
70 | BUG_ON(hlt_counter < 0); | ||
71 | } | ||
72 | |||
73 | static int __init nohlt_setup(char *__unused) | ||
74 | { | ||
75 | hlt_counter = 1; | ||
76 | return 1; | ||
77 | } | ||
78 | |||
79 | static int __init hlt_setup(char *__unused) | ||
80 | { | ||
81 | hlt_counter = 0; | ||
82 | return 1; | ||
83 | } | ||
84 | |||
85 | __setup("nohlt", nohlt_setup); | ||
86 | __setup("hlt", hlt_setup); | ||
87 | |||
88 | extern void call_with_stack(void (*fn)(void *), void *arg, void *sp); | 60 | extern void call_with_stack(void (*fn)(void *), void *arg, void *sp); |
89 | typedef void (*phys_reset_t)(unsigned long); | 61 | typedef void (*phys_reset_t)(unsigned long); |
90 | 62 | ||
@@ -168,54 +140,38 @@ static void default_idle(void) | |||
168 | local_irq_enable(); | 140 | local_irq_enable(); |
169 | } | 141 | } |
170 | 142 | ||
171 | /* | 143 | void arch_cpu_idle_prepare(void) |
172 | * The idle thread. | ||
173 | * We always respect 'hlt_counter' to prevent low power idle. | ||
174 | */ | ||
175 | void cpu_idle(void) | ||
176 | { | 144 | { |
177 | local_fiq_enable(); | 145 | local_fiq_enable(); |
146 | } | ||
178 | 147 | ||
179 | /* endless idle loop with no priority at all */ | 148 | void arch_cpu_idle_enter(void) |
180 | while (1) { | 149 | { |
181 | tick_nohz_idle_enter(); | 150 | ledtrig_cpu(CPU_LED_IDLE_START); |
182 | rcu_idle_enter(); | 151 | #ifdef CONFIG_PL310_ERRATA_769419 |
183 | ledtrig_cpu(CPU_LED_IDLE_START); | 152 | wmb(); |
184 | while (!need_resched()) { | ||
185 | #ifdef CONFIG_HOTPLUG_CPU | ||
186 | if (cpu_is_offline(smp_processor_id())) | ||
187 | cpu_die(); | ||
188 | #endif | 153 | #endif |
154 | } | ||
189 | 155 | ||
190 | /* | 156 | void arch_cpu_idle_exit(void) |
191 | * We need to disable interrupts here | 157 | { |
192 | * to ensure we don't miss a wakeup call. | 158 | ledtrig_cpu(CPU_LED_IDLE_END); |
193 | */ | 159 | } |
194 | local_irq_disable(); | 160 | |
195 | #ifdef CONFIG_PL310_ERRATA_769419 | 161 | #ifdef CONFIG_HOTPLUG_CPU |
196 | wmb(); | 162 | void arch_cpu_idle_dead(void) |
163 | { | ||
164 | cpu_die(); | ||
165 | } | ||
197 | #endif | 166 | #endif |
198 | if (hlt_counter) { | 167 | |
199 | local_irq_enable(); | 168 | /* |
200 | cpu_relax(); | 169 | * Called from the core idle loop. |
201 | } else if (!need_resched()) { | 170 | */ |
202 | stop_critical_timings(); | 171 | void arch_cpu_idle(void) |
203 | if (cpuidle_idle_call()) | 172 | { |
204 | default_idle(); | 173 | if (cpuidle_idle_call()) |
205 | start_critical_timings(); | 174 | default_idle(); |
206 | /* | ||
207 | * default_idle functions must always | ||
208 | * return with IRQs enabled. | ||
209 | */ | ||
210 | WARN_ON(irqs_disabled()); | ||
211 | } else | ||
212 | local_irq_enable(); | ||
213 | } | ||
214 | ledtrig_cpu(CPU_LED_IDLE_END); | ||
215 | rcu_idle_exit(); | ||
216 | tick_nohz_idle_exit(); | ||
217 | schedule_preempt_disabled(); | ||
218 | } | ||
219 | } | 175 | } |
220 | 176 | ||
221 | static char reboot_mode = 'h'; | 177 | static char reboot_mode = 'h'; |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 1f2ccccaf009..4619177bcfe6 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -336,7 +336,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
336 | /* | 336 | /* |
337 | * OK, it's off to the idle thread for us | 337 | * OK, it's off to the idle thread for us |
338 | */ | 338 | */ |
339 | cpu_idle(); | 339 | cpu_startup_entry(CPUHP_ONLINE); |
340 | } | 340 | } |
341 | 341 | ||
342 | void __init smp_cpus_done(unsigned int max_cpus) | 342 | void __init smp_cpus_done(unsigned int max_cpus) |
diff --git a/arch/arm/mach-gemini/idle.c b/arch/arm/mach-gemini/idle.c index 92bbd6bb600a..87dff4f5059e 100644 --- a/arch/arm/mach-gemini/idle.c +++ b/arch/arm/mach-gemini/idle.c | |||
@@ -13,9 +13,11 @@ static void gemini_idle(void) | |||
13 | * will never wakeup... Acctualy it is not very good to enable | 13 | * will never wakeup... Acctualy it is not very good to enable |
14 | * interrupts first since scheduler can miss a tick, but there is | 14 | * interrupts first since scheduler can miss a tick, but there is |
15 | * no other way around this. Platforms that needs it for power saving | 15 | * no other way around this. Platforms that needs it for power saving |
16 | * should call enable_hlt() in init code, since by default it is | 16 | * should enable it in init code, since by default it is |
17 | * disabled. | 17 | * disabled. |
18 | */ | 18 | */ |
19 | |||
20 | /* FIXME: Enabling interrupts here is racy! */ | ||
19 | local_irq_enable(); | 21 | local_irq_enable(); |
20 | cpu_do_idle(); | 22 | cpu_do_idle(); |
21 | } | 23 | } |
diff --git a/arch/arm/mach-gemini/irq.c b/arch/arm/mach-gemini/irq.c index 020852d3bdd8..6d8f6d1669ff 100644 --- a/arch/arm/mach-gemini/irq.c +++ b/arch/arm/mach-gemini/irq.c | |||
@@ -15,6 +15,8 @@ | |||
15 | #include <linux/stddef.h> | 15 | #include <linux/stddef.h> |
16 | #include <linux/list.h> | 16 | #include <linux/list.h> |
17 | #include <linux/sched.h> | 17 | #include <linux/sched.h> |
18 | #include <linux/cpu.h> | ||
19 | |||
18 | #include <asm/irq.h> | 20 | #include <asm/irq.h> |
19 | #include <asm/mach/irq.h> | 21 | #include <asm/mach/irq.h> |
20 | #include <asm/system_misc.h> | 22 | #include <asm/system_misc.h> |
@@ -77,7 +79,7 @@ void __init gemini_init_irq(void) | |||
77 | * Disable the idle handler by default since it is buggy | 79 | * Disable the idle handler by default since it is buggy |
78 | * For more info see arch/arm/mach-gemini/idle.c | 80 | * For more info see arch/arm/mach-gemini/idle.c |
79 | */ | 81 | */ |
80 | disable_hlt(); | 82 | cpu_idle_poll_ctrl(true); |
81 | 83 | ||
82 | request_resource(&iomem_resource, &irq_resource); | 84 | request_resource(&iomem_resource, &irq_resource); |
83 | 85 | ||
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 1dbeb7c99d58..6600cff6bd92 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/io.h> | 29 | #include <linux/io.h> |
30 | #include <linux/export.h> | 30 | #include <linux/export.h> |
31 | #include <linux/gpio.h> | 31 | #include <linux/gpio.h> |
32 | #include <linux/cpu.h> | ||
32 | 33 | ||
33 | #include <mach/udc.h> | 34 | #include <mach/udc.h> |
34 | #include <mach/hardware.h> | 35 | #include <mach/hardware.h> |
@@ -239,7 +240,7 @@ void __init ixp4xx_init_irq(void) | |||
239 | * ixp4xx does not implement the XScale PWRMODE register | 240 | * ixp4xx does not implement the XScale PWRMODE register |
240 | * so it must not call cpu_do_idle(). | 241 | * so it must not call cpu_do_idle(). |
241 | */ | 242 | */ |
242 | disable_hlt(); | 243 | cpu_idle_poll_ctrl(true); |
243 | 244 | ||
244 | /* Route all sources to IRQ instead of FIQ */ | 245 | /* Route all sources to IRQ instead of FIQ */ |
245 | *IXP4XX_ICLR = 0x0; | 246 | *IXP4XX_ICLR = 0x0; |
diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c index 7a7690ab6cb8..db37f49da5ac 100644 --- a/arch/arm/mach-omap1/pm.c +++ b/arch/arm/mach-omap1/pm.c | |||
@@ -43,6 +43,7 @@ | |||
43 | #include <linux/module.h> | 43 | #include <linux/module.h> |
44 | #include <linux/io.h> | 44 | #include <linux/io.h> |
45 | #include <linux/atomic.h> | 45 | #include <linux/atomic.h> |
46 | #include <linux/cpu.h> | ||
46 | 47 | ||
47 | #include <asm/fncpy.h> | 48 | #include <asm/fncpy.h> |
48 | #include <asm/system_misc.h> | 49 | #include <asm/system_misc.h> |
@@ -584,8 +585,7 @@ static void omap_pm_init_proc(void) | |||
584 | static int omap_pm_prepare(void) | 585 | static int omap_pm_prepare(void) |
585 | { | 586 | { |
586 | /* We cannot sleep in idle until we have resumed */ | 587 | /* We cannot sleep in idle until we have resumed */ |
587 | disable_hlt(); | 588 | cpu_idle_poll_ctrl(true); |
588 | |||
589 | return 0; | 589 | return 0; |
590 | } | 590 | } |
591 | 591 | ||
@@ -621,7 +621,7 @@ static int omap_pm_enter(suspend_state_t state) | |||
621 | 621 | ||
622 | static void omap_pm_finish(void) | 622 | static void omap_pm_finish(void) |
623 | { | 623 | { |
624 | enable_hlt(); | 624 | cpu_idle_poll_ctrl(false); |
625 | } | 625 | } |
626 | 626 | ||
627 | 627 | ||
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index a202a4785104..e512253601c8 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -138,6 +138,7 @@ | |||
138 | #include <linux/spinlock.h> | 138 | #include <linux/spinlock.h> |
139 | #include <linux/slab.h> | 139 | #include <linux/slab.h> |
140 | #include <linux/bootmem.h> | 140 | #include <linux/bootmem.h> |
141 | #include <linux/cpu.h> | ||
141 | 142 | ||
142 | #include <asm/system_misc.h> | 143 | #include <asm/system_misc.h> |
143 | 144 | ||
@@ -2157,7 +2158,7 @@ static int _enable(struct omap_hwmod *oh) | |||
2157 | if (soc_ops.enable_module) | 2158 | if (soc_ops.enable_module) |
2158 | soc_ops.enable_module(oh); | 2159 | soc_ops.enable_module(oh); |
2159 | if (oh->flags & HWMOD_BLOCK_WFI) | 2160 | if (oh->flags & HWMOD_BLOCK_WFI) |
2160 | disable_hlt(); | 2161 | cpu_idle_poll_ctrl(true); |
2161 | 2162 | ||
2162 | if (soc_ops.update_context_lost) | 2163 | if (soc_ops.update_context_lost) |
2163 | soc_ops.update_context_lost(oh); | 2164 | soc_ops.update_context_lost(oh); |
@@ -2221,7 +2222,7 @@ static int _idle(struct omap_hwmod *oh) | |||
2221 | _del_initiator_dep(oh, mpu_oh); | 2222 | _del_initiator_dep(oh, mpu_oh); |
2222 | 2223 | ||
2223 | if (oh->flags & HWMOD_BLOCK_WFI) | 2224 | if (oh->flags & HWMOD_BLOCK_WFI) |
2224 | enable_hlt(); | 2225 | cpu_idle_poll_ctrl(false); |
2225 | if (soc_ops.disable_module) | 2226 | if (soc_ops.disable_module) |
2226 | soc_ops.disable_module(oh); | 2227 | soc_ops.disable_module(oh); |
2227 | 2228 | ||
@@ -2331,7 +2332,7 @@ static int _shutdown(struct omap_hwmod *oh) | |||
2331 | _del_initiator_dep(oh, mpu_oh); | 2332 | _del_initiator_dep(oh, mpu_oh); |
2332 | /* XXX what about the other system initiators here? dma, dsp */ | 2333 | /* XXX what about the other system initiators here? dma, dsp */ |
2333 | if (oh->flags & HWMOD_BLOCK_WFI) | 2334 | if (oh->flags & HWMOD_BLOCK_WFI) |
2334 | enable_hlt(); | 2335 | cpu_idle_poll_ctrl(false); |
2335 | if (soc_ops.disable_module) | 2336 | if (soc_ops.disable_module) |
2336 | soc_ops.disable_module(oh); | 2337 | soc_ops.disable_module(oh); |
2337 | _disable_clocks(oh); | 2338 | _disable_clocks(oh); |
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 673a4c1d1d76..dec553349ae2 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c | |||
@@ -218,7 +218,7 @@ static int omap_pm_enter(suspend_state_t suspend_state) | |||
218 | 218 | ||
219 | static int omap_pm_begin(suspend_state_t state) | 219 | static int omap_pm_begin(suspend_state_t state) |
220 | { | 220 | { |
221 | disable_hlt(); | 221 | cpu_idle_poll_ctrl(true); |
222 | if (cpu_is_omap34xx()) | 222 | if (cpu_is_omap34xx()) |
223 | omap_prcm_irq_prepare(); | 223 | omap_prcm_irq_prepare(); |
224 | return 0; | 224 | return 0; |
@@ -226,8 +226,7 @@ static int omap_pm_begin(suspend_state_t state) | |||
226 | 226 | ||
227 | static void omap_pm_end(void) | 227 | static void omap_pm_end(void) |
228 | { | 228 | { |
229 | enable_hlt(); | 229 | cpu_idle_poll_ctrl(false); |
230 | return; | ||
231 | } | 230 | } |
232 | 231 | ||
233 | static void omap_pm_finish(void) | 232 | static void omap_pm_finish(void) |
diff --git a/arch/arm/mach-orion5x/board-dt.c b/arch/arm/mach-orion5x/board-dt.c index 35a8014529ca..94fbb815680c 100644 --- a/arch/arm/mach-orion5x/board-dt.c +++ b/arch/arm/mach-orion5x/board-dt.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
16 | #include <linux/of_platform.h> | 16 | #include <linux/of_platform.h> |
17 | #include <linux/cpu.h> | ||
17 | #include <asm/system_misc.h> | 18 | #include <asm/system_misc.h> |
18 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
19 | #include <mach/orion5x.h> | 20 | #include <mach/orion5x.h> |
@@ -52,7 +53,7 @@ static void __init orion5x_dt_init(void) | |||
52 | */ | 53 | */ |
53 | if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) { | 54 | if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) { |
54 | printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n"); | 55 | printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n"); |
55 | disable_hlt(); | 56 | cpu_idle_poll_ctrl(true); |
56 | } | 57 | } |
57 | 58 | ||
58 | if (of_machine_is_compatible("lacie,ethernet-disk-mini-v2")) | 59 | if (of_machine_is_compatible("lacie,ethernet-disk-mini-v2")) |
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index d068f1431c40..ad71c8a03ffd 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -293,7 +293,7 @@ void __init orion5x_init(void) | |||
293 | */ | 293 | */ |
294 | if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) { | 294 | if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) { |
295 | printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n"); | 295 | printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n"); |
296 | disable_hlt(); | 296 | cpu_idle_poll_ctrl(true); |
297 | } | 297 | } |
298 | 298 | ||
299 | /* | 299 | /* |
diff --git a/arch/arm/mach-shark/core.c b/arch/arm/mach-shark/core.c index b63dec848195..153555724988 100644 --- a/arch/arm/mach-shark/core.c +++ b/arch/arm/mach-shark/core.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/sched.h> | 10 | #include <linux/sched.h> |
11 | #include <linux/serial_8250.h> | 11 | #include <linux/serial_8250.h> |
12 | #include <linux/io.h> | 12 | #include <linux/io.h> |
13 | #include <linux/cpu.h> | ||
13 | 14 | ||
14 | #include <asm/setup.h> | 15 | #include <asm/setup.h> |
15 | #include <asm/mach-types.h> | 16 | #include <asm/mach-types.h> |
@@ -130,7 +131,7 @@ static void __init shark_timer_init(void) | |||
130 | 131 | ||
131 | static void shark_init_early(void) | 132 | static void shark_init_early(void) |
132 | { | 133 | { |
133 | disable_hlt(); | 134 | cpu_idle_poll_ctrl(true); |
134 | } | 135 | } |
135 | 136 | ||
136 | MACHINE_START(SHARK, "Shark") | 137 | MACHINE_START(SHARK, "Shark") |
diff --git a/arch/arm/mach-shmobile/suspend.c b/arch/arm/mach-shmobile/suspend.c index 47d83f7a70b6..5d92b5dd486b 100644 --- a/arch/arm/mach-shmobile/suspend.c +++ b/arch/arm/mach-shmobile/suspend.c | |||
@@ -12,6 +12,8 @@ | |||
12 | #include <linux/suspend.h> | 12 | #include <linux/suspend.h> |
13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
14 | #include <linux/err.h> | 14 | #include <linux/err.h> |
15 | #include <linux/cpu.h> | ||
16 | |||
15 | #include <asm/io.h> | 17 | #include <asm/io.h> |
16 | #include <asm/system_misc.h> | 18 | #include <asm/system_misc.h> |
17 | 19 | ||
@@ -23,13 +25,13 @@ static int shmobile_suspend_default_enter(suspend_state_t suspend_state) | |||
23 | 25 | ||
24 | static int shmobile_suspend_begin(suspend_state_t state) | 26 | static int shmobile_suspend_begin(suspend_state_t state) |
25 | { | 27 | { |
26 | disable_hlt(); | 28 | cpu_idle_poll_ctrl(true); |
27 | return 0; | 29 | return 0; |
28 | } | 30 | } |
29 | 31 | ||
30 | static void shmobile_suspend_end(void) | 32 | static void shmobile_suspend_end(void) |
31 | { | 33 | { |
32 | enable_hlt(); | 34 | cpu_idle_poll_ctrl(false); |
33 | } | 35 | } |
34 | 36 | ||
35 | struct platform_suspend_ops shmobile_suspend_ops = { | 37 | struct platform_suspend_ops shmobile_suspend_ops = { |
diff --git a/arch/arm/mach-w90x900/dev.c b/arch/arm/mach-w90x900/dev.c index 7abdb9645c5b..e65a80a1ac75 100644 --- a/arch/arm/mach-w90x900/dev.c +++ b/arch/arm/mach-w90x900/dev.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | #include <linux/cpu.h> | ||
22 | 23 | ||
23 | #include <linux/mtd/physmap.h> | 24 | #include <linux/mtd/physmap.h> |
24 | #include <linux/mtd/mtd.h> | 25 | #include <linux/mtd/mtd.h> |
@@ -531,7 +532,7 @@ static struct platform_device *nuc900_public_dev[] __initdata = { | |||
531 | 532 | ||
532 | void __init nuc900_board_init(struct platform_device **device, int size) | 533 | void __init nuc900_board_init(struct platform_device **device, int size) |
533 | { | 534 | { |
534 | disable_hlt(); | 535 | cpu_idle_poll_ctrl(true); |
535 | platform_add_devices(device, size); | 536 | platform_add_devices(device, size); |
536 | platform_add_devices(nuc900_public_dev, ARRAY_SIZE(nuc900_public_dev)); | 537 | platform_add_devices(nuc900_public_dev, ARRAY_SIZE(nuc900_public_dev)); |
537 | spi_register_board_info(nuc900_spi_board_info, | 538 | spi_register_board_info(nuc900_spi_board_info, |