Message ID | 20190530105043.29965-1-m.szyprowski@samsung.com |
---|---|
State | New |
Headers | show |
Series | [v3] clocksource: exynos_mct: Increase priority over ARM arch timer | expand |
On 30/05/2019 12:50, Marek Szyprowski wrote: > Exynos SoCs based on CA7/CA15 have 2 timer interfaces: custom Exynos MCT > (Multi Core Timer) and standard ARM Architected Timers. > > There are use cases, where both timer interfaces are used simultanously. > One of such examples is using Exynos MCT for the main system timer and > ARM Architected Timers for the KVM and virtualized guests (KVM requires > arch timers). > > Exynos Multi-Core Timer driver (exynos_mct) must be however 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. > > To ensure selecting Exynos MCT as the main system timer, increase MCT > timer rating. To ensure proper starting order of both timers during > suspend/resume cycle, increase MCT hotplug priority over ARM Archictected > Timers. > > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> > Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com> Applied, thanks -- <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
diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c index 34bd250d46c6..6aa10cbc1d59 100644 --- a/drivers/clocksource/exynos_mct.c +++ b/drivers/clocksource/exynos_mct.c @@ -209,7 +209,7 @@ static void exynos4_frc_resume(struct clocksource *cs) static struct clocksource mct_frc = { .name = "mct-frc", - .rating = 400, + .rating = 450, /* use value higher than ARM arch timer */ .read = exynos4_frc_read, .mask = CLOCKSOURCE_MASK(32), .flags = CLOCK_SOURCE_IS_CONTINUOUS, @@ -464,7 +464,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; /* use value higher than ARM arch timer */ 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 e78281d07b70..53fb48de9589 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_TEGRA_TIMER_STARTING,