arm64: dts: rockchip: Add support for Axelera Embedded 111c
Subsystems (2)
v3 cover arm64: dts: rockchip: Add support for Axelera Embedded 111c
The Axelera Embedded 111c is an SBC based on the Rockchip RK3588 SoC. It offers efficient AI compute for multi-stream computer vision and generative AI applications in a compact design.
Product page [1].
This series aims to introduce basic support for the board, which includes the console, the eMMC, the two Gigabit Ethernet ports, the four USB ports and the HDMI connector.
Changes in v3:
- Address Heiko's comment about the incorrect Signed-off-by chain.
- Address Heiko's comment about the dts name being too generic.
- Address Heiko's comment about the deprecated "regulator-suspend-microvolt" property.
- Add Copyright header on dts.
- Add Krzysztof's Acked-by.
Changes in v2:
- The board was renamed by Axelera between v1 and v2, from "Metis Compute Board" to "Embedded 111c". Address the name change. Drop Conor's Acked-by on the bindings, since the compatible changed. Keep it on the vendor-prefix.
- Address Heiko's comment about regulator node names starting with "regulator-".
- Address Heiko's comment about non-existent "mem-supply" binding.
- Address Heiko's comment about dropping the unneeded "Use rgmii-rxid mode to disable rx delay inside Soc" comment; checkpatch complains about uncommented rgmii-rxid, so take the one from rk3588-youyeetoo-yy3588.
- Address Heiko's comment about reset lines of the phy nodes being incorrectly described in the gmac node; note that these are still not described in the phy node because GPIO3_B7 defaults to pull-down, which causes the rgmii_phy1 node to never come up; rgmii_phy0's reset GPIO, GPIO4_B3, defaults to pull-up, so that node does not encounter the same issue. Moving the reset to the parent mdio node instead did the trick.
- Address Sashiko's high severity comment about hdmi0 node mixing M0 and M1 pinmux groups; use the existing hdmim1_tx0_hpd pinctrl group instead of redefining it. HPD is wired to M1 while CEC and DDC use the M0 pins. Verified hot-plug detection on external display.
- Address Sashiko's medium comment about "full-pwr-cycle-in-suspend" and missing "vmmc-supply" and "vqmmc-supply" on the eMMC node; drop the former, add the latter two.
- Address Sashiko's medium comment about the pmic node lacking a pinctrl assignment for the interrupt pin; add it.
- Address Sashiko's medium comment about the "vcc3v3_hubreset" regulator hack; describe the two GL3523 hubs linked with peer-hub.
- Address Sashiko's low comment about defined-but-never-referenced regulators without regulator-always-on property; drop them, alongside their pinctrls.
- Mux PCIEX4_PERST_N as GPIO, to match it being used via reset-gpios.
- Drop the unused input.h include.
- Drop the unused rtc label.
- Drop the local PCIe x1 pinctrl groups, which duplicated the pcie30x1m1_1_* groups in rk3588-base-pinctrl.dtsi.
Link to v1: [2].
Link to v2: [3].
[1]: https://axelera.ai/axelera-products/embedded/111c
[2]: https://lore.kernel.org/all/[email protected]
[3]: https://lore.kernel.org/all/[email protected]
Patrick Barsanti (3):
dt-bindings: vendor-prefixes: Add Axelera AI
dt-bindings: arm: rockchip: Add Axelera Embedded 111c
arm64: dts: rockchip: Add Axelera Embedded 111c
.../devicetree/bindings/arm/rockchip.yaml | 5 + .../devicetree/bindings/vendor-prefixes.yaml | 2 + arch/arm64/boot/dts/rockchip/Makefile | 1 + .../rockchip/rk3588-axelera-embedded-111c.dts | 810 ++++++++++++++++++ 4 files changed, 818 insertions(+) create mode 100644 arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts
Signature · 1 line
2.53.0
PATCH v3 1/3 dt-bindings: vendor-prefixes: Add Axelera AI
Axelera AI is an EU-based provider of AIPUs for edge AI inference.
--- Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ 1 file changed, 2 insertions(+)
Documentation/devicetree/bindings/vendor-prefixes.yaml +2 -0
@@ -221,6 +221,8 @@ patternProperties: description: Avnet, Inc. "^awinic,.*": description: Shanghai Awinic Technology Co., Ltd. + "^axelera,.*": + description: Axelera AI B.V. "^axentia,.*": description: Axentia Technologies AB "^axiado,.*":
Signature · 1 line
2.53.0
PATCH v3 2/3 dt-bindings: arm: rockchip: Add Axelera Embedded 111c
In reply to Patrick BarsantiThe Axelera Embedded 111c is an SBC based on the Rockchip RK3588 SoC.
Specification:
- Rockchip RK3588
- 16GB LPDDR4
- Axelera AI Metis AIPU, 4GB/16GB LPDDR4X
- 64GB eMMC
- uSD slot
- 2x SATA ports
- 2x Gigabit LAN
- 1x M.2 E key
- 1x M.2 B key
- 1x HDMI2.0
- 1x USB-C with DP
- 4x USB3.1
---
Changes in v3:
- Add Krzysztof's Acked-by
Changes in v2:
- Rename the board and its compatible following the name change from metis-sbc to embedded-111c
- Drop Conor's Acked-by since the compatible has changed
Documentation/devicetree/bindings/arm/rockchip.yaml | 5 +++++ 1 file changed, 5 insertions(+)
Documentation/devicetree/bindings/arm/rockchip.yaml +5 -0
@@ -120,6 +120,11 @@ properties: - asus,rk3566-tinker-board-3s - const: rockchip,rk3566 + - description: Axelera Embedded 111c + items: + - const: axelera,embedded-111c + - const: rockchip,rk3588 + - description: Beelink A1 items: - const: azw,beelink-a1
Signature · 1 line
2.53.0
PATCH v3 3/3 arm64: dts: rockchip: Add Axelera Embedded 111c
In reply to Patrick BarsantiAdd minimal device tree for the Axelera Embedded 111c (rk3588-axelera-embedded-111c).
It offers efficient AI compute for multi-stream computer vision and GenAI applications in a compact design. It features a quad-core Axelera AI Metis AIPU and an RK3588 SoC processor.
This basic version of the dts supports:
- Console
- eMMC
- HDMI
- 4x USB-A
- 2x Gigabit Ethernet
- RTC
- Enumeration of on-board Axelera Metis AIPU
---
Changes in v3:
- Rename from rk3588-embedded-111c.dts to rk3588-axelera-embedded-111c.dts
- Drop deprecated "regulator-suspend-microvolt" property
- Add Co-developed-by to the sign-off chain from Michael and Dario. (The process was: the first version of the downstream dts for the Rockchip kernel we've been using since 2024 was authored by Michael with some of my help. The first version of this upstream dts was co-developed by Dario and Michael together and in-person at a workshop. Later on this was picked up by me and largely re-written, but without their contribution and their prior work this series would not exist. I hope having all three of us as Co-developers on this patch, given the particular circumstances, is alright :))
- Add Copyright from Amarula Solutions
Changes in v2:
- Prepend "regulator-" to regulator nodes
- Drop non-existent "mem-supply" binding
- Drop unneeded comment from rgmii-rxid; replace it with the one from rk3588-youyeetoo-yy3588 to stop checkpatch from complaining
- Remove phy reset from the gmac node; note that these are still not described in the phy node because GPIO3_B7 defaults to pull-down, which causes the rgmii_phy1 node to never come up. Describing the reset in the parent mdio node instead does not cause the same issue
- Use the existing hdmim1_tx0_hpd pinctrl group instead of redefining it
- Drop "full-pwr-cycle-in-suspend" from the eMMC node
- Add "vmmc-supply" and "vqmmc-supply" to the eMMC node
- Add pinctrl for the pmic interrupt pin
- Replace the "vcc3v3_hubreset" regulator hack with two GL3523 hubs linked with "peer-hub".
- Drop the regulators that were defined but never referenced, and their corresponding pinctrls
- Mux PCIEX4_PERST_N as GPIO, since it is being used as reset-gpios
- Drop unused input.h include
- Drop unused rtc label
- Drop the local pciex1 pinctrl groups, as they were duplicates of the pcie30x1m1_1_* groups in the base pinctrl for the rk3588
arch/arm64/boot/dts/rockchip/Makefile | 1 + .../rockchip/rk3588-axelera-embedded-111c.dts | 810 ++++++++++++++++++ 2 files changed, 811 insertions(+) create mode 100644 arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts
arch/arm64/boot/dts/rockchip/Makefile +1 -0
@@ -191,6 +191,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3582-radxa-e52c.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3582-radxa-e54c.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-armsom-sige7.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-armsom-w3.dtb +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-axelera-embedded-111c.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-coolpi-cm5-evb.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-coolpi-cm5-genbook.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-edgeble-neu6a-io.dtb
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts new file +810 -0
810 lines not on this page · raw message
Signature · 1 line
2.53.0
[email protected]
AI reviewRe: [PATCH v3 3/3] arm64: dts: rockchip: Add Axelera Embedded 111c
Thank you for your contribution! Sashiko AI review found 4 potential issues to consider: - [High] arm64: dts: rockchip: missing domain-supply on pd_gpu in 111c - [Medium] arm64: dts: rockchip: tsadc…
Thank you for your contribution! Sashiko AI review found 4 potential issues to consider:
- [High] arm64: dts: rockchip: missing domain-supply on pd_gpu in 111c
- [Medium] arm64: dts: rockchip: tsadc left disabled in 111c with active OPPs
- [Low] arm64: dts: rockchip: invalid phy@ node names in 111c mdio nodes
- [Low] arm64: dts: rockchip: unreferenced vcc3v3_m2 and pcie avdd regulators in 111c
--
commit 607ecf41e5900d1d5b78865cbefcac07bdaf3309
Author: Patrick Barsanti <[email protected]>
arm64: dts: rockchip: Add Axelera Embedded 111c
This commit adds the initial device tree for the RK3588-based Axelera Embedded 111c board.
Quoted 6 lines
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts new file +0
-0@@ -0,0 +1,810 @@
[ ... ]
Quoted 39 lines
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts new file +39
-0+ pcie20_avdd0v85: regulator-pcie20-avdd0v85 { + compatible = "regulator-fixed"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <850000>; + regulator-max-microvolt = <850000>; + regulator-name = "pcie20_avdd0v85"; + vin-supply = <&vdda_0v85_s0>; + }; + + pcie20_avdd1v8: regulator-pcie20-avdd1v8 { + compatible = "regulator-fixed"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-name = "pcie20_avdd1v8"; + vin-supply = <&vcca_1v8_s0>; + }; + + pcie30_avdd0v75: regulator-pcie30-avdd0v75 { + compatible = "regulator-fixed"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <750000>; + regulator-max-microvolt = <750000>; + regulator-name = "pcie30_avdd0v75"; + vin-supply = <&hdmi_vdda0v85_s0>; + }; + + pcie30_avdd1v8: regulator-pcie30-avdd1v8 { + compatible = "regulator-fixed"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-name = "pcie30_avdd1v8"; + vin-supply = <&vcca_1v8_s0>; + };
[ ... ]
Quoted 13 lines
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts new file +13
-0+ vcc3v3_m2: regulator-vcc3v3-m2 { + compatible = "regulator-fixed"; + enable-active-high; + gpio = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; /* PCIE_PWREN_H */ + pinctrl-0 = <&pcie_pwren_h>; + pinctrl-names = "default"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-name = "3v_m2"; + vin-supply = <&vcc3v3_sus>; + };
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts line 133
Quoted 10 lines
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts new file +10
-0+ + vcc3v3_sus: regulator-vcc3v3-sus { + compatible = "regulator-fixed"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-name = "3vsus"; + vin-supply = <&vcc12v_dcin>; + };
[Severity: Low]
Are vcc3v3_m2, vcc3v3_sus, pcie20_avdd0v85, pcie20_avdd1v8, pcie30_avdd0v75, and pcie30_avdd1v8 still needed here? None of these regulators (nor the pcie_pwren_h pinctrl group) are referenced anywhere in this device tree, and vcc3v3_m2 unconditionally claims GPIO0_C4 and drives the M.2 power rail high at boot even though only &pcie3x4 (supplied by vcc_1v8_pcie) is enabled.
[ ... ]
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts line 237
Quoted 4 lines
+&gpu {
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts new file +3
-0+ mali-supply = <&vdd_gpu_s0>; + status = "okay"; +};
[Severity: High]
Does &pd_gpu also need domain-supply = <&vdd_gpu_s0>?
In drivers/pmdomain/rockchip/pm-domains.c, RK3588_PD_GPU sets need_regulator = true so rockchip_pd_regulator_enable() looks up domain-supply before powering on the hardware domain. Because vdd_gpu_s0 is only regulator-boot-on, if panthor probes as a module after unused regulators are disabled or if the GPU domain is cycled across runtime PM, genpd will substitute a dummy regulator and power on RK3588_PD_GPU while vdd_gpu_s0 is off, hanging the system as described in f94500eb7328 ("arm64: dts: rockchip: Add GPU power domain regulator dependency for RK3588").
[ ... ]
Quoted 11 lines
+&mdio0 {
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts new file +10
-0+ reset-gpios = <&gpio4 RK_PB3 GPIO_ACTIVE_LOW>; /* GMAC0_RST_N */ + reset-delay-us = <20000>; + reset-post-delay-us = <100000>; + + rgmii_phy0: phy@1 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <0x1>; + }; +}; +
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts line 364
Quoted 10 lines
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts new file +10
-0+&mdio1 { + reset-gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; /* GMAC1_RST_N */ + reset-delay-us = <20000>; + reset-post-delay-us = <100000>; + + rgmii_phy1: phy@3 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <0x3>; + }; +};
[Severity: Low]
Should phy@1 and phy@3 be named ethernet-phy@1 and ethernet-phy@3? Documentation/devicetree/bindings/net/ethernet-phy.yaml selects nodes by matching $nodename against ^ethernet-phy(@[a-f0-9]+)?$, so make dtbs_check fails to match these nodes against the binding.
[ ... ]
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts line 431
Quoted 4 lines
+&saradc {
arch/arm64/boot/dts/rockchip/rk3588-axelera-embedded-111c.dts new file +3
-0+ vref-supply = <&vcca_1v8_s0>; + status = "okay"; +};
[Severity: Medium]
Should &tsadc also be enabled here?
This board enables CPU and GPU voltage supplies with rk3588.dtsi OPPs, allowing DVFS scaling up to the maximum turbo frequencies, while &tsadc remains disabled by default in rk3588-base.dtsi. Without &tsadc enabled, all seven SoC thermal zones and hardware over-temperature shutdown remain inactive.
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=3