realtek: timer: Register enabled scheduler clock
authorSander Vanheule <sander@svanheule.net>
Fri, 27 Jan 2023 22:35:47 +0000 (23:35 +0100)
committerOlliver Schinagl <oliver@schinagl.nl>
Sat, 28 Jan 2023 14:23:03 +0000 (15:23 +0100)
Before calling sched_clock_register(), the timer used to drive the
scheduling clock should already be enabled. Otherwise the kernel log
will show strange time jumps during, and the watchdog might not be
pinged in a timely fashion, resulting in reboots.

[    0.160281] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[   78.104319] clocksource: Switched to clocksource realtek_otto_timer

Fixes: 3cc801117118 ("realtek: resurrect timer driver")
Signed-off-by: Sander Vanheule <sander@svanheule.net>
target/linux/realtek/files-5.10/drivers/clocksource/timer-rtl-otto.c
target/linux/realtek/files-5.15/drivers/clocksource/timer-rtl-otto.c

index c096d8742b481403dacc87abc086ff134066743c..0395cf29e5ca5e8e84467d1aae70ca3dae9e8025 100644 (file)
@@ -229,7 +229,6 @@ struct rttm_cs rttm_cs = {
                .mask   = CLOCKSOURCE_MASK(RTTM_BIT_COUNT),
                .flags  = CLOCK_SOURCE_IS_CONTINUOUS,
                .read   = rttm_read_clocksource,
-               .enable = rttm_enable_clocksource
        }
 };
 
@@ -276,6 +275,7 @@ static int __init rttm_probe(struct device_node *np)
        to->of_base.index = clkidx;
        timer_of_init(np, to);
        if (rttm_cs.to.of_base.base && rttm_cs.to.of_clk.rate) {
+               rttm_enable_clocksource(&rttm_cs.cs);
                clocksource_register_hz(&rttm_cs.cs, RTTM_TICKS_PER_SEC);
                sched_clock_register(rttm_read_clock, RTTM_BIT_COUNT, RTTM_TICKS_PER_SEC);
        } else
index c096d8742b481403dacc87abc086ff134066743c..0395cf29e5ca5e8e84467d1aae70ca3dae9e8025 100644 (file)
@@ -229,7 +229,6 @@ struct rttm_cs rttm_cs = {
                .mask   = CLOCKSOURCE_MASK(RTTM_BIT_COUNT),
                .flags  = CLOCK_SOURCE_IS_CONTINUOUS,
                .read   = rttm_read_clocksource,
-               .enable = rttm_enable_clocksource
        }
 };
 
@@ -276,6 +275,7 @@ static int __init rttm_probe(struct device_node *np)
        to->of_base.index = clkidx;
        timer_of_init(np, to);
        if (rttm_cs.to.of_base.base && rttm_cs.to.of_clk.rate) {
+               rttm_enable_clocksource(&rttm_cs.cs);
                clocksource_register_hz(&rttm_cs.cs, RTTM_TICKS_PER_SEC);
                sched_clock_register(rttm_read_clock, RTTM_BIT_COUNT, RTTM_TICKS_PER_SEC);
        } else