aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/cpuidle44xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2/cpuidle44xx.c')
-rw-r--r--arch/arm/mach-omap2/cpuidle44xx.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
index eb93e45d3271..45e6a54d5818 100644
--- a/arch/arm/mach-omap2/cpuidle44xx.c
+++ b/arch/arm/mach-omap2/cpuidle44xx.c
@@ -202,6 +202,16 @@ struct cpuidle_driver omap4_idle_driver = {
202 .safe_state_index = 0, 202 .safe_state_index = 0,
203}; 203};
204 204
205/*
206 * For each cpu, setup the broadcast timer because local timers
207 * stops for the states above C1.
208 */
209static void omap_setup_broadcast_timer(void *arg)
210{
211 int cpu = smp_processor_id();
212 clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &cpu);
213}
214
205/** 215/**
206 * omap4_idle_init - Init routine for OMAP4 idle 216 * omap4_idle_init - Init routine for OMAP4 idle
207 * 217 *
@@ -224,6 +234,9 @@ int __init omap4_idle_init(void)
224 if (!cpu_clkdm[0] || !cpu_clkdm[1]) 234 if (!cpu_clkdm[0] || !cpu_clkdm[1])
225 return -ENODEV; 235 return -ENODEV;
226 236
237 /* Configure the broadcast timer on each cpu */
238 on_each_cpu(omap_setup_broadcast_timer, NULL, 1);
239
227 for_each_cpu(cpu_id, cpu_online_mask) { 240 for_each_cpu(cpu_id, cpu_online_mask) {
228 dev = &per_cpu(omap4_idle_dev, cpu_id); 241 dev = &per_cpu(omap4_idle_dev, cpu_id);
229 dev->cpu = cpu_id; 242 dev->cpu = cpu_id;