mirror of
https://github.com/VIKINGYFY/immortalwrt.git
synced 2025-12-16 17:15:26 +00:00
The fixes for the dying timers were finally accepted upstream. Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> Link: https://github.com/openwrt/openwrt/pull/20097 Signed-off-by: Robert Marko <robimarko@gmail.com>
61 lines
2.3 KiB
Diff
61 lines
2.3 KiB
Diff
From add0d895aa6f66320f9b1d901b66259f4308af04 Mon Sep 17 00:00:00 2001
|
|
From: Markus Stockhausen <markus.stockhausen@gmx.de>
|
|
Date: Mon, 4 Aug 2025 04:03:27 -0400
|
|
Subject: clocksource/drivers/timer-rtl-otto: Do not interfere with interrupts
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
During normal operation the timers are reprogrammed including an
|
|
interrupt acknowledgement. This has no effect as the whole timer
|
|
is setup from scratch afterwards. Especially in an interrupt this
|
|
has already been done by rttm_timer_interrupt().
|
|
|
|
Change the behaviour as follows:
|
|
|
|
- Use rttm_disable_timer() during reprogramming
|
|
- Keep rttm_stop_timer() for all other use cases.
|
|
|
|
Downstream has already tested and confirmed a patch. See
|
|
https://github.com/openwrt/openwrt/pull/19468
|
|
https://forum.openwrt.org/t/support-for-rtl838x-based-managed-switches/57875/3788
|
|
|
|
Tested-by: Stephen Howell <howels@allthatwemight.be>
|
|
Tested-by: Bjørn Mork <bjorn@mork.no>
|
|
Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
|
|
Link: https://lore.kernel.org/r/20250804080328.2609287-4-markus.stockhausen@gmx.de
|
|
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
|
|
---
|
|
drivers/clocksource/timer-rtl-otto.c | 6 +++---
|
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/clocksource/timer-rtl-otto.c
|
|
+++ b/drivers/clocksource/timer-rtl-otto.c
|
|
@@ -141,7 +141,7 @@ static int rttm_next_event(unsigned long
|
|
|
|
RTTM_DEBUG(to->of_base.base);
|
|
rttm_bounce_timer(to->of_base.base, RTTM_CTRL_COUNTER);
|
|
- rttm_stop_timer(to->of_base.base);
|
|
+ rttm_disable_timer(to->of_base.base);
|
|
rttm_set_period(to->of_base.base, delta);
|
|
rttm_start_timer(to, RTTM_CTRL_COUNTER);
|
|
|
|
@@ -154,7 +154,7 @@ static int rttm_state_oneshot(struct clo
|
|
|
|
RTTM_DEBUG(to->of_base.base);
|
|
rttm_bounce_timer(to->of_base.base, RTTM_CTRL_COUNTER);
|
|
- rttm_stop_timer(to->of_base.base);
|
|
+ rttm_disable_timer(to->of_base.base);
|
|
rttm_set_period(to->of_base.base, RTTM_TICKS_PER_SEC / HZ);
|
|
rttm_start_timer(to, RTTM_CTRL_COUNTER);
|
|
|
|
@@ -167,7 +167,7 @@ static int rttm_state_periodic(struct cl
|
|
|
|
RTTM_DEBUG(to->of_base.base);
|
|
rttm_bounce_timer(to->of_base.base, RTTM_CTRL_TIMER);
|
|
- rttm_stop_timer(to->of_base.base);
|
|
+ rttm_disable_timer(to->of_base.base);
|
|
rttm_set_period(to->of_base.base, RTTM_TICKS_PER_SEC / HZ);
|
|
rttm_start_timer(to, RTTM_CTRL_TIMER);
|
|
|