* [PATCH v4 1/4] dt-bindings: usb: add Altera Agilex5 DWC3 controller
2026-09-04 8:46 [PATCH v4 0/4] Add USB3.1 support for Agilex5 Adrian Ng Ho Yin
@ 2026-09-04 8:46 ` Adrian Ng Ho Yin
2026-09-04 15:19 ` Conor Dooley
2026-09-04 8:46 ` [PATCH v4 2/4] arm64: dts: intel: agilex5: add USB3.1 controller node Adrian Ng Ho Yin
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: Adrian Ng Ho Yin @ 2026-09-04 8:46 UTC (permalink / raw)
To: Greg Kroah-Hartman, Thinh Nguyen, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Dinh Nguyen, linux-usb,
devicetree, linux-kernel
Cc: Adrian Ng Ho Yin
Add a binding for the Altera Agilex5 SoC integration of the Synopsys DWC3
USB controller (compatible "altr,agilex5-dwc3"), covering clocks, resets,
PHYs, and optional IOMMU support.
Clock names follow the snps,dwc3.yaml example order (bus_early, ref,
suspend). Reset names use core/ecc. On this SoC ref and suspend are the
same hardware source, so the example reuses AGILEX5_USB31_SUSPEND_CLK.
Signed-off-by: Adrian Ng Ho Yin <adrian.ho.yin.ng@altera.com>
---
.../bindings/usb/altr,agilex5-dwc3.yaml | 100 ++++++++++++++++++
1 file changed, 100 insertions(+)
create mode 100644 Documentation/devicetree/bindings/usb/altr,agilex5-dwc3.yaml
diff --git a/Documentation/devicetree/bindings/usb/altr,agilex5-dwc3.yaml b/Documentation/devicetree/bindings/usb/altr,agilex5-dwc3.yaml
new file mode 100644
index 000000000000..e172706474f5
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/altr,agilex5-dwc3.yaml
@@ -0,0 +1,100 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/usb/altr,agilex5-dwc3.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Altera Agilex5 DWC3 USB SoC Controller
+
+maintainers:
+ - Adrian Ng Ho Yin <adrian.ho.yin.ng@altera.com>
+
+description:
+ The Altera Agilex5 SoCFPGA integrates a Synopsys DesignWare USB3 (DWC3)
+ controller that supports host, device and DRD modes.
+
+allOf:
+ - $ref: snps,dwc3-common.yaml#
+
+properties:
+ compatible:
+ const: altr,agilex5-dwc3
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ items:
+ - description: Master/Core bus clock
+ - description: Controller reference clock
+ - description: Controller suspend clock
+
+ clock-names:
+ items:
+ - const: bus_early
+ - const: ref
+ - const: suspend
+
+ interrupts:
+ maxItems: 1
+
+ phys:
+ minItems: 2
+ maxItems: 2
+
+ phy-names:
+ items:
+ - const: usb2-phy
+ - const: usb3-phy
+
+ iommus:
+ maxItems: 1
+
+ resets:
+ items:
+ - description: DWC3 core reset
+ - description: DWC3 ECC reset
+
+ reset-names:
+ items:
+ - const: core
+ - const: ecc
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - interrupts
+ - phys
+ - phy-names
+ - resets
+ - reset-names
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/reset/altr,rst-mgr-s10.h>
+ #include <dt-bindings/clock/intel,agilex5-clkmgr.h>
+
+ soc {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ usb@11000000 {
+ compatible = "altr,agilex5-dwc3";
+ reg = <0x11000000 0x100000>;
+ interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clkmgr AGILEX5_USB31_BUS_CLK_EARLY>,
+ <&clkmgr AGILEX5_USB31_SUSPEND_CLK>,
+ <&clkmgr AGILEX5_USB31_SUSPEND_CLK>;
+ clock-names = "bus_early", "ref", "suspend";
+ phys = <&usbphy0>, <&usbphy1>;
+ phy-names = "usb2-phy", "usb3-phy";
+ resets = <&rst USB1_RESET>, <&rst USB1_OCP_RESET>;
+ reset-names = "core", "ecc";
+ iommus = <&smmu 7>;
+ };
+ };
--
2.49.GIT
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v4 1/4] dt-bindings: usb: add Altera Agilex5 DWC3 controller
2026-09-04 8:46 ` [PATCH v4 1/4] dt-bindings: usb: add Altera Agilex5 DWC3 controller Adrian Ng Ho Yin
@ 2026-09-04 15:19 ` Conor Dooley
0 siblings, 0 replies; 7+ messages in thread
From: Conor Dooley @ 2026-09-04 15:19 UTC (permalink / raw)
To: Adrian Ng Ho Yin
Cc: Greg Kroah-Hartman, Thinh Nguyen, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Dinh Nguyen, linux-usb,
devicetree, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 4085 bytes --]
On Fri, Sep 04, 2026 at 04:46:10PM +0800, Adrian Ng Ho Yin wrote:
> Add a binding for the Altera Agilex5 SoC integration of the Synopsys DWC3
> USB controller (compatible "altr,agilex5-dwc3"), covering clocks, resets,
> PHYs, and optional IOMMU support.
>
> Clock names follow the snps,dwc3.yaml example order (bus_early, ref,
> suspend). Reset names use core/ecc. On this SoC ref and suspend are the
> same hardware source, so the example reuses AGILEX5_USB31_SUSPEND_CLK.
>
> Signed-off-by: Adrian Ng Ho Yin <adrian.ho.yin.ng@altera.com>
> ---
> .../bindings/usb/altr,agilex5-dwc3.yaml | 100 ++++++++++++++++++
> 1 file changed, 100 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/usb/altr,agilex5-dwc3.yaml
>
> diff --git a/Documentation/devicetree/bindings/usb/altr,agilex5-dwc3.yaml b/Documentation/devicetree/bindings/usb/altr,agilex5-dwc3.yaml
> new file mode 100644
> index 000000000000..e172706474f5
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/altr,agilex5-dwc3.yaml
> @@ -0,0 +1,100 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/usb/altr,agilex5-dwc3.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Altera Agilex5 DWC3 USB SoC Controller
> +
> +maintainers:
> + - Adrian Ng Ho Yin <adrian.ho.yin.ng@altera.com>
> +
> +description:
> + The Altera Agilex5 SoCFPGA integrates a Synopsys DesignWare USB3 (DWC3)
> + controller that supports host, device and DRD modes.
> +
> +allOf:
> + - $ref: snps,dwc3-common.yaml#
> +
> +properties:
> + compatible:
> + const: altr,agilex5-dwc3
> +
> + reg:
> + maxItems: 1
> +
> + clocks:
> + items:
> + - description: Master/Core bus clock
> + - description: Controller reference clock
> + - description: Controller suspend clock
> +
> + clock-names:
> + items:
> + - const: bus_early
> + - const: ref
> + - const: suspend
> +
> + interrupts:
> + maxItems: 1
> +
> + phys:
> + minItems: 2
> + maxItems: 2
> +
> + phy-names:
> + items:
> + - const: usb2-phy
> + - const: usb3-phy
> +
> + iommus:
> + maxItems: 1
> +
> + resets:
> + items:
> + - description: DWC3 core reset
> + - description: DWC3 ECC reset
> +
> + reset-names:
> + items:
> + - const: core
> + - const: ecc
> +
> +required:
> + - compatible
> + - reg
> + - clocks
> + - clock-names
> + - interrupts
> + - phys
> + - phy-names
> + - resets
> + - reset-names
> +
> +unevaluatedProperties: false
I'm never keen on unevaluatedProperties for dwc3 stuff, cos there are
lots of properties in there that I do not believe should be used in
general.
Could you instead use "additionalProperties: false" and add "foo: true"
for any properties (other than the ones you've already got) that you
need?
Otherwise, this looks good to me.
pw-bot: changes-requested
Thanks,
Conor.
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/reset/altr,rst-mgr-s10.h>
> + #include <dt-bindings/clock/intel,agilex5-clkmgr.h>
> +
> + soc {
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + usb@11000000 {
> + compatible = "altr,agilex5-dwc3";
> + reg = <0x11000000 0x100000>;
> + interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&clkmgr AGILEX5_USB31_BUS_CLK_EARLY>,
> + <&clkmgr AGILEX5_USB31_SUSPEND_CLK>,
> + <&clkmgr AGILEX5_USB31_SUSPEND_CLK>;
> + clock-names = "bus_early", "ref", "suspend";
> + phys = <&usbphy0>, <&usbphy1>;
> + phy-names = "usb2-phy", "usb3-phy";
> + resets = <&rst USB1_RESET>, <&rst USB1_OCP_RESET>;
> + reset-names = "core", "ecc";
> + iommus = <&smmu 7>;
> + };
> + };
> --
> 2.49.GIT
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 2/4] arm64: dts: intel: agilex5: add USB3.1 controller node
2026-09-04 8:46 [PATCH v4 0/4] Add USB3.1 support for Agilex5 Adrian Ng Ho Yin
2026-09-04 8:46 ` [PATCH v4 1/4] dt-bindings: usb: add Altera Agilex5 DWC3 controller Adrian Ng Ho Yin
@ 2026-09-04 8:46 ` Adrian Ng Ho Yin
2026-09-04 9:06 ` sashiko-bot
2026-09-04 8:46 ` [PATCH v4 3/4] arm64: dts: intel: agilex5: remove usb0 in Agilex5 SoCDK Adrian Ng Ho Yin
2026-09-04 8:46 ` [PATCH v4 4/4] usb: dwc3: add Altera Agilex5 support to generic platform driver Adrian Ng Ho Yin
3 siblings, 1 reply; 7+ messages in thread
From: Adrian Ng Ho Yin @ 2026-09-04 8:46 UTC (permalink / raw)
To: Greg Kroah-Hartman, Thinh Nguyen, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Dinh Nguyen, linux-usb,
devicetree, linux-kernel
Cc: Adrian Ng Ho Yin
Add a DTS node for the Synopsys DWC3 USB3.1 controller on the Agilex5 SoC.
Place it under a simple-bus with a 40-bit dma-ranges window (#address-cells
= 2) to match the USB DMA address width of the interconnect. Enable it in
host mode on the SoCDK board.
ref and suspend both use AGILEX5_USB31_SUSPEND_CLK because they share the
same hardware clock source on this SoC.
Signed-off-by: Adrian Ng Ho Yin <adrian.ho.yin.ng@altera.com>
---
.../arm64/boot/dts/intel/socfpga_agilex5.dtsi | 35 +++++++++++++++++++
.../boot/dts/intel/socfpga_agilex5_socdk.dts | 5 +++
2 files changed, 40 insertions(+)
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi
index f54767d1526e..523f722a2a64 100644
--- a/arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi
@@ -493,6 +493,41 @@ usb0: usb@10b00000 {
status = "disabled";
};
+ usb31_bus: usb-bus@11000000 {
+ compatible = "simple-bus";
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges = <0x0 0x0 0x11000000 0x0 0x100000>;
+ /*
+ * USB interconnect DMA is limited to 40-bit addresses
+ * (1 TiB window from 0).
+ */
+ dma-ranges = <0x0 0x0 0x0 0x100 0x0>;
+
+ usb31: usb@0 {
+ compatible = "altr,agilex5-dwc3";
+ reg = <0x0 0x0 0x0 0x100000>;
+ interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
+ /*
+ * ref and suspend share the same hardware
+ * source; reuse the published suspend clock ID.
+ */
+ clocks = <&clkmgr AGILEX5_USB31_BUS_CLK_EARLY>,
+ <&clkmgr AGILEX5_USB31_SUSPEND_CLK>,
+ <&clkmgr AGILEX5_USB31_SUSPEND_CLK>;
+ clock-names = "bus_early", "ref", "suspend";
+ resets = <&rst USB1_RESET>, <&rst USB1_OCP_RESET>;
+ reset-names = "core", "ecc";
+ iommus = <&smmu 7>;
+ phys = <&usbphy0>, <&usbphy0>;
+ phy-names = "usb2-phy", "usb3-phy";
+ maximum-speed = "super-speed";
+ snps,dis_u2_susphy_quirk;
+ snps,dis_u3_susphy_quirk;
+ status = "disabled";
+ };
+ };
+
watchdog0: watchdog@10d00200 {
compatible = "snps,dw-wdt";
reg = <0x10d00200 0x100>;
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts b/arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts
index 1e9b87d96765..aa9294494421 100644
--- a/arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts
@@ -109,6 +109,11 @@ &usb0 {
disable-over-current;
};
+&usb31 {
+ dr_mode = "host";
+ status = "okay";
+};
+
&watchdog0 {
status = "okay";
};
--
2.49.GIT
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v4 2/4] arm64: dts: intel: agilex5: add USB3.1 controller node
2026-09-04 8:46 ` [PATCH v4 2/4] arm64: dts: intel: agilex5: add USB3.1 controller node Adrian Ng Ho Yin
@ 2026-09-04 9:06 ` sashiko-bot
0 siblings, 0 replies; 7+ messages in thread
From: sashiko-bot @ 2026-09-04 9:06 UTC (permalink / raw)
To: Adrian Ng Ho Yin; +Cc: robh, devicetree, conor+dt
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The `usb31_bus` node maps a 40-bit (1 TiB) `dma-ranges` window into its parent bus (`soc@0`), but the parent has `#address-cells = <1>`, meaning it only supports a 32-bit (4 GiB) address space. This structurally overflows the parent's address capacity.
- [Medium] The `usb31` node uses an undocumented compatible string `altr,agilex5-dwc3` without providing a generic fallback (e.g., `snps,dwc3`).
--
commit 8d2a3618a07e5a6f14a501007e87cb0d96e62264
Author: Adrian Ng Ho Yin <adrian.ho.yin.ng@altera.com>
arm64: dts: intel: agilex5: add USB3.1 controller node
This commit adds a DTS node for the Synopsys DWC3 USB3.1 controller on the
Agilex5 SoC. It places the controller under a simple-bus with a 40-bit
dma-ranges window to match the USB DMA address width of the interconnect.
> diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi
> index f54767d1526e1..523f722a2a642 100644
> --- a/arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi
> +++ b/arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi
> @@ -493,6 +493,41 @@ usb0: usb@10b00000 {
> status = "disabled";
> };
>
> + usb31_bus: usb-bus@11000000 {
> + compatible = "simple-bus";
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges = <0x0 0x0 0x11000000 0x0 0x100000>;
> + /*
> + * USB interconnect DMA is limited to 40-bit addresses
> + * (1 TiB window from 0).
> + */
> + dma-ranges = <0x0 0x0 0x0 0x100 0x0>;
[Severity: High]
Does this dma-ranges mapping structurally overflow the parent bus's
addressing capabilities? The usb31_bus node maps a 40-bit (1 TiB) window
into its parent node (soc@0). However, the soc@0 parent sets
#address-cells = <1>, which only supports a 32-bit (4 GiB) address space.
Because of this mismatch, device tree parsing and DMA address translation
will fail or truncate for addresses beyond 4 GiB, as the 1 TiB translation
window mathematically exceeds the 32-bit maximum of the parent.
> +
> + usb31: usb@0 {
> + compatible = "altr,agilex5-dwc3";
[Severity: Medium]
Could this break device tree schema validation and backwards compatibility?
The compatible string "altr,agilex5-dwc3" doesn't provide a generic
fallback like "snps,dwc3".
Without a generic fallback string, older kernels without explicit support
for "altr,agilex5-dwc3" will completely fail to probe the generic DWC3
driver.
> + reg = <0x0 0x0 0x0 0x100000>;
> + interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1788503540.git.adrian.ho.yin.ng@altera.com?part=2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 3/4] arm64: dts: intel: agilex5: remove usb0 in Agilex5 SoCDK
2026-09-04 8:46 [PATCH v4 0/4] Add USB3.1 support for Agilex5 Adrian Ng Ho Yin
2026-09-04 8:46 ` [PATCH v4 1/4] dt-bindings: usb: add Altera Agilex5 DWC3 controller Adrian Ng Ho Yin
2026-09-04 8:46 ` [PATCH v4 2/4] arm64: dts: intel: agilex5: add USB3.1 controller node Adrian Ng Ho Yin
@ 2026-09-04 8:46 ` Adrian Ng Ho Yin
2026-09-04 8:46 ` [PATCH v4 4/4] usb: dwc3: add Altera Agilex5 support to generic platform driver Adrian Ng Ho Yin
3 siblings, 0 replies; 7+ messages in thread
From: Adrian Ng Ho Yin @ 2026-09-04 8:46 UTC (permalink / raw)
To: Greg Kroah-Hartman, Thinh Nguyen, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Dinh Nguyen, linux-usb,
devicetree, linux-kernel
Cc: Adrian Ng Ho Yin
The Agilex5 SoCDK daughter card only provides a USB3.1 interface (USB1).
USB0 is not connected or used on this board. Remove the USB0 node to avoid
unnecessary initialization and potential resource conflicts.
Signed-off-by: Adrian Ng Ho Yin <adrian.ho.yin.ng@altera.com>
---
arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts | 5 -----
1 file changed, 5 deletions(-)
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts b/arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts
index aa9294494421..c48867cc3043 100644
--- a/arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts
@@ -104,11 +104,6 @@ &uart0 {
status = "okay";
};
-&usb0 {
- status = "okay";
- disable-over-current;
-};
-
&usb31 {
dr_mode = "host";
status = "okay";
--
2.49.GIT
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v4 4/4] usb: dwc3: add Altera Agilex5 support to generic platform driver
2026-09-04 8:46 [PATCH v4 0/4] Add USB3.1 support for Agilex5 Adrian Ng Ho Yin
` (2 preceding siblings ...)
2026-09-04 8:46 ` [PATCH v4 3/4] arm64: dts: intel: agilex5: remove usb0 in Agilex5 SoCDK Adrian Ng Ho Yin
@ 2026-09-04 8:46 ` Adrian Ng Ho Yin
3 siblings, 0 replies; 7+ messages in thread
From: Adrian Ng Ho Yin @ 2026-09-04 8:46 UTC (permalink / raw)
To: Greg Kroah-Hartman, Thinh Nguyen, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Dinh Nguyen, linux-usb,
devicetree, linux-kernel
Cc: Adrian Ng Ho Yin
Add the "altr,agilex5-dwc3" compatible string to dwc3-generic-plat so the
Agilex5 USB3.1 DWC3 controller can probe through the generic DWC3 platform
glue.
Signed-off-by: Adrian Ng Ho Yin <adrian.ho.yin.ng@altera.com>
Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
---
drivers/usb/dwc3/dwc3-generic-plat.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/usb/dwc3/dwc3-generic-plat.c b/drivers/usb/dwc3/dwc3-generic-plat.c
index ca69ac0eb07c..8781d7ec6b9e 100644
--- a/drivers/usb/dwc3/dwc3-generic-plat.c
+++ b/drivers/usb/dwc3/dwc3-generic-plat.c
@@ -232,6 +232,7 @@ static const struct dwc3_generic_config eic7700_dwc3 = {
};
static const struct of_device_id dwc3_generic_of_match[] = {
+ { .compatible = "altr,agilex5-dwc3", },
{ .compatible = "spacemit,k1-dwc3", &spacemit_k1_dwc3},
{ .compatible = "spacemit,k3-dwc3", },
{ .compatible = "fsl,ls1028a-dwc3", &fsl_ls1028_dwc3},
--
2.49.GIT
^ permalink raw reply related [flat|nested] 7+ messages in thread