[PATCH] arm64: dts: allwinner: enable h616 timer support

Michal Piekos michal.piekos at mmpsystems.pl
Sun Mar 29 04:43:04 PDT 2026


Add support for timer by reusing existing sun4i timer driver.

H616 timer is compatible with earlier sunxi timer variants and provides
both clocksource and clockevent functionality. It runs from 24 MHz
oscillator. It can serve as broadcast clockevent for wake up from idle
states.

Tested on Orange Pi Zero 3:
- timer is registered as clocksource:
- switching clocksource at runtime works
- timer operates as a broadcast clockevent device
- no regression observed compared to arch_sys_counter

Signed-off-by: Michal Piekos <michal.piekos at mmpsystems.pl>
---
Test results:

Clocksource switching:
  cat /sys/devices/system/clocksource/clocksource0/available_clocksource
    arch_sys_counter timer
  echo timer > /sys/devices/system/clocksource/clocksource0/current_clocksource
    [ 5031.105997] clocksource: Switched to clocksource timer

Clockevent configuration:
  cat /proc/timer_list
    ...
    Tick Device: mode:     1
    Broadcast device
    Clock Event Device: sun4i_tick
     max_delta_ns:   178956969070
     min_delta_ns:   1000
     mult:           51539608
     shift:          31
     mode:           1
     next_event:     9223372036854775807 nsecs
     set_next_event: sun4i_clkevt_next_event
     shutdown:       sun4i_clkevt_shutdown
     periodic:       sun4i_clkevt_set_periodic
     oneshot:        sun4i_clkevt_set_oneshot
     resume:         sun4i_clkevt_shutdown
     event_handler:  tick_handle_oneshot_broadcast
    ...

Cyclictest measurements:
  Dominated by system scheduler latency and do not reflect clocksource
  precision.
---
 arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi
index 8d1110c14bad..bf054869e78b 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi
@@ -228,6 +228,15 @@ cpu_speed_grade: cpu-speed-grade at 0 {
 			};
 		};
 
+		timer0: timer at 3009000 {
+			compatible = "allwinner,sun50i-h616-timer",
+				     "allwinner,sun8i-a23-timer";
+			reg = <0x03009000 0xa0>;
+			interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&osc24M>;
+		};
+
 		watchdog: watchdog at 30090a0 {
 			compatible = "allwinner,sun50i-h616-wdt",
 				     "allwinner,sun6i-a31-wdt";

---
base-commit: be762d8b6dd7efacb61937d20f8475db8f207655
change-id: 20260328-h616-timer-046e6ac3549e

Best regards,
-- 
Michal Piekos <michal.piekos at mmpsystems.pl>




More information about the linux-arm-kernel mailing list