[PATCH RESEND v4 3/3] arm64: dts: rockchip: Add Luckfox Omni3576 Board support
Quentin Schulz
quentin.schulz at cherry.de
Mon May 12 01:25:44 PDT 2025
Hi John,
On 5/9/25 2:26 PM, John Clark wrote:
> Add device tree for the Luckfox Omni3576 Carrier Board with Core3576
> Module, powered by the Rockchip RK3576 SoC with four Cortex-A72 cores,
> four Cortex-A53 cores, and a Mali-G52 MC3 GPU. This initial
> implementation enables essential functionality for booting Linux and
> basic connectivity.
>
> Supported and tested features:
> - UART for serial console
> - SD card for storage
> - PCIe with NVMe SSD (detected, mounted, and fully functional)
> - USB 2.0 host ports
> - RK806 PMIC for power management
> - RTC with timekeeping and wake-up
> - GPIO-controlled LED with heartbeat trigger
> - eMMC (enabled, not populated on tested board)
>
> The device tree provides a foundation for further peripheral support, such
> as WiFi, MIPI-DSI, HDMI, and Ethernet, in future updates.
>
> Tested on Linux 6.15-rc4
>
> Signed-off-by: John Clark <inindev at gmail.com>
> ---
> arch/arm64/boot/dts/rockchip/Makefile | 1 +
> .../dts/rockchip/rk3576-luckfox-core3576.dtsi | 683 ++++++++++++++++++
> .../dts/rockchip/rk3576-luckfox-omni3576.dts | 53 ++
> 3 files changed, 737 insertions(+)
> create mode 100644 arch/arm64/boot/dts/rockchip/rk3576-luckfox-core3576.dtsi
> create mode 100644 arch/arm64/boot/dts/rockchip/rk3576-luckfox-omni3576.dts
>
> diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile
> index 7948522cb225..22d74367b7e6 100644
> --- a/arch/arm64/boot/dts/rockchip/Makefile
> +++ b/arch/arm64/boot/dts/rockchip/Makefile
> @@ -136,6 +136,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-wolfvision-pf5-display-vz.dtbo
> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-wolfvision-pf5-io-expander.dtbo
> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-armsom-sige5.dtb
> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-evb1-v10.dtb
> +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-luckfox-omni3576.dtb
> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-roc-pc.dtb
> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-rock-4d.dtb
> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3582-radxa-e52c.dtb
> diff --git a/arch/arm64/boot/dts/rockchip/rk3576-luckfox-core3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576-luckfox-core3576.dtsi
> new file mode 100644
> index 000000000000..9f0fa4427348
> --- /dev/null
> +++ b/arch/arm64/boot/dts/rockchip/rk3576-luckfox-core3576.dtsi
> @@ -0,0 +1,683 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2024 Rockchip Electronics Co., Ltd.
> + *
Is that truly the approrpiate copyright holder?
> + */
> +
> +/dts-v1/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/leds/common.h>
> +#include <dt-bindings/pinctrl/rockchip.h>
> +#include <dt-bindings/soc/rockchip,vop2.h>
> +#include "rk3576.dtsi"
> +
> +/ {
> + model = "Luckfox Core3576 Module";
> + compatible = "luckfox,core3576","rockchip,rk3576";
> +
> + chosen {
> + stdout-path = "serial0:1500000n8";
> + };
> +
> + hdmi-con {
> + compatible = "hdmi-connector";
> + hdmi-pwr-supply = <&vcc_5v0_hdmi>;
> + type = "a";
> +
> + port {
> + hdmi_con_in: endpoint {
> + remote-endpoint = <&hdmi_out_con>;
> + };
> + };
> + };
> +
> + vcc_5v0_dcin: regulator-vcc-5v0-dcin {
> + compatible = "regulator-fixed";
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + regulator-name = "vcc_5v0_dcin";
> + };
> +
This is not ordered according to the kernel spec, c.f.
https://www.kernel.org/doc/html/latest/devicetree/bindings/dts-coding-style.html#order-of-nodes
> + vcc_1v1_nldo_s3: regulator-vcc-1v1-nldo-s3 {
> + compatible = "regulator-fixed";
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-min-microvolt = <1100000>;
> + regulator-max-microvolt = <1100000>;
> + regulator-name = "vcc_1v1_nldo_s3";
> + vin-supply = <&vcc_5v0_sys>;
> + };
> +
> + vcc_2v0_pldo_s3: regulator-vcc-2v0-pldo-s3 {
> + compatible = "regulator-fixed";
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-min-microvolt = <2000000>;
> + regulator-max-microvolt = <2000000>;
> + regulator-name = "vcc_2v0_pldo_s3";
> + vin-supply = <&vcc_5v0_sys>;
> + };
> +
> + vcc_3v3_pcie: regulator-vcc-3v3-pcie {
> + compatible = "regulator-fixed";
> + enable-active-high;
> + gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&pcie_pwr_en>;
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-name = "vcc_3v3_pcie";
> + startup-delay-us = <1000>;
> + vin-supply = <&vcc_5v0_sys>;
> + };
> +
> + vcc_3v3_rtc_s5: regulator-vcc-3v3-rtc-s5 {
> + compatible = "regulator-fixed";
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-name = "vcc_3v3_rtc_s5";
> + vin-supply = <&vcc_5v0_sys>;
> + };
> +
> + vbus_5v0_typec: regulator-vbus-5v0-typec {
> + compatible = "regulator-fixed";
> + enable-active-high;
> + gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&usb_otg0_pwr_en>;
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + regulator-name = "vbus5v0_typec";
> + vin-supply = <&vcc_5v0_device>;
> + };
> +
This is not properly ordered.
> + vcc_5v0_device: regulator-vcc-5v0-device {
> + compatible = "regulator-fixed";
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + regulator-name = "vcc_5v0_device";
> + vin-supply = <&vcc_5v0_dcin>;
> + };
> +
> + vcc_5v0_hdmi: regulator-vcc-5v0-hdmi {
> + compatible = "regulator-fixed";
> + enable-active-high;
> + gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&hdmi_con_en>;
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + regulator-name = "vcc_5v0_hdmi";
> + vin-supply = <&vcc_5v0_sys>;
> + };
> +
> + vcc_5v0_host: regulator-vcc-5v0-host {
> + compatible = "regulator-fixed";
> + enable-active-high;
> + gpios = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&usb_host_pwr_en>;
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + regulator-name = "vcc_5v0_host";
> + vin-supply = <&vcc_5v0_device>;
> + };
> +
> + vcc_5v0_sys: regulator-vcc-5v0-sys {
> + compatible = "regulator-fixed";
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + regulator-name = "vcc_5v0_sys";
> + vin-supply = <&vcc_5v0_dcin>;
> + };
> +};
> +
> +&combphy0_ps {
> + status = "okay";
> +};
> +
> +&combphy1_psu {
> + status = "okay";
> +};
> +
> +&cpu_l0 {
> + cpu-supply = <&vdd_cpu_lit_s0>;
> +};
> +
> +&cpu_l1 {
> + cpu-supply = <&vdd_cpu_lit_s0>;
> +};
> +
> +&cpu_l2 {
> + cpu-supply = <&vdd_cpu_lit_s0>;
> +};
> +
> +&cpu_l3 {
> + cpu-supply = <&vdd_cpu_lit_s0>;
> +};
> +
> +&cpu_b0 {
> + cpu-supply = <&vdd_cpu_big_s0>;
> +};
> +
> +&cpu_b1 {
> + cpu-supply = <&vdd_cpu_big_s0>;
> +};
> +
> +&cpu_b2 {
> + cpu-supply = <&vdd_cpu_big_s0>;
> +};
> +
> +&cpu_b3 {
> + cpu-supply = <&vdd_cpu_big_s0>;
> +};
> +
Alphabetically, b comes before l, so please reorder the cpu_lX and
cpu_bY nodes. c.f.
https://www.kernel.org/doc/html/latest/devicetree/bindings/dts-coding-style.html#order-of-nodes
[...]
> diff --git a/arch/arm64/boot/dts/rockchip/rk3576-luckfox-omni3576.dts b/arch/arm64/boot/dts/rockchip/rk3576-luckfox-omni3576.dts
> new file mode 100644
> index 000000000000..3361b9e9a01c
> --- /dev/null
> +++ b/arch/arm64/boot/dts/rockchip/rk3576-luckfox-omni3576.dts
> @@ -0,0 +1,53 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2024 Rockchip Electronics Co., Ltd.
> + *
Is this the correct copyright holder?
> + */
> +
> +/dts-v1/;
> +
> +#include "rk3576-luckfox-core3576.dtsi"
> +
> +/ {
> + model = "Luckfox Omni3576 Carrier Board";
> + compatible = "luckfox,omni3576", "luckfox,core3576", "rockchip,rk3576";
> +
> + aliases {
> + mmc0 = &sdhci;
> + mmc1 = &sdmmc;
> + };
I would have assumed this is the kind of information you want to store
in the SoM DTSI instead?
> +
> + leds: leds {
> + compatible = "gpio-leds";
> + pinctrl-names = "default";
> + pinctrl-0 = <&led_green_pin>;
> +
> + green_led: green-led {
> + color = <LED_COLOR_ID_GREEN>;
> + function = LED_FUNCTION_HEARTBEAT;
> + gpios = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>;
> + linux,default-trigger = "heartbeat";
> + };
> + };
> +};
> +
> +&pinctrl {
> + leds {
> + led_green_pin: led-green-pin {
> + rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
> + };
> + };
> +};
> +
> +&sdmmc {
> + bus-width = <4>;
> + cap-mmc-highspeed;
> + cap-sd-highspeed;
> + disable-wp;
> + max-frequency = <200000000>;
As far as I could tell, this is already the max frequency in rk3576.dtsi
so no need to define it once again?
> + no-sdio;
> + sd-uhs-sdr104;
> + vmmc-supply = <&vcc_3v3_s3>;
> + vqmmc-supply = <&vccio_sd_s0>;
If some of those are well-defined and "forced" by the HW design and pins
exposed on the connectors of the module, you could move them to the SoM
DTSI instead, to avoid having to specify them for each motherboard using
the sdmmc controller?
Cheers,
Quentin
More information about the linux-arm-kernel
mailing list