lkml.org 
[lkml]   [2019]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.2 170/413] clocksource/drivers/exynos_mct: Increase priority over ARM arch timer
    Date
    [ Upstream commit 6282edb72bed5324352522d732080d4c1b9dfed6 ]

    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>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    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 e8eab16b154b..74cb299f5089 100644
    --- a/drivers/clocksource/exynos_mct.c
    +++ b/drivers/clocksource/exynos_mct.c
    @@ -206,7 +206,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,
    @@ -461,7 +461,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 52ec0d9fa1f7..068793a619ca 100644
    --- a/include/linux/cpuhotplug.h
    +++ b/include/linux/cpuhotplug.h
    @@ -116,10 +116,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,
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-07-24 21:36    [W:2.723 / U:0.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site