• Tony Lindgren's avatar
    clocksource/drivers/timer-ti-dm: Do reset before enable · 16480515
    Tony Lindgren authored
    Commit 6cfcd556 ("clocksource/drivers/timer-ti-dm: Fix suspend and
    resume for am3 and am4") exposed a new issue for type2 dual mode timers
    on at least omap5 where the clockevent will stop when the SoC starts
    entering idle states during the boot.
    
    Turns out we are wrongly first enabling the system timer and then
    resetting it, while we must also re-enable it after reset. The current
    sequence leaves the timer module in a partially initialized state. This
    issue went unnoticed earlier with ti-sysc driver reconfiguring the timer
    module until we fixed the issue of ti-sysc reconfiguring system timers.
    
    Let's fix the issue by calling dmtimer_systimer_enable() from reset for
    both type1 and type2 timers, and switch the order of reset and enable in
    dmtimer_systimer_setup(). Let's also move dmtimer_systimer_enable() and
    dmtimer_systimer_disable() to do this without adding forward declarations.
    
    Fixes: 6cfcd556 ("clocksource/drivers/timer-ti-dm: Fix suspend and resume for am3 and am4")
    Reported-by: default avatarH. Nikolaus Schaller" <hns@goldelico.com>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20200817092428.6176-1-tony@atomide.com
    16480515
timer-ti-dm-systimer.c 19.2 KB