arch/arm64/boot/dts/mediatek/mt7986a.dtsi | 1 + 1 file changed, 1 insertion(+)
The MT7986 architected timer runs at 12,986,200 Hz rather than 13 MHz.
Firmware reports 13 MHz through CNTFRQ_EL0, causing the system clock to
run slow by about 1062 ppm. This exceeds the kernel's 500 ppm NTP
correction limit and leaves clock discipline saturated.
The corrected rate comes from MediaTek's downstream OpenWrt feed, where
it is applied to both MT7986A and MT7986B. Since upstream mt7986b.dtsi
includes mt7986a.dtsi, add it once to the common timer node so the
architected timer driver uses the actual counter rate.
Fixes: 50137c150f5f ("arm64: dts: mediatek: add basic mt7986 support")
Cc: stable@vger.kernel.org
Link: https://github.com/mediatek/mtk-openwrt-feeds/commit/6a4c41c41410cd5042ad10c39da6593ba036283c
Link: https://github.com/openwrt/openwrt/issues/24789
Signed-off-by: Andrea Pesaresi <andreapesaresi82@gmail.com>
---
arch/arm64/boot/dts/mediatek/mt7986a.dtsi | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
index 9ebc19610..318639a7c 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
@@ -657,6 +657,7 @@ cpu_trip_active_low: active-low {
timer {
compatible = "arm,armv8-timer";
interrupt-parent = <&gic>;
+ clock-frequency = <12986200>;
interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
<GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
<GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
base-commit: cf72cbb39da84b6f02f90c07f33b102fc10b16f0
--
2.43.0
On Sat, 29 Aug 2026 17:19:55 +0200, Andrea Pesaresi wrote:
> The MT7986 architected timer runs at 12,986,200 Hz rather than 13 MHz.
> Firmware reports 13 MHz through CNTFRQ_EL0, causing the system clock to
> run slow by about 1062 ppm. This exceeds the kernel's 500 ppm NTP
> correction limit and leaves clock discipline saturated.
>
> The corrected rate comes from MediaTek's downstream OpenWrt feed, where
> it is applied to both MT7986A and MT7986B. Since upstream mt7986b.dtsi
> includes mt7986a.dtsi, add it once to the common timer node so the
> architected timer driver uses the actual counter rate.
>
> [...]
Applied to v7.3-next/dts64, thanks!
[1/1] arm64: dts: mediatek: mt7986: correct timer frequency
commit: 1cf18e4b9815beaf0439c5b57b65b45151c82ad7
Cheers,
Angelo
© 2016 - 2026 Red Hat, Inc.