Messages in this thread Patch in this message | | | Date | Wed, 1 Jul 2015 16:20:48 +0200 (CEST) | From | Paul Osmialowski <> | Subject | Re: [PATCH v2 4/9] arm: twr-k70f120m: timer driver for Kinetis SoC |
| |
On Wed, 1 Jul 2015, Thomas Gleixner wrote:
>> >> As I removed this kinetis_pit_enable() line, the timer did not start, >> therefore the system became unusable. What could be possible reason for that? > > Well, you need to move both, the init and the enable into > set_periodic(). >
Indeed, something like this worked:
diff --git a/drivers/clocksource/timer-kinetis.c b/drivers/clocksource/timer-kinetis.c index 1424308..41ef94f 100644 --- a/drivers/clocksource/timer-kinetis.c +++ b/drivers/clocksource/timer-kinetis.c @@ -61,6 +61,7 @@ struct kinetis_clock_event_ddata { struct clock_event_device evtdev; void __iomem *base; void __iomem *mcr; + unsigned long rate; spinlock_t lock; };
@@ -115,6 +116,7 @@ static int kinetis_clockevent_tmr_set_state_periodic( struct kinetis_clock_event_ddata *pit = container_of(evt, struct kinetis_clock_event_ddata, evtdev);
+ kinetis_pit_init(pit, (pit->rate / HZ) - 1); kinetis_pit_enable(pit, 1);
return 0; @@ -235,6 +237,7 @@ static void __init kinetis_clockevent_init(struct device_node *np) kinetis_clockevent_tmr_set_state_oneshot; kinetis_tmr->base = base; kinetis_tmr->mcr = mcr; + kinetis_tmr->rate = rate; spin_lock_init(&kinetis_tmr->lock);
/* @@ -250,9 +253,6 @@ static void __init kinetis_clockevent_init(struct device_node *np)
clockevents_register_device(&kinetis_tmr->evtdev);
- kinetis_pit_init(kinetis_tmr, (rate / HZ) - 1); - kinetis_pit_enable(kinetis_tmr, 1); - if (request_irq(irq, kinetis_clockevent_tmr_irq_handler, IRQF_TIMER | IRQF_IRQPOLL, "kinetis-timer",
| |