On 15/02/2019 13:52, Marek Szyprowski wrote: > Exynos Multi-Core Timer driver (exynos_mct) must be started before ARM > Architected Timers (arch_timer), because they both share some common > hardware blocks (global system counter) and turning on MCT is needed > to get ARM Architected Timer working properly. Increase MCT timer rating > and hotplug priority over ARM Archictected timer driver to achieve that. This is a hack. There are mechanisms to handle this kind of dependency. eg. https://www.kernel.org/doc/html/v4.15/driver-api/device_link.html > Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > --- > drivers/clocksource/exynos_mct.c | 4 ++-- > include/linux/cpuhotplug.h | 2 +- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c > index 49413900b24c..58090f57ada3 100644 > --- a/drivers/clocksource/exynos_mct.c > +++ b/drivers/clocksource/exynos_mct.c > @@ -211,7 +211,7 @@ static void exynos4_frc_resume(struct clocksource *cs) > > static struct clocksource mct_frc = { > .name = "mct-frc", > - .rating = 400, > + .rating = 450, > .read = exynos4_frc_read, > .mask = CLOCKSOURCE_MASK(32), > .flags = CLOCK_SOURCE_IS_CONTINUOUS, > @@ -465,7 +465,7 @@ static int exynos4_mct_starting_cpu(unsigned int cpu) > evt->set_state_oneshot_stopped = set_state_shutdown; > evt->tick_resume = set_state_shutdown; > evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT; > - evt->rating = 450; > + evt->rating = 500; > > exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET); > > diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h > index fd586d0301e7..bdd544f21102 100644 > --- a/include/linux/cpuhotplug.h > +++ b/include/linux/cpuhotplug.h > @@ -115,10 +115,10 @@ enum cpuhp_state { > CPUHP_AP_PERF_ARM_ACPI_STARTING, > CPUHP_AP_PERF_ARM_STARTING, > CPUHP_AP_ARM_L2X0_STARTING, > + CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING, > CPUHP_AP_ARM_ARCH_TIMER_STARTING, > CPUHP_AP_ARM_GLOBAL_TIMER_STARTING, > CPUHP_AP_JCORE_TIMER_STARTING, > - CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING, > CPUHP_AP_ARM_TWD_STARTING, > CPUHP_AP_QCOM_TIMER_STARTING, > CPUHP_AP_ARMADA_TIMER_STARTING, > -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog