ARM: OMAP: timer: allow gp timer clock-event to be used on both cpus
authorSantosh Shilimkar <santosh.shilimkar@ti.com>
Sat, 17 Mar 2012 09:30:16 +0000 (15:00 +0530)
committerKevin Hilman <khilman@ti.com>
Wed, 25 Jul 2012 23:05:22 +0000 (16:05 -0700)
For coupled cpuidle to work when both cpus are active, it needs a global timer
that can handle events for both cpus.  This timer is used as the broadcast
clock-event when the per-cpu timer hardware stop in low power states.
Set the cpumask of clockevent_gpt to all cpus, set the rating correctly, and
set the irq to allow the clockevent core to determine the affinity of the
timer.

Signed-off-by: Colin Cross <ccross@android.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
arch/arm/mach-omap2/timer.c

index 840929bd9daecce4ef8e1ee95c2d404a2536c9c4..9b7a073606109cecbe5329b43ebfe8f9a4e395b9 100644 (file)
@@ -135,6 +135,7 @@ static struct clock_event_device clockevent_gpt = {
        .name           = "gp_timer",
        .features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
        .shift          = 32,
+       .rating         = 300,
        .set_next_event = omap2_gp_timer_set_next_event,
        .set_mode       = omap2_gp_timer_set_mode,
 };
@@ -228,7 +229,8 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
                clockevent_delta2ns(3, &clockevent_gpt);
                /* Timer internal resynch latency. */
 
-       clockevent_gpt.cpumask = cpumask_of(0);
+       clockevent_gpt.cpumask = cpu_possible_mask;
+       clockevent_gpt.irq = omap_dm_timer_get_irq(&clkev);
        clockevents_register_device(&clockevent_gpt);
 
        pr_info("OMAP clockevent source: GPTIMER%d at %lu Hz\n",