clocksource: davinci: only enable clockevents once tim34 is initialized
authorBartosz Golaszewski <bgolaszewski@baylibre.com>
Fri, 10 Jan 2020 17:16:41 +0000 (18:16 +0100)
committerSekhar Nori <nsekhar@ti.com>
Mon, 13 Jan 2020 07:50:00 +0000 (13:20 +0530)
The DM365 platform has a strange quirk (only present when using ancient
u-boot - mainline u-boot v2013.01 and later works fine) where if we
enable the second half of the timer in periodic mode before we do its
initialization - the time won't start flowing and we can't boot.

When using more recent u-boot, we can enable the timer, then reinitialize
it and all works fine.

To work around this issue only enable clockevents once tim34 is
initialized i.e. move clockevents_config_and_register() below tim34
initialization.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
drivers/clocksource/timer-davinci.c

index 62745c9..e421946 100644 (file)
@@ -302,10 +302,6 @@ int __init davinci_timer_register(struct clk *clk,
                return rv;
        }
 
-       clockevents_config_and_register(&clockevent->dev, tick_rate,
-                                       DAVINCI_TIMER_MIN_DELTA,
-                                       DAVINCI_TIMER_MAX_DELTA);
-
        davinci_clocksource.dev.rating = 300;
        davinci_clocksource.dev.read = davinci_clocksource_read;
        davinci_clocksource.dev.mask =
@@ -323,6 +319,10 @@ int __init davinci_timer_register(struct clk *clk,
                davinci_clocksource_init_tim34(base);
        }
 
+       clockevents_config_and_register(&clockevent->dev, tick_rate,
+                                       DAVINCI_TIMER_MIN_DELTA,
+                                       DAVINCI_TIMER_MAX_DELTA);
+
        rv = clocksource_register_hz(&davinci_clocksource.dev, tick_rate);
        if (rv) {
                pr_err("Unable to register clocksource");