mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
clocksource/drivers/timer-rtl-otto: Do not interfere with interrupts
[ Upstream commit c445bffbf2 ]
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
Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Tested-by: Stephen Howell <howels@allthatwemight.be>
Tested-by: Bjørn Mork <bjorn@mork.no>
Link: https://lore.kernel.org/r/20250804080328.2609287-4-markus.stockhausen@gmx.de
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a105ec25d6
commit
612495b32c
@@ -147,7 +147,7 @@ static int rttm_next_event(unsigned long delta, struct clock_event_device *clkev
|
||||
|
||||
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);
|
||||
|
||||
@@ -160,7 +160,7 @@ static int rttm_state_oneshot(struct clock_event_device *clkevt)
|
||||
|
||||
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);
|
||||
|
||||
@@ -173,7 +173,7 @@ static int rttm_state_periodic(struct clock_event_device *clkevt)
|
||||
|
||||
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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user