* [PATCH v2 0/2] riscv: dts: spacemit: k3: Add USB/PCIe devices
@ 2026-07-27 9:47 Inochi Amaoto
2026-07-27 9:47 ` [PATCH v2 1/2] riscv: dts: spacemit: k3: add USB controller and USB phy support Inochi Amaoto
2026-07-27 9:47 ` [PATCH v2 2/2] riscv: dts: spacemit: k3: Add PCIe device node Inochi Amaoto
0 siblings, 2 replies; 6+ messages in thread
From: Inochi Amaoto @ 2026-07-27 9:47 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Yixun Lan
Cc: Inochi Amaoto, devicetree, linux-riscv, spacemit, linux-kernel,
Yixun Lan, Longbin Li
DTS for series:
https://lore.kernel.org/linux-pci/20260709040027.958400-1-inochiama@gmail.com
https://lore.kernel.org/linux-phy/20260703021024.495433-1-inochiama@gmail.com
Changed from v1:
1. Fix clock of usb3d_u2phy.
Inochi Amaoto (2):
riscv: dts: spacemit: k3: add USB controller and USB phy support
riscv: dts: spacemit: k3: Add PCIe device node
arch/riscv/boot/dts/spacemit/k3-pico-itx.dts | 51 ++++
arch/riscv/boot/dts/spacemit/k3-pinctrl.dtsi | 33 +++
arch/riscv/boot/dts/spacemit/k3.dtsi | 237 +++++++++++++++++++
3 files changed, 321 insertions(+)
--
2.55.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] riscv: dts: spacemit: k3: add USB controller and USB phy support
2026-07-27 9:47 [PATCH v2 0/2] riscv: dts: spacemit: k3: Add USB/PCIe devices Inochi Amaoto
@ 2026-07-27 9:47 ` Inochi Amaoto
2026-07-27 10:04 ` sashiko-bot
2026-07-27 10:13 ` Yixun Lan
2026-07-27 9:47 ` [PATCH v2 2/2] riscv: dts: spacemit: k3: Add PCIe device node Inochi Amaoto
1 sibling, 2 replies; 6+ messages in thread
From: Inochi Amaoto @ 2026-07-27 9:47 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Yixun Lan
Cc: Inochi Amaoto, devicetree, linux-riscv, spacemit, linux-kernel,
Yixun Lan, Longbin Li
Add all USB device node to the Spacemit K3.
Signed-off-by: Inochi Amaoto <inochiama@gmail.com>
---
arch/riscv/boot/dts/spacemit/k3-pico-itx.dts | 13 ++++++
arch/riscv/boot/dts/spacemit/k3.dtsi | 42 ++++++++++++++++++++
2 files changed, 55 insertions(+)
diff --git a/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts b/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
index b89c1521e664..2a6d35a64d5c 100644
--- a/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
+++ b/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
@@ -182,6 +182,11 @@ dldo7: dldo7 {
};
};
+&combophy {
+ spacemit,apmu = <&syscon_apmu 0x11>;
+ status = "okay";
+};
+
ð0 {
pinctrl-names = "default";
pinctrl-0 = <&gmac0_rgmii_0_cfg>, <&gmac0_phy_0_cfg>;
@@ -221,3 +226,11 @@ hub@1 {
&usb2_phy {
status = "okay";
};
+
+&usb3d_u2phy {
+ status = "okay";
+};
+
+&usb3d {
+ status = "okay";
+};
diff --git a/arch/riscv/boot/dts/spacemit/k3.dtsi b/arch/riscv/boot/dts/spacemit/k3.dtsi
index 19fc9b49668e..7863ab7dd308 100644
--- a/arch/riscv/boot/dts/spacemit/k3.dtsi
+++ b/arch/riscv/boot/dts/spacemit/k3.dtsi
@@ -7,6 +7,7 @@
#include <dt-bindings/clock/spacemit,k3-clocks.h>
#include <dt-bindings/reset/spacemit,k3-resets.h>
#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/phy/phy.h>
/dts-v1/;
@@ -438,6 +439,47 @@ soc: soc {
dma-noncoherent;
ranges;
+ usb3d: usb@81a00000 {
+ compatible = "spacemit,k3-dwc3";
+ reg = <0x0 0x81a00000 0x0 0x10000>;
+ interrupts = <149 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-parent = <&saplic>;
+ clocks = <&syscon_apmu CLK_APMU_USB3_PORTD_BUS>;
+ clock-names = "usbdrd30";
+ resets = <&syscon_apmu RESET_APMU_USB3_D_AHB>,
+ <&syscon_apmu RESET_APMU_USB3_D_VCC>,
+ <&syscon_apmu RESET_APMU_USB3_D_PHY>;
+ reset-names = "ahb", "vcc", "phy";
+ phys = <&usb3d_u2phy>,
+ <&combophy 4 PHY_TYPE_USB3>;
+ phy-names = "usb2-phy", "usb3-phy";
+ phy_type = "utmi";
+ snps,dis_enblslpm_quirk;
+ snps,dis_u2_susphy_quirk;
+ snps,dis_u3_susphy_quirk;
+ snps,dis-del-phy-power-chg-quirk;
+ snps,dis-tx-ipgap-linecheck-quirk;
+ snps,parkmode-disable-ss-quirk;
+ dr_mode = "host";
+ status = "disabled";
+ };
+
+ usb3d_u2phy: phy@81b00000 {
+ compatible = "spacemit,k3-usb2-phy";
+ reg = <0x0 0x81b00000 0x0 0x200>;
+ clocks = <&syscon_apmu CLK_APMU_USB3_PORTD_BUS>;
+ #phy-cells = <0>;
+ status = "disabled";
+ };
+
+ combophy: phy@81d00000 {
+ compatible = "spacemit,k3-combo-phy";
+ reg = <0x0 0x81d00000 0x0 0x600000>;
+ #phy-cells = <2>;
+ spacemit,apb-spare = <&pll>;
+ status = "disabled";
+ };
+
usb2_host: usb@c0a00000 {
compatible = "spacemit,k3-dwc3";
reg = <0x0 0xc0a00000 0x0 0x10000>;
--
2.55.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] riscv: dts: spacemit: k3: Add PCIe device node
2026-07-27 9:47 [PATCH v2 0/2] riscv: dts: spacemit: k3: Add USB/PCIe devices Inochi Amaoto
2026-07-27 9:47 ` [PATCH v2 1/2] riscv: dts: spacemit: k3: add USB controller and USB phy support Inochi Amaoto
@ 2026-07-27 9:47 ` Inochi Amaoto
2026-07-27 10:14 ` sashiko-bot
1 sibling, 1 reply; 6+ messages in thread
From: Inochi Amaoto @ 2026-07-27 9:47 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Yixun Lan
Cc: Inochi Amaoto, devicetree, linux-riscv, spacemit, linux-kernel,
Yixun Lan, Longbin Li
Add all PCIe device node for Spacemit K3.
Signed-off-by: Inochi Amaoto <inochiama@gmail.com>
---
arch/riscv/boot/dts/spacemit/k3-pico-itx.dts | 38 ++++
arch/riscv/boot/dts/spacemit/k3-pinctrl.dtsi | 33 ++++
arch/riscv/boot/dts/spacemit/k3.dtsi | 195 +++++++++++++++++++
3 files changed, 266 insertions(+)
diff --git a/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts b/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
index 2a6d35a64d5c..1eb5abbc61f9 100644
--- a/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
+++ b/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
@@ -205,6 +205,44 @@ phy0: phy@1 {
};
};
+&pcie0_rc {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie0_0_cfg>;
+ num-lanes = <4>;
+ status = "okay";
+
+ pcie@0 {
+ vpcie3v3-supply = <®_aux_vcc3v3>;
+ phys = <&combophy 0 PHY_TYPE_PCIE>,
+ <&combophy 1 PHY_TYPE_PCIE>;
+ };
+};
+
+&pcie2_rc {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie2_0_cfg>;
+ num-lanes = <2>;
+ status = "okay";
+
+ pcie@0 {
+ vpcie3v3-supply = <®_aux_vcc3v3>;
+ phys = <&combophy 2 PHY_TYPE_PCIE>,
+ <&combophy 3 PHY_TYPE_PCIE>;
+ };
+};
+
+&pcie4_rc {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie4_0_cfg>;
+ num-lanes = <1>;
+ status = "okay";
+
+ pcie@0 {
+ vpcie3v3-supply = <®_aux_vcc3v3>;
+ phys = <&combophy 5 PHY_TYPE_PCIE>;
+ };
+};
+
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_0_cfg>;
diff --git a/arch/riscv/boot/dts/spacemit/k3-pinctrl.dtsi b/arch/riscv/boot/dts/spacemit/k3-pinctrl.dtsi
index 3ee1471f3798..68aa21a5279f 100644
--- a/arch/riscv/boot/dts/spacemit/k3-pinctrl.dtsi
+++ b/arch/riscv/boot/dts/spacemit/k3-pinctrl.dtsi
@@ -689,4 +689,37 @@ uart0-0-pins {
drive-strength = <25>;
};
};
+
+ pcie0_0_cfg: pcie0-0-cfg {
+ pcie0-0-pins {
+ pinmux = <K3_PADCONF(79, 5)>, /* pcie0 perst */
+ <K3_PADCONF(81, 5)>; /* pcie0 clkreq */
+
+ bias-pull-up = <1>;
+ drive-strength = <33>;
+ power-source = <1800>;
+ };
+ };
+
+ pcie2_0_cfg: pcie2-0-cfg {
+ pcie2-0-pins {
+ pinmux = <K3_PADCONF(25, 4)>, /* pcie2 perst */
+ <K3_PADCONF(27, 4)>; /* pcie2 clkreq */
+
+ drive-strength = <38>;
+ power-source = <3300>;
+ };
+ };
+
+ pcie4_0_cfg: pcie4-0-cfg {
+ pcie4-0-pins {
+ pinmux = <K3_PADCONF(76, 5)>, /* pcie4 perst */
+ <K3_PADCONF(77, 5)>, /* pcie4 wake */
+ <K3_PADCONF(78, 5)>; /* pcie4 clkreq */
+
+ bias-pull-up = <1>;
+ drive-strength = <33>;
+ power-source = <1800>;
+ };
+ };
};
diff --git a/arch/riscv/boot/dts/spacemit/k3.dtsi b/arch/riscv/boot/dts/spacemit/k3.dtsi
index 7863ab7dd308..314dea88b4a4 100644
--- a/arch/riscv/boot/dts/spacemit/k3.dtsi
+++ b/arch/riscv/boot/dts/spacemit/k3.dtsi
@@ -439,6 +439,201 @@ soc: soc {
dma-noncoherent;
ranges;
+ pcie0_rc: pcie@80000000 {
+ compatible = "spacemit,k3-pcie";
+ reg = <0x0 0x80000000 0x0 0x00001000>,
+ <0x0 0x80300000 0x0 0x00003f20>,
+ <0x11 0x00000000 0x0 0x00010000>,
+ <0x0 0x82900000 0x0 0x00001000>,
+ <0x0 0x80100000 0x0 0x00001000>;
+ reg-names = "dbi", "atu", "config", "link", "dbi2";
+ device_type = "pci";
+ #address-cells = <3>;
+ #size-cells = <2>;
+ clocks = <&syscon_apmu CLK_APMU_PCIE_PORTA_DBI>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTA_MSTE>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTA_SLV>;
+ clock-names = "dbi", "mstr", "slv";
+ msi-parent = <&simsic>;
+ ranges = <0x01000000 0x00 0x00010000 0x11 0x00010000 0x0 0x00100000>,
+ <0x02000000 0x0 0x00110000 0x11 0x00110000 0x0 0x7fef0000>,
+ <0x43000000 0x18 0x00000000 0x18 0x00000000 0x1 0x00000000>;
+ resets = <&syscon_apmu RESET_APMU_PCIE_A_DBI>,
+ <&syscon_apmu RESET_APMU_PCIE_A_MASTER>,
+ <&syscon_apmu RESET_APMU_PCIE_A_SLAVE>;
+ reset-names = "dbi", "mstr", "slv";
+ max-link-speed = <3>;
+ linux,pci-domain = <0>;
+ spacemit,apmu = <&syscon_apmu 0x1f0>;
+ status = "disabled";
+
+ pcie0_port: pcie@0 {
+ device_type = "pci";
+ compatible = "pciclass,0604";
+ reg = <0x0 0x0 0x0 0x0 0x0>;
+ bus-range = <0x01 0xff>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+ };
+ };
+
+ pcie1_rc: pcie@80400000 {
+ compatible = "spacemit,k3-pcie";
+ reg = <0x0 0x80400000 0x0 0x00001000>,
+ <0x0 0x80700000 0x0 0x00003f20>,
+ <0x11 0x80000000 0x0 0x00010000>,
+ <0x0 0x82c00000 0x0 0x00001000>,
+ <0x0 0x80500000 0x0 0x00001000>;
+ reg-names = "dbi", "atu", "config", "link", "dbi2";
+ device_type = "pci";
+ #address-cells = <3>;
+ #size-cells = <2>;
+ clocks = <&syscon_apmu CLK_APMU_PCIE_PORTB_DBI>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTB_MSTE>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTB_SLV>;
+ clock-names = "dbi", "mstr", "slv";
+ msi-parent = <&simsic>;
+ ranges = <0x01000000 0x0 0x00010000 0x11 0x80010000 0x0 0x00100000>,
+ <0x02000000 0x0 0x80110000 0x11 0x80110000 0x0 0x7fef0000>,
+ <0x43000000 0x16 0x00000000 0x16 0x00000000 0x1 0x00000000>;
+ resets = <&syscon_apmu RESET_APMU_PCIE_B_DBI>,
+ <&syscon_apmu RESET_APMU_PCIE_B_MASTER>,
+ <&syscon_apmu RESET_APMU_PCIE_B_SLAVE>;
+ reset-names = "dbi", "mstr", "slv";
+ max-link-speed = <3>;
+ linux,pci-domain = <1>;
+ spacemit,apmu = <&syscon_apmu 0x1d0>;
+ status = "disabled";
+
+ pcie1_port: pcie@0 {
+ device_type = "pci";
+ compatible = "pciclass,0604";
+ reg = <0x0 0x0 0x0 0x0 0x0>;
+ bus-range = <0x01 0xff>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+ };
+ };
+
+ pcie2_rc: pcie@80800000 {
+ compatible = "spacemit,k3-pcie";
+ reg = <0x0 0x80800000 0x0 0x00001000>,
+ <0x0 0x80b00000 0x0 0x00003f20>,
+ <0x12 0x00000000 0x0 0x00010000>,
+ <0x0 0x82d00000 0x0 0x00001000>,
+ <0x0 0x80900000 0x0 0x00001000>;
+ reg-names = "dbi", "atu", "config", "link", "dbi2";
+ device_type = "pci";
+ #address-cells = <3>;
+ #size-cells = <2>;
+ clocks = <&syscon_apmu CLK_APMU_PCIE_PORTC_DBI>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTC_MSTE>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTC_SLV>;
+ clock-names = "dbi", "mstr", "slv";
+ msi-parent = <&simsic>;
+ ranges = <0x01000000 0x00 0x00000000 0x12 0x00010000 0x0 0x00100000>,
+ <0x02000000 0x0 0x00110000 0x12 0x00110000 0x0 0x7fef0000>,
+ <0x43000000 0x15 0x00000000 0x15 0x00000000 0x1 0x00000000>;
+ resets = <&syscon_apmu RESET_APMU_PCIE_C_DBI>,
+ <&syscon_apmu RESET_APMU_PCIE_C_MASTER>,
+ <&syscon_apmu RESET_APMU_PCIE_C_SLAVE>;
+ reset-names = "dbi", "mstr", "slv";
+ linux,pci-domain = <2>;
+ max-link-speed = <3>;
+ spacemit,apmu = <&syscon_apmu 0x1c8>;
+ status = "disabled";
+
+ pcie2_port: pcie@0 {
+ device_type = "pci";
+ compatible = "pciclass,0604";
+ reg = <0x0 0x0 0x0 0x0 0x0>;
+ bus-range = <0x01 0xff>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+ };
+ };
+
+ pcie3_rc: pcie@80c00000 {
+ compatible = "spacemit,k3-pcie";
+ reg = <0x0 0x80c00000 0x0 0x00001000>,
+ <0x0 0x80f00000 0x0 0x00003f20>,
+ <0x12 0x80000000 0x0 0x00010000>,
+ <0x0 0x82a00000 0x0 0x00001000>,
+ <0x0 0x80d00000 0x0 0x00001000>;
+ reg-names = "dbi", "atu", "config", "link", "dbi2";
+ device_type = "pci";
+ #address-cells = <3>;
+ #size-cells = <2>;
+ clocks = <&syscon_apmu CLK_APMU_PCIE_PORTD_DBI>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTD_MSTE>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTD_SLV>;
+ clock-names = "dbi", "mstr", "slv";
+ msi-parent = <&simsic>;
+ ranges = <0x01000000 0x0 0x00010000 0x12 0x80010000 0x0 0x100000>,
+ <0x02000000 0x0 0x80110000 0x12 0x80110000 0x0 0x3fef0000>,
+ <0x43000000 0x14 0x00000000 0x14 0x00000000 0x1 0x00000000>;
+ resets = <&syscon_apmu RESET_APMU_PCIE_D_DBI>,
+ <&syscon_apmu RESET_APMU_PCIE_D_MASTER>,
+ <&syscon_apmu RESET_APMU_PCIE_D_SLAVE>;
+ reset-names = "dbi", "mstr", "slv";
+ linux,pci-domain = <3>;
+ bus-range = <0x00 0xff>;
+ max-link-speed = <3>;
+ spacemit,apmu = <&syscon_apmu 0x1e0>;
+ status = "disabled";
+
+ pcie3_port: pcie@0 {
+ device_type = "pci";
+ compatible = "pciclass,0604";
+ reg = <0x0 0x0 0x0 0x0 0x0>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+ };
+ };
+
+ pcie4_rc: pcie@81000000 {
+ compatible = "spacemit,k3-pcie";
+ reg = <0x0 0x81000000 0x0 0x00001000>,
+ <0x0 0x81300000 0x0 0x00003f20>,
+ <0x12 0xc0000000 0x0 0x00010000>,
+ <0x0 0x82b00000 0x0 0x00001000>,
+ <0x0 0x81100000 0x0 0x00001000>;
+ reg-names = "dbi", "atu", "config", "link", "dbi2";
+ device_type = "pci";
+ #address-cells = <3>;
+ #size-cells = <2>;
+ clocks = <&syscon_apmu CLK_APMU_PCIE_PORTE_DBI>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTE_MSTE>,
+ <&syscon_apmu CLK_APMU_PCIE_PORTE_SLV>;
+ clock-names = "dbi", "mstr", "slv";
+ msi-parent = <&simsic>;
+ ranges = <0x01000000 0x0 0x00000000 0x12 0xc0010000 0x0 0x100000>,
+ <0x02000000 0x0 0xc0110000 0x12 0xc0110000 0x0 0x3fef0000>,
+ <0x43000000 0x13 0x00000000 0x13 0x00000000 0x1 0x00000000>;
+ resets = <&syscon_apmu RESET_APMU_PCIE_E_DBI>,
+ <&syscon_apmu RESET_APMU_PCIE_E_MASTER>,
+ <&syscon_apmu RESET_APMU_PCIE_E_SLAVE>;
+ reset-names = "dbi", "mstr", "slv";
+ linux,pci-domain = <4>;
+ max-link-speed = <3>;
+ spacemit,apmu = <&syscon_apmu 0x1e8>;
+ status = "disabled";
+
+ pcie4_port: pcie@0 {
+ device_type = "pci";
+ compatible = "pciclass,0604";
+ reg = <0x0 0x0 0x0 0x0 0x0>;
+ bus-range = <0x01 0xff>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+ };
+ };
+
usb3d: usb@81a00000 {
compatible = "spacemit,k3-dwc3";
reg = <0x0 0x81a00000 0x0 0x10000>;
--
2.55.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] riscv: dts: spacemit: k3: add USB controller and USB phy support
2026-07-27 9:47 ` [PATCH v2 1/2] riscv: dts: spacemit: k3: add USB controller and USB phy support Inochi Amaoto
@ 2026-07-27 10:04 ` sashiko-bot
2026-07-27 10:13 ` Yixun Lan
1 sibling, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-07-27 10:04 UTC (permalink / raw)
To: Inochi Amaoto; +Cc: robh, devicetree, conor+dt
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
New issues:
- [High] The `spacemit,k3-combo-phy` compatible string is undocumented and lacks a driver, causing the `usb3d` controller to endlessly defer probing.
- [Medium] The `phy_type` property is ignored by the DWC3 controller driver; the standard `snps,hsphy_interface` should be used instead.
- [Medium] The `combophy` node violates devicetree layering by defining internal SoC routing at the board level, relies on undocumented properties, and omits hardware dependencies.
Pre-existing issues:
- [High] DWC3 hardware resets are toggled before clocks are enabled, violating synchronous reset constraints.
--
--- Patch [1]: [PATCH v2 1/2] riscv: dts: spacemit: k3: add USB controller and USB phy support ---
commit fc8b62c47a78ea5ec792c1be2a1f162dc04c118a
Author: Inochi Amaoto <inochiama@gmail.com>
riscv: dts: spacemit: k3: add USB controller and USB phy support
This commit adds USB device nodes to the Spacemit K3 SoC devicetree. It
introduces configurations for the DWC3 controller, USB2 PHY, and a combo
PHY, enabling them for the K3 Pico-ITX board.
> diff --git a/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts b/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
> --- a/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
> +++ b/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
[ ... ]
> @@ -182,6 +182,11 @@ dldo7: dldo7 {
> };
> };
>
> +&combophy {
> + spacemit,apmu = <&syscon_apmu 0x11>;
[Severity: Medium]
Since spacemit,apmu defines an internal SoC connection between the PHY and
the APMU, should this property be placed in k3.dtsi rather than the
board-level file to avoid duplicating internal topology across boards?
> + status = "okay";
> +};
> +
[ ... ]
> diff --git a/arch/riscv/boot/dts/spacemit/k3.dtsi b/arch/riscv/boot/dts/spacemit/k3.dtsi
> --- a/arch/riscv/boot/dts/spacemit/k3.dtsi
> +++ b/arch/riscv/boot/dts/spacemit/k3.dtsi
[ ... ]
> @@ -438,6 +439,47 @@ soc: soc {
> dma-noncoherent;
> ranges;
>
> + usb3d: usb@81a00000 {
[Severity: High]
This is a pre-existing issue, but it directly affects the initialization of
the newly added usb3d controller here.
The core hardware sequencing in dwc3_generic_probe() asserts and deasserts
hardware resets before enabling clocks:
drivers/usb/dwc3/dwc3-generic-plat.c:dwc3_generic_probe() {
...
ret = reset_control_assert(dwc3g->resets);
...
ret = reset_control_deassert(dwc3g->resets);
...
ret = devm_clk_bulk_get_all_enabled(dwc3g->dev, &dwc3g->clks);
...
}
For synchronous bus architectures (AHB/AXI), does the clock need to be
actively toggling for the reset signal to propagate through internal
flip-flops? Toggling a synchronous reset while the IP's clocks are gated
might mean the hardware ignores the reset, leading to a synchronous bus
hang or initialization failure.
> + compatible = "spacemit,k3-dwc3";
> + reg = <0x0 0x81a00000 0x0 0x10000>;
> + interrupts = <149 IRQ_TYPE_LEVEL_HIGH>;
> + interrupt-parent = <&saplic>;
> + clocks = <&syscon_apmu CLK_APMU_USB3_PORTD_BUS>;
> + clock-names = "usbdrd30";
> + resets = <&syscon_apmu RESET_APMU_USB3_D_AHB>,
> + <&syscon_apmu RESET_APMU_USB3_D_VCC>,
> + <&syscon_apmu RESET_APMU_USB3_D_PHY>;
> + reset-names = "ahb", "vcc", "phy";
> + phys = <&usb3d_u2phy>,
> + <&combophy 4 PHY_TYPE_USB3>;
[Severity: High]
The spacemit,k3-combo-phy driver does not appear to exist in the tree.
Because the dwc3 controller explicitly depends on this PHY via the phys
property, will devm_phy_get() indefinitely return -EPROBE_DEFER and
prevent the USB controller from ever initializing?
> + phy-names = "usb2-phy", "usb3-phy";
> + phy_type = "utmi";
[Severity: Medium]
The Synopsys DesignWare Core (DWC3) driver does not read the phy_type
property. It strictly relies on the vendor-specific snps,hsphy_interface
property.
Could this cause the controller to silently fall back to suboptimal
hardware defaults instead of the intended UTMI configuration?
> + snps,dis_enblslpm_quirk;
[ ... ]
> + combophy: phy@81d00000 {
> + compatible = "spacemit,k3-combo-phy";
> + reg = <0x0 0x81d00000 0x0 0x600000>;
> + #phy-cells = <2>;
> + spacemit,apb-spare = <&pll>;
[Severity: Medium]
The spacemit,apb-spare property appears to be undocumented and points to
a clock controller instead of a syscon.
Additionally, this node maps 6MB of register space but omits the clocks
and resets properties. Are these properties required to safely access the
memory-mapped IP block?
> + status = "disabled";
> + };
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260727094726.890179-1-inochiama@gmail.com?part=1
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] riscv: dts: spacemit: k3: add USB controller and USB phy support
2026-07-27 9:47 ` [PATCH v2 1/2] riscv: dts: spacemit: k3: add USB controller and USB phy support Inochi Amaoto
2026-07-27 10:04 ` sashiko-bot
@ 2026-07-27 10:13 ` Yixun Lan
1 sibling, 0 replies; 6+ messages in thread
From: Yixun Lan @ 2026-07-27 10:13 UTC (permalink / raw)
To: Inochi Amaoto
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, devicetree,
linux-riscv, spacemit, linux-kernel, Yixun Lan, Longbin Li
Hi Inochi,
On 17:47 Mon 27 Jul , Inochi Amaoto wrote:
> Add all USB device node to the Spacemit K3.
>
> Signed-off-by: Inochi Amaoto <inochiama@gmail.com>
Reviewed-by: Yixun Lan <dlan@kernel.org>
> ---
> arch/riscv/boot/dts/spacemit/k3-pico-itx.dts | 13 ++++++
> arch/riscv/boot/dts/spacemit/k3.dtsi | 42 ++++++++++++++++++++
> 2 files changed, 55 insertions(+)
>
--
Yixun Lan (dlan)
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] riscv: dts: spacemit: k3: Add PCIe device node
2026-07-27 9:47 ` [PATCH v2 2/2] riscv: dts: spacemit: k3: Add PCIe device node Inochi Amaoto
@ 2026-07-27 10:14 ` sashiko-bot
0 siblings, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-07-27 10:14 UTC (permalink / raw)
To: Inochi Amaoto; +Cc: conor+dt, devicetree, robh
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [High] The PCIe host controller nodes lack the required 'interrupts' property for native host controller events and legacy INTx IRQ routing properties.
- [High] Incorrect device tree mapping for PCI I/O address ranges.
- [High] Hardware lane configuration mismatch in pcie0_rc specifies 4 lanes but only provisions 2 PHYs.
- [Medium] The 'spacemit,k3-pcie' compatible string is undocumented and its nodes violate established schema constraints.
- [Medium] Inconsistent property placement for 'bus-range' between host controllers.
--
--- Patch [2]: [PATCH v2 2/2] riscv: dts: spacemit: k3: Add PCIe device node ---
commit 6adf11d50db9bcfba7141ad15e1666cad3b96e91
Author: Inochi Amaoto <inochiama@gmail.com>
riscv: dts: spacemit: k3: Add PCIe device node
This commit adds PCIe device nodes for the Spacemit K3 SoC. It includes
pinctrl configurations and board-level properties for the Pico-ITX board.
> diff --git a/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts b/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
> index 2a6d35a64d5ce..1eb5abbc61f97 100644
> --- a/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
> +++ b/arch/riscv/boot/dts/spacemit/k3-pico-itx.dts
[ ... ]
> @@ -205,6 +205,44 @@ phy0: phy@1 {
> };
> };
>
> +&pcie0_rc {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pcie0_0_cfg>;
> + num-lanes = <4>;
> + status = "okay";
> +
> + pcie@0 {
> + vpcie3v3-supply = <®_aux_vcc3v3>;
> + phys = <&combophy 0 PHY_TYPE_PCIE>,
> + <&combophy 1 PHY_TYPE_PCIE>;
[Severity: High]
Does this lane configuration match the provisioned PHYs? This controller
specifies 4 lanes via num-lanes, but only 2 PHYs are provided here. Could
this cause link training failures or PHY framework errors if the driver expects
4 PHYs, especially given lanes 2 and 3 are assigned to pcie2_rc elsewhere?
[Severity: Medium]
Since the phys array contains multiple items, shouldn't there be a
corresponding phy-names array? Omitting it violates standard constraints
for unnamed PHYs in port nodes.
> + };
> +};
[ ... ]
> diff --git a/arch/riscv/boot/dts/spacemit/k3.dtsi b/arch/riscv/boot/dts/spacemit/k3.dtsi
> index 7863ab7dd308c..314dea88b4a4a 100644
> --- a/arch/riscv/boot/dts/spacemit/k3.dtsi
> +++ b/arch/riscv/boot/dts/spacemit/k3.dtsi
[ ... ]
> @@ -439,6 +439,201 @@ soc: soc {
> dma-noncoherent;
> ranges;
>
> + pcie0_rc: pcie@80000000 {
> + compatible = "spacemit,k3-pcie";
[Severity: Medium]
Is this compatible string documented? I couldn't find a device tree binding
schema for spacemit,k3-pcie.
[Severity: High]
Are there missing interrupt properties here? The host controller lacks an
interrupts property for native host controller events like AER, PME, or
link state changes.
Furthermore, is legacy INTx routing supported? Omitting #interrupt-cells,
interrupt-map, and interrupt-map-mask will prevent the PCI subsystem from
routing INTA/B/C/D interrupts for downstream devices.
> + reg = <0x0 0x80000000 0x0 0x00001000>,
> + <0x0 0x80300000 0x0 0x00003f20>,
> + <0x11 0x00000000 0x0 0x00010000>,
> + <0x0 0x82900000 0x0 0x00001000>,
> + <0x0 0x80100000 0x0 0x00001000>;
> + reg-names = "dbi", "atu", "config", "link", "dbi2";
[Severity: Medium]
Will this pass dt_binding_check validation? The node introduces a fifth
register region named dbi2, which exceeds the typical 4-item limit seen
in similar bindings like spacemit,k1-pcie-host.yaml.
> + device_type = "pci";
> + #address-cells = <3>;
> + #size-cells = <2>;
> + clocks = <&syscon_apmu CLK_APMU_PCIE_PORTA_DBI>,
> + <&syscon_apmu CLK_APMU_PCIE_PORTA_MSTE>,
> + <&syscon_apmu CLK_APMU_PCIE_PORTA_SLV>;
> + clock-names = "dbi", "mstr", "slv";
> + msi-parent = <&simsic>;
> + ranges = <0x01000000 0x00 0x00010000 0x11 0x00010000 0x0 0x00100000>,
[Severity: High]
Does this map the I/O window correctly? Mapping the I/O window to start at
a PCI address of 0x00010000 skips the critical first 64KB.
Will this prevent the PCI subsystem from assigning valid I/O BARs for legacy
PCIe cards that expect 16-bit I/O space starting at 0x0000? I notice that
pcie2_rc correctly starts its mapping at 0x00000000.
> + <0x02000000 0x0 0x00110000 0x11 0x00110000 0x0 0x7fef0000>,
> + <0x43000000 0x18 0x00000000 0x18 0x00000000 0x1 0x00000000>;
[ ... ]
> + pcie3_rc: pcie@80c00000 {
[ ... ]
> + linux,pci-domain = <3>;
> + bus-range = <0x00 0xff>;
[Severity: Medium]
Is the placement of the bus-range property correct here? For the other host
controllers, bus-range is located in the child port node (pcie@0).
Placing it in the parent node instead might cause subsystem enumeration issues
for this bridge.
> + max-link-speed = <3>;
> + spacemit,apmu = <&syscon_apmu 0x1e0>;
> + status = "disabled";
> +
> + pcie3_port: pcie@0 {
> + device_type = "pci";
> + compatible = "pciclass,0604";
> + reg = <0x0 0x0 0x0 0x0 0x0>;
> + #address-cells = <3>;
> + #size-cells = <2>;
> + ranges;
> + };
> + };
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260727094726.890179-1-inochiama@gmail.com?part=2
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-07-27 10:14 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-27 9:47 [PATCH v2 0/2] riscv: dts: spacemit: k3: Add USB/PCIe devices Inochi Amaoto
2026-07-27 9:47 ` [PATCH v2 1/2] riscv: dts: spacemit: k3: add USB controller and USB phy support Inochi Amaoto
2026-07-27 10:04 ` sashiko-bot
2026-07-27 10:13 ` Yixun Lan
2026-07-27 9:47 ` [PATCH v2 2/2] riscv: dts: spacemit: k3: Add PCIe device node Inochi Amaoto
2026-07-27 10:14 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox