[PATCH v2 2/2] arm64: dts: rockchip: Add rk3399-evb-ind board
Chaoyi Chen
chaoyi.chen at rock-chips.com
Wed Apr 30 03:19:40 PDT 2025
Hi Quentin,
On 2025/4/30 16:39, Quentin Schulz wrote:
> Hi Chaoyi Chen,
>
> On 4/30/25 9:48 AM, Chaoyi Chen wrote:
>> From: Chaoyi Chen <chaoyi.chen at rock-chips.com>
>>
>> General feature for rk3399 industry evaluation board:
>> - Rockchip RK3399
>
> Quick question, is this really an RK3399 or rather an RK3399K (the
> industrial grade)? If it's a K variant, then we need a new
> rk3399-k.dtsi with the appropriate OPPs and include that instead.
Yes, it is really an RK3399.
>
>> - 4GB LPDDR4
>> - emmc5.1
>> - SDIO3.0 compatible TF card
>> - 1x HDMI2.0a TX
>> - 1x HDMI1.4b RX with TC358749XBG HDMI to MIPI CSI2 bridge chip
>> - 1x type-c DisplayPort
>> - 3x USB3.0 Host
>> - 1x USB2.0 Host
>> - 1x Ethernet / USB3.0 to Ethernet
>>
>> Tested with HDMI/GPU/USB2.0/USB3.0/TF card/emmc.
>>
>> Signed-off-by: Chaoyi Chen <chaoyi.chen at rock-chips.com>
>> ---
>>
>> Changes in v2:
>> - Remove gmac
>> - Add rk809 PMIC
>> - Add CPU supply
>> - Fix io-domain for sdmmc
>> - Enable vopl
>>
>> arch/arm64/boot/dts/rockchip/Makefile | 1 +
>> .../boot/dts/rockchip/rk3399-evb-ind.dts | 466 ++++++++++++++++++
>> 2 files changed, 467 insertions(+)
>> create mode 100644 arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dts
>>
>> diff --git a/arch/arm64/boot/dts/rockchip/Makefile
>> b/arch/arm64/boot/dts/rockchip/Makefile
>> index 3e8771ef69ba..8a3adb7482ca 100644
>> --- a/arch/arm64/boot/dts/rockchip/Makefile
>> +++ b/arch/arm64/boot/dts/rockchip/Makefile
>> @@ -40,6 +40,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-px5-evb.dtb
>> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-r88.dtb
>> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-eaidk-610.dtb
>> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-evb.dtb
>> +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-evb-ind.dtb
>> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-ficus.dtb
>> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-firefly.dtb
>> dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-bob.dtb
>> diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dts
>> b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dts
>> new file mode 100644
>> index 000000000000..ebfe7e56b3f5
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dts
>> @@ -0,0 +1,466 @@
>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>> +/*
>> + * Copyright (c) 2025 Rockchip Electronics Co., Ltd.
>> + */
>> +
>> +/dts-v1/;
>> +#include "rk3399-base.dtsi"
>> +
>
> You're supposed to include one device tree include with OPPs. I see
> that the rk3399-evb is the only one that does that.
>
> According to 296602b8e5f7 ("arm64: dts: rockchip: Move RK3399 OPPs to
> dtsi files for SoC variants"), this was done because:
>
> The only exception to the "include only a SoC variant dtsi" is
> found in
> rk3399-evb.dts, which includes rk3399-base.dtsi instead of
> rk3399.dtsi.
> This is intentional, because this board dts file doesn't enable
> the TSADC,
> so including rk3399.dtsi would enable the SoC to go into higher
> OPPs with
> no thermal throttling in place. Let's hope that people interested
> in this
> board will fix this in the future.
>
> Soooo, maybe you could fix that now? At the very least for the
> industrial variant (but it would also be most welcomed for the
> "normal" EVB).
>
I think this should include "rk3399.dtsi", since this is just the normal
version of RK3399. I will investigate further about rk3399-evb.
>> +/ {
>> + model = "Rockchip RK3399 EVB IND LPDDR4 Board";
>> + compatible = "rockchip,rk3399-evb-ind", "rockchip,rk3399";
>> +
>> + aliases {
>> + ethernet0 = &gmac;
>
> Considering gmac is gone from the DT, maybe you want to have that one
> in the patch that will add Ethernet support?
Yes, there will be an additional series. I will remove them in v3 for now.
>
>> + mmc0 = &sdhci;
>> + mmc1 = &sdmmc;
>> + };
>> +
>> + chosen {
>> + stdout-path = "serial2:1500000n8";
>> + };
>> +
>> + vcc5v0_sys: regulator-vcc5v0-sys {
>> + compatible = "regulator-fixed";
>> + enable-active-high;
>> + gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
>> + regulator-name = "vcc5v0_sys";
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <5000000>;
>> + regulator-min-microvolt = <5000000>;
>> + };
>> +};
>> +
>> +&cpu_l0 {
>> + cpu-supply = <&vdd_cpu_l>;
>> +};
>> +
>> +&cpu_l1 {
>> + cpu-supply = <&vdd_cpu_l>;
>> +};
>> +
>> +&cpu_l2 {
>> + cpu-supply = <&vdd_cpu_l>;
>> +};
>> +
>> +&cpu_l3 {
>> + cpu-supply = <&vdd_cpu_l>;
>> +};
>> +
>> +&cpu_b0 {
>> + cpu-supply = <&vdd_cpu_b>;
>> +};
>> +
>> +&cpu_b1 {
>> + cpu-supply = <&vdd_cpu_b>;
>> +};
>> +
>
> Please order the nodes alphabetically, so cpu_bX before cpu_lX. See
> https://www.kernel.org/doc/html/latest/devicetree/bindings/dts-coding-style.html
Will fix in v3.
>
>> +&emmc_phy {
>> + status = "okay";
>> +};
>> +
>> +&gpu {
>> + mali-supply = <&vdd_gpu>;
>> + status = "okay";
>> +};
>> +
>> +&hdmi {
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&hdmi_i2c_xfer>, <&hdmi_cec>;
>> + status = "okay";
>> +};
>> +
>> +&hdmi_sound {
>> + status = "okay";
>> +};
>> +
>
> hdmi_sound requires i2s2 controller to be enabled too, but I don't see
> it in this device tree?
Will fix in v3.
>
>> +&i2c0 {
>> + clock-frequency = <400000>;
>> + i2c-scl-falling-time-ns = <4>;
>> + i2c-scl-rising-time-ns = <168>;
>> + status = "okay";
>> +
>> + rk809: pmic at 20 {
>> + compatible = "rockchip,rk809";
>> + reg = <0x20>;
>> + interrupt-parent = <&gpio1>;
>> + interrupts = <RK_PC5 IRQ_TYPE_LEVEL_LOW>;
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&pmic_int_l>;
>> + rockchip,system-power-controller;
>> + #clock-cells = <1>;
>> + pmic-reset-func = <0>;
>> + wakeup-source;
>> + clock-output-names = "xin32k", "rk808-clkout2";
>> +
>
> Please order properties correctly, see
> https://www.kernel.org/doc/html/latest/devicetree/bindings/dts-coding-style.html
Will fix in v3.
>
>> + vcc1-supply = <&vcc5v0_sys>;
>> + vcc2-supply = <&vcc5v0_sys>;
>> + vcc3-supply = <&vcc5v0_sys>;
>> + vcc4-supply = <&vcc5v0_sys>;
>> + vcc5-supply = <&vcc_buck5>;
>> + vcc6-supply = <&vcc_buck5>;
>> + vcc7-supply = <&vcc5v0_sys>;
>> + vcc8-supply = <&vcc3v3_sys>;
>> + vcc9-supply = <&vcc5v0_sys>;
>> +
>> + regulators {
>> + vdd_center: DCDC_REG1 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-initial-mode = <0x2>;
>> + regulator-max-microvolt = <1350000>;
>> + regulator-min-microvolt = <750000>;
>> + regulator-ramp-delay = <6001>;
>> + regulator-name = "vdd_center";
>
> Missing blank line between last property and first child node, see
> https://www.kernel.org/doc/html/latest/devicetree/bindings/dts-coding-style.html.
> Same remark for all other regulators.
Will fix them in v3.
>
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> +
>> + vdd_cpu_l: DCDC_REG2 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-initial-mode = <0x2>;
>> + regulator-max-microvolt = <1350000>;
>> + regulator-min-microvolt = <750000>;
>> + regulator-ramp-delay = <6001>;
>> + regulator-name = "vdd_cpu_l";
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> +
>> + vcc_ddr: DCDC_REG3 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-initial-mode = <0x2>;
>> + regulator-name = "vcc_ddr";
>> + regulator-state-mem {
>> + regulator-on-in-suspend;
>> + };
>> + };
>> +
>> + vcc3v3_sys: DCDC_REG4 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-initial-mode = <0x2>;
>> + regulator-max-microvolt = <3300000>;
>> + regulator-min-microvolt = <3300000>;
>> + regulator-name = "vcc3v3_sys";
>> + regulator-state-mem {
>> + regulator-on-in-suspend;
>> + regulator-suspend-microvolt = <3300000>;
>> + };
>> + };
>> +
>> + vcc_buck5: DCDC_REG5 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <2200000>;
>> + regulator-min-microvolt = <2200000>;
>> + regulator-name = "vcc_buck5";
>> + regulator-state-mem {
>> + regulator-on-in-suspend;
>> + regulator-suspend-microvolt = <2200000>;
>> + };
>> + };
>> +
>> + vcca_0v9: LDO_REG1 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <900000>;
>> + regulator-min-microvolt = <900000>;
>> + regulator-name = "vcca_0v9";
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> +
>> + vcc_1v8: LDO_REG2 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <1800000>;
>> + regulator-min-microvolt = <1800000>;
>> + regulator-name = "vcc_1v8";
>> + regulator-state-mem {
>> + regulator-on-in-suspend;
>> + regulator-suspend-microvolt = <1800000>;
>> + };
>> + };
>> +
>> + vcc0v9_soc: LDO_REG3 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <900000>;
>> + regulator-min-microvolt = <900000>;
>> + regulator-name = "vcc0v9_soc";
>> + regulator-state-mem {
>> + regulator-on-in-suspend;
>> + regulator-suspend-microvolt = <900000>;
>> + };
>> + };
>> +
>> + vcca_1v8: LDO_REG4 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <1800000>;
>> + regulator-min-microvolt = <1800000>;
>> + regulator-name = "vcca_1v8";
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> +
>> + vdd1v5_dvp: LDO_REG5 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <1500000>;
>> + regulator-min-microvolt = <1500000>;
>> + regulator-name = "vdd1v5_dvp";
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> +
>> + vcc_1v5: LDO_REG6 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <1500000>;
>> + regulator-min-microvolt = <1500000>;
>> + regulator-name = "vcc_1v5";
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> +
>> + vcc_3v0: LDO_REG7 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <3000000>;
>> + regulator-min-microvolt = <3000000>;
>> + regulator-name = "vcc_3v0";
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> +
>> + vccio_sd: LDO_REG8 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <3300000>;
>> + regulator-min-microvolt = <1800000>;
>> + regulator-name = "vccio_sd";
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> +
>> + vcc_sd: LDO_REG9 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <3300000>;
>> + regulator-min-microvolt = <3300000>;
>> + regulator-name = "vcc_sd";
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> +
>> + vcc5v0_usb: SWITCH_REG1 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-name = "vcc5v0_usb";
>> + regulator-state-mem {
>> + regulator-on-in-suspend;
>> + };
>> + };
>> +
>> + vccio_3v3: SWITCH_REG2 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-name = "vccio_3v3";
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>> + };
>> + };
>> + };
>> +
>> + vdd_cpu_b: tcs4525 at 1c {
>
> Please set the node name to regulator at 1c.
Will fix in v3.
>
>> + compatible = "tcs,tcs4525";
>> + reg = <0x1c>;
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&vsel1_gpio>;
>> + fcs,suspend-voltage-selector = <1>;
>> + vin-supply = <&vcc5v0_sys>;
>> + vsel-gpios = <&gpio1 RK_PC1 GPIO_ACTIVE_HIGH>;
>> + regulator-compatible = "fan53555-reg";
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-initial-state = <3>;
>> + regulator-max-microvolt = <1500000>;
>> + regulator-min-microvolt = <712500>;
>> + regulator-name = "vdd_cpu_b";
>> + regulator-ramp-delay = <1000>;
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>
> Properties order and blank line before child node, see
> https://www.kernel.org/doc/html/latest/devicetree/bindings/dts-coding-style.html
Will fix in v3.
>
>> + };
>> +
>> + vdd_gpu: tcs4526 at 10 {
>
> Please set node name to regulator at 10.
>
> Please order child nodes in busses based on their address, i.e.:
>
> vdd_gpu
> vdd_cpu_b
> rk809
>
> in this case.
Will fix in v3.
>
>
>> + compatible = "tcs,tcs4525";
>> + reg = <0x10>;
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&vsel2_gpio>;
>> + fcs,suspend-voltage-selector = <1>;
>> + vin-supply = <&vcc5v0_sys>;
>> + vsel-gpios = <&gpio1 RK_PB6 GPIO_ACTIVE_HIGH>;
>> + regulator-compatible = "fan53555-reg";
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-initial-state = <3>;
>> + regulator-max-microvolt = <1500000>;
>> + regulator-min-microvolt = <712500>;
>> + regulator-name = "vdd_gpu";
>> + regulator-ramp-delay = <1000>;
>> + regulator-state-mem {
>> + regulator-off-in-suspend;
>> + };
>
> Properties order and blank line before child node, see
> https://www.kernel.org/doc/html/latest/devicetree/bindings/dts-coding-style.html
Will fix in v3.
>
>> + };
>> +};
>> +
>> +&io_domains {
>> + audio-supply = <&vcca_1v8>;
>> + bt656-supply = <&vcc_3v0>;
>> + gpio1830-supply = <&vcc_3v0>;
>> + sdmmc-supply = <&vccio_sd>;
>> + status = "okay";
>> +};
>
> What about pmu_io_domains too?
>
Sorry, I missed it. Will fix in v3.
>> +
>> +&sdmmc {
>> + bus-width = <4>;
>> + cap-mmc-highspeed;
>> + cap-sd-highspeed;
>> + disable-wp;
>> + no-sdio;
>> + no-mmc;
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>;
>> + sd-uhs-sdr104;
>> + vmmc-supply = <&vcc_sd>;
>> + vqmmc-supply = <&vccio_sd>;
>> + status = "okay";
>> +};
>> +
>> +&sdhci {
>
> This should be before sdmmc
Will fix in v3.
>
>> + bus-width = <8>;
>> + keep-power-in-suspend;
>> + mmc-hs400-1_8v;
>> + mmc-hs400-enhanced-strobe;
>> + no-sdio;
>> + no-sd;
>> + non-removable;
>> + status = "okay";
>> +};
>> +
>> +&tcphy0 {
>> + status = "okay";
>> +};
>> +
>> +&tcphy1 {
>> + status = "okay";
>> +};
>> +
>
> What about tsadc?
Oh, there's a tsadc. I'll add it in v3.
>
>> +&u2phy0 {
>> + status = "okay";
>> +};
>> +
>> +&u2phy0_host {
>> + status = "okay";
>> +};
>> +
>> +&u2phy0_otg {
>> + status = "okay";
>> +};
>> +
>> +&u2phy1 {
>> + status = "okay";
>> +};
>> +
>> +&u2phy1_host {
>> + status = "okay";
>> +};
>> +
>> +&u2phy1_otg {
>> + status = "okay";
>> +};
>> +
>> +&uart2 {
>> + status = "okay";
>> +};
>> +
>> +&usbdrd_dwc3_0 {
>> + status = "okay";
>> +};
>> +
>> +&usbdrd3_0 {
>> + status = "okay";
>> +};
>> +
>> +&usbdrd3_1 {
>> + status = "okay";
>> +};
>> +
>> +&usbdrd_dwc3_1 {
>> + dr_mode = "host";
>> + status = "okay";
>> +};
>> +
>> +&usb_host0_ehci {
>> + status = "okay";
>> +};
>> +
>> +&usb_host0_ohci {
>> + status = "okay";
>> +};
>> +
>> +&usb_host1_ehci {
>> + status = "okay";
>> +};
>> +
>> +&usb_host1_ohci {
>> + status = "okay";
>> +};
>> +
>> +&pinctrl {
>
> This needs to be ordered alphabetically, see
> https://www.kernel.org/doc/html/latest/devicetree/bindings/dts-coding-style.html
> (so before sdhci here).
Thank you for the quick reply! I will fix them in v3.
> Cheers,
> Quentin
>
>
More information about the Linux-rockchip
mailing list