* [PATCH v2 2/2] usb: dwc3: dwc3-generic-plat: Add Renesas R-Car Gen5 DWC3 xHCI USB controller glue
2026-08-06 5:03 [PATCH v2 1/2] dt-bindings: usb: dwc3: Document Renesas R-Car Gen5 DWC3 xHCI USB controller Marek Vasut
@ 2026-08-06 5:03 ` Marek Vasut
2026-08-06 5:13 ` sashiko-bot
2026-08-06 5:14 ` [PATCH v2 1/2] dt-bindings: usb: dwc3: Document Renesas R-Car Gen5 DWC3 xHCI USB controller sashiko-bot
1 sibling, 1 reply; 4+ messages in thread
From: Marek Vasut @ 2026-08-06 5:03 UTC (permalink / raw)
To: linux-usb
Cc: Thanh Quan, Marek Vasut, Conor Dooley, Geert Uytterhoeven,
Greg Kroah-Hartman, Krzysztof Kozlowski, Rob Herring,
Thinh Nguyen, devicetree, linux-kernel, linux-renesas-soc
From: Thanh Quan <thanh.quan.xn@renesas.com>
The Renesas R-Car Gen5 SoC contains multiple instances of DWC3 USB
controller with glue logic wrapper around them. Extend the generic
DWC3 platform driver with Renesas R-Car Gen5 glue logic specifics.
Signed-off-by: Thanh Quan <thanh.quan.xn@renesas.com>
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
---
Cc: Conor Dooley <conor+dt@kernel.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
Cc: Rob Herring <robh@kernel.org>
Cc: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Cc: devicetree@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-usb@vger.kernel.org
---
V2: Extend dwc3-generic-plat driver instead
---
drivers/usb/dwc3/dwc3-generic-plat.c | 52 ++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/drivers/usb/dwc3/dwc3-generic-plat.c b/drivers/usb/dwc3/dwc3-generic-plat.c
index ca69ac0eb07ce..518bb40d1372c 100644
--- a/drivers/usb/dwc3/dwc3-generic-plat.c
+++ b/drivers/usb/dwc3/dwc3-generic-plat.c
@@ -71,6 +71,52 @@ static int dwc3_eic7700_init(struct dwc3_generic *dwc3g)
return 0;
}
+static int dwc3_renesas_rcar_gen5_init(struct dwc3_generic *dwc3g)
+{
+ struct device *dev = dwc3g->dev;
+ struct platform_device *pdev = to_platform_device(dev);
+ const char *maximum_speed;
+ bool use_usb3_flow;
+ void __iomem *glue;
+ int ret;
+
+ glue = devm_platform_ioremap_resource_byname(pdev, "glue");
+ if (IS_ERR(glue))
+ return PTR_ERR(glue);
+
+ ret = of_property_read_string(dev->of_node, "maximum-speed", &maximum_speed);
+ if (ret)
+ return dev_err_probe(dev, -ENODEV, "Failed to determine maximum speed\n");
+
+ use_usb3_flow = !strcmp(maximum_speed, "super-speed-plus") ||
+ !strcmp(maximum_speed, "super-speed");
+
+ /*
+ * The datasheet describes initialization procedure without full
+ * information about the registers. Therefore, the source code is
+ * based on the bare metal code shared by the board team.
+ */
+ writew(0x211, glue + 0x26);
+
+ /* USB3 does not need additional register programming. */
+ if (use_usb3_flow)
+ return 0;
+
+ writew(0x11, glue + 0x81c);
+ writew(0x0, glue + 0x81a);
+ writew(0x1, glue + 0x802);
+
+ usleep_range(10000, 20000);
+
+ writew(0x0, glue + 0x802);
+ writew(0x1, glue + 0x2a);
+ writew(0x1, glue + 0x81a);
+
+ usleep_range(10000, 20000);
+
+ return 0;
+}
+
static int dwc3_spacemit_k1_init(struct dwc3_generic *dwc3g)
{
struct device *dev = dwc3g->dev;
@@ -231,11 +277,17 @@ static const struct dwc3_generic_config eic7700_dwc3 = {
.properties = DWC3_DEFAULT_PROPERTIES,
};
+static const struct dwc3_generic_config renesas_rcar_gen5_dwc3 = {
+ .init = dwc3_renesas_rcar_gen5_init,
+ .properties = DWC3_DEFAULT_PROPERTIES,
+};
+
static const struct of_device_id dwc3_generic_of_match[] = {
{ .compatible = "spacemit,k1-dwc3", &spacemit_k1_dwc3},
{ .compatible = "spacemit,k3-dwc3", },
{ .compatible = "fsl,ls1028a-dwc3", &fsl_ls1028_dwc3},
{ .compatible = "eswin,eic7700-dwc3", &eic7700_dwc3},
+ { .compatible = "renesas,rcar-gen5-dwc3", &renesas_rcar_gen5_dwc3},
{ .compatible = "starfive,jhb100-dwc3", },
{ /* sentinel */ }
};
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH v2 1/2] dt-bindings: usb: dwc3: Document Renesas R-Car Gen5 DWC3 xHCI USB controller
2026-08-06 5:03 [PATCH v2 1/2] dt-bindings: usb: dwc3: Document Renesas R-Car Gen5 DWC3 xHCI USB controller Marek Vasut
2026-08-06 5:03 ` [PATCH v2 2/2] usb: dwc3: dwc3-generic-plat: Add Renesas R-Car Gen5 DWC3 xHCI USB controller glue Marek Vasut
@ 2026-08-06 5:14 ` sashiko-bot
1 sibling, 0 replies; 4+ messages in thread
From: sashiko-bot @ 2026-08-06 5:14 UTC (permalink / raw)
To: Marek Vasut; +Cc: wsa+renesas, conor+dt, devicetree, robh
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] The compatible string list does not include the generic 'snps,dwc3' fallback required for the generic platform driver to probe.
- [Medium] The flat DWC3 controller binding fails to reference the common DWC3 schema and incorrectly uses `additionalProperties: false`, which explicitly rejects standard DWC3 and USB properties.
- [Low] The `phy-names` property uses a scalar `enum` on an array type, which causes a JSON schema type mismatch.
--
--- Patch [1]: [PATCH v2 1/2] dt-bindings: usb: dwc3: Document Renesas R-Car Gen5 DWC3 xHCI USB controller ---
commit 4cc09ce41f0476bc2f778f2624aafad6ed1dfffc
Author: Marek Vasut <marek.vasut+renesas@mailbox.org>
dt-bindings: usb: dwc3: Document Renesas R-Car Gen5 DWC3 xHCI USB controller
This commit introduces the device tree binding documentation for the Renesas
R-Car Gen5 DWC3 USB controller. It specifies the properties required for the
glue logic and the controller itself, using a flat binding approach.
> diff --git a/Documentation/devicetree/bindings/usb/renesas,rcar-gen5-dwc3.yaml b/Documentation/devicetree/bindings/usb/renesas,rcar-gen5-dwc3.yaml
> new file mode 100644
> index 0000000000000..9f48f90d6df85
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/renesas,rcar-gen5-dwc3.yaml
> @@ -0,0 +1,79 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/usb/renesas,rcar-gen5-dwc3.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Renesas R-Car Gen5 DWC3 xHCI USB controller
> +
> +maintainers:
> + - Marek Vasut <marek.vasut+renesas@mailbox.org>
> +
> +properties:
> + compatible:
> + items:
> + - const: renesas,r8a78000-dwc3
> + - const: renesas,rcar-gen5-dwc3
[Severity: High]
Is the generic snps,dwc3 fallback required in this compatible string list?
The commit message notes this is a flat binding for the generic platform
driver, but omitting the mandatory snps,dwc3 fallback restricts the schema
to exactly these two items.
Without the generic fallback, the generic DWC3 driver in
drivers/usb/dwc3/core.c will not recognize the Renesas-specific compatible
string. This regression will cause the USB controller to silently fail to
probe when booting with this schema.
[ ... ]
> + phys:
> + maxItems: 1
> +
> + phy-names:
> + enum: [ usb2-phy, usb3-phy ]
[Severity: Low]
Will applying a scalar enum directly to the phy-names property cause a JSON
schema type mismatch during validation?
Because phy-names is typed as a string-array by the core device tree schemas,
limiting its items with a direct enum implies the array itself must identically
match one of the string elements. This type mismatch introduces a regression
leading to validation errors during dt_binding_check.
Should this be defined using items: enum: [ usb2-phy, usb3-phy ] instead?
[ ... ]
> +required:
> + - compatible
> + - reg
> + - reg-names
> + - clocks
> + - interrupts
> + - maximum-speed
> + - phys
> + - phy-names
> + - power-domains
> + - resets
> +
> +additionalProperties: false
[Severity: Medium]
By setting additionalProperties to false without a reference to the core DWC3
schema, are we blocking all standard DWC3 and USB properties?
If a device tree attempts to use standard DWC3 properties like
snps,dis_u2_susphy_quirk or usb-role-switch, the schema validation phase
(dt_binding_check) will reject them because only explicitly listed properties
are allowed.
Could a reference like $ref: snps,dwc3.yaml# be missing here to allow the
flat binding to accept generic properties?
> +
> +examples:
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260806050422.324435-1-marek.vasut+renesas@mailbox.org?part=1
^ permalink raw reply [flat|nested] 4+ messages in thread