]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: Use Otto timer on RTL931x 19205/head
authorMarkus Stockhausen <markus.stockhausen@gmx.de>
Sun, 22 Jun 2025 07:53:08 +0000 (03:53 -0400)
committerRobert Marko <robimarko@gmail.com>
Sun, 22 Jun 2025 21:12:02 +0000 (23:12 +0200)
Until now the timer management on the RTL931x devices depends
on the MIPS default timer. Looking at the clock progress on
these devices one can see that it is totally off. It is running
at half the required speed (e.g. if 1 minute passes the date
command shows that according to the timers only 30 seconds have
elapsed). This is a mix from wrong DTS and bad startup code.

This is not only a cosmetic issue but has effects on every
delay operation inside the kernel. Switch RTL931x to the proven
Otto timer.

Tested on LGS352C based on RTL9311.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/19205
Signed-off-by: Robert Marko <robimarko@gmail.com>
target/linux/realtek/dts/rtl931x.dtsi

index c7feef4724ae769270ff5ef69240962fb7e7cb5f..df85112464b75ae62c1bae14e2b50c7457ffeed5 100644 (file)
                 * controller & should be probed first.
                 */
                interrupt-parent = <&cpuintc>;
-
-               timer {
-                       compatible = "mti,gic-timer";
-                       interrupts = <GIC_LOCAL 1 IRQ_TYPE_NONE>;
-                       clocks = <&cpuclock>;
-               };
        };
 
        soc: soc {
                        interrupts = <GIC_SHARED 20 IRQ_TYPE_LEVEL_HIGH>;
                };
 
+               timer0: timer@3200 {
+                       compatible = "realtek,rtl931x-timer", "realtek,otto-timer";
+                       reg = <0x3200 0x10>, <0x3210 0x10>, <0x3220 0x10>,
+                             <0x3230 0x10>, <0x3240 0x10>, <0x3250 0x10>;
+
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SHARED 0 IRQ_TYPE_LEVEL_HIGH>, <GIC_SHARED 1 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SHARED 2 IRQ_TYPE_LEVEL_HIGH>, <GIC_SHARED 3 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SHARED 4 IRQ_TYPE_LEVEL_HIGH>, <GIC_SHARED 5 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&lx_clk>;
+                };
+
                uart0: uart@2000 {
                        compatible = "ns16550a";
                        reg = <0x2000 0x100>;