[PATCH v5 5/6] riscv: dts: anlogic: add clocks and CRU for DR1V90
Junhui Liu
junhui.liu at pigmoral.tech
Thu May 14 02:27:21 PDT 2026
Add clocks and introduce the CRU (Clock and Reset) unit node
for Anlogic DR1V90 SoC, providing both clock and reset support.
The DR1V90 SoC uses three external clocks:
- A crystal oscillator as the main system clock.
- Two optional external clocks (via IO) for the CAN and WDT modules.
The main crystal oscillator frequency is board-dependent. For the
dr1v90-mlkpai-fs01 board, a 33.33 MHz oscillator is used and defined
accordingly.
Signed-off-by: Junhui Liu <junhui.liu at pigmoral.tech>
---
arch/riscv/boot/dts/anlogic/dr1v90-mlkpai-fs01.dts | 4 +++
arch/riscv/boot/dts/anlogic/dr1v90.dtsi | 40 ++++++++++++++++++++--
2 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/arch/riscv/boot/dts/anlogic/dr1v90-mlkpai-fs01.dts b/arch/riscv/boot/dts/anlogic/dr1v90-mlkpai-fs01.dts
index 597407655efd..af78f1a4eecc 100644
--- a/arch/riscv/boot/dts/anlogic/dr1v90-mlkpai-fs01.dts
+++ b/arch/riscv/boot/dts/anlogic/dr1v90-mlkpai-fs01.dts
@@ -23,6 +23,10 @@ memory at 0 {
};
};
+&osc {
+ clock-frequency = <33333333>;
+};
+
&uart1 {
status = "okay";
};
diff --git a/arch/riscv/boot/dts/anlogic/dr1v90.dtsi b/arch/riscv/boot/dts/anlogic/dr1v90.dtsi
index 9fe183f5f5c8..574c6608aef0 100644
--- a/arch/riscv/boot/dts/anlogic/dr1v90.dtsi
+++ b/arch/riscv/boot/dts/anlogic/dr1v90.dtsi
@@ -3,6 +3,9 @@
* Copyright (C) 2025 Junhui Liu <junhui.liu at pigmoral.tech>
*/
+#include <dt-bindings/clock/anlogic,dr1v90-cru.h>
+#include <dt-bindings/reset/anlogic,dr1v90-cru.h>
+
/dts-v1/;
/ {
#address-cells = <2>;
@@ -40,6 +43,26 @@ cpu0_intc: interrupt-controller {
};
};
+ clocks {
+ can_ext: clock-ext-can {
+ compatible = "fixed-clock";
+ clock-output-names = "can_ext";
+ #clock-cells = <0>;
+ };
+
+ osc: clock-osc {
+ compatible = "fixed-clock";
+ clock-output-names = "osc";
+ #clock-cells = <0>;
+ };
+
+ wdt_ext: clock-ext-wdt {
+ compatible = "fixed-clock";
+ clock-output-names = "wdt_ext";
+ #clock-cells = <0>;
+ };
+ };
+
soc {
compatible = "simple-bus";
interrupt-parent = <&plic>;
@@ -81,21 +104,34 @@ plic: interrupt-controller at 6c000000 {
uart0: serial at f8400000 {
compatible = "anlogic,dr1v90-uart", "snps,dw-apb-uart";
reg = <0x0 0xf8400000 0x0 0x1000>;
- clock-frequency = <50000000>;
+ clocks = <&cru CLK_IO_400M_DIV8>, <&cru CLK_CPU_1X>;
+ clock-names = "baudclk", "apb_pclk";
interrupts = <71>;
reg-io-width = <4>;
reg-shift = <2>;
+ resets = <&cru RESET_UART0>;
status = "disabled";
};
uart1: serial at f8401000 {
compatible = "anlogic,dr1v90-uart", "snps,dw-apb-uart";
reg = <0x0 0xf8401000 0x0 0x1000>;
- clock-frequency = <50000000>;
+ clocks = <&cru CLK_IO_400M_DIV8>, <&cru CLK_CPU_1X>;
+ clock-names = "baudclk", "apb_pclk";
interrupts = <72>;
reg-io-width = <4>;
reg-shift = <2>;
+ resets = <&cru RESET_UART1>;
status = "disabled";
};
+
+ cru: clock-controller at f8801000 {
+ compatible = "anlogic,dr1v90-cru";
+ reg = <0x0 0xf8801000 0 0x400>;
+ clocks = <&osc>, <&can_ext>, <&wdt_ext>;
+ clock-names = "osc", "can_ext", "wdt_ext";
+ #clock-cells = <1>;
+ #reset-cells = <1>;
+ };
};
};
--
2.54.0
More information about the linux-riscv
mailing list