* [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support
@ 2026-07-08 8:12 Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 01/17] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY Claudiu Beznea
` (18 more replies)
0 siblings, 19 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Hi,
Patches backport the Renesas RZ/G3S USB support.
Thank you,
Claudiu
Changes in v2:
- added patch "clk: renesas: rzg2l: Deassert reset on assert timeout"
- adjusted the code from the patches:
-- "usb: host: ehci-platform: Call reset assert/deassert on suspend/resume"
-- "usb: host: ohci-platform: Call reset assert/deassert on suspend/resume"
to execute only for the Renesas RZ/G3S
Claudiu Beznea (16):
reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY
dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support
reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC
reset: rzg2l-usbphy-ctrl: Propagate the return value of
regmap_field_update_bits()
reset: rzg2l-usbphy-ctrl: Add suspend/resume support
reset: rzg2l-usbphy-ctrl: Check pwrrdy is valid before using it
usb: host: Do not check priv->clks[clk]
usb: host: ehci-platform: Call reset assert/deassert on suspend/resume
usb: host: ohci-platform: Call reset assert/deassert on suspend/resume
dt-bindings: usb: renesas,usbhs: Document RZ/G3S SoC
usb: renesas_usbhs: Assert/de-assert reset signals on suspend/resume
dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S
phy: renesas: rcar-gen3-usb2: Move phy_data->init_bus check
phy: renesas: rcar-gen3-usb2: Add suspend/resume support
arm64: dts: renesas: r9a08g045: Add USB support
arm64: dts: renesas: rzg3s-smarc: Enable USB support
Dan Carpenter (1):
reset: rzg2l-usbphy-ctrl: Fix a NULL vs IS_ERR() bug in probe
.../bindings/phy/renesas,usb2-phy.yaml | 1 +
.../reset/renesas,rzg2l-usbphy-ctrl.yaml | 41 ++++-
.../bindings/usb/renesas,usbhs.yaml | 1 +
arch/arm64/boot/dts/renesas/r9a08g045.dtsi | 118 ++++++++++++++
arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi | 57 +++++++
drivers/phy/renesas/phy-rcar-gen3-usb2.c | 66 +++++---
drivers/reset/Kconfig | 1 +
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 151 +++++++++++++++++-
drivers/usb/host/ehci-platform.c | 42 ++++-
drivers/usb/host/ohci-platform.c | 41 ++++-
drivers/usb/renesas_usbhs/common.c | 35 ++--
11 files changed, 504 insertions(+), 50 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 01/17] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-27 12:34 ` Pavel Machek
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 02/17] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support Claudiu Beznea
` (17 subsequent siblings)
18 siblings, 1 reply; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit 78f2d64e484753bfede6a0e9eab0ef35830c34fb upstream.
On the Renesas RZ/G3S SoC, the USB PHY block has an input signal called
PWRRDY. This signal is managed by the system controller and must be
de-asserted after powering on the area where USB PHY resides and asserted
before powering it off.
On power-on/resume the USB PWRRDY signal need to be de-asserted before
enabling clock and switching the module to normal state (through MSTOP
support). The power-on/resume configuration sequence must be:
1/ PWRRDY=0
2/ CLK_ON=1
3/ MSTOP=0
On power-off/suspend the configuration sequence should be:
1/ MSTOP=1
2/ CLK_ON=0
3/ PWRRDY=1
The CLK_ON and MSTOP functionalities are controlled by clock drivers.
The suspend/resume support will be handled by different patches.
After long discussions with the internal HW team, it has been confirmed
that the HW connection b/w USB PHY block, the USB channels, the system
controller, clock, MSTOP, PWRRDY signal is as follows:
┌──────────────────────────────┐
│ │◄── CPG_CLKON_USB.CLK0_ON
│ USB CH0 │
┌──────────────────────────┐ │┌───────────────────────────┐ │◄── CPG_CLKON_USB.CLK2_ON
│ ┌────────┐ ││host controller registers │ │
│ │ │ ││function controller registers│
│ │ PHY0 │◄──┤└───────────────────────────┘ │
│ USB PHY │ │ └────────────▲─────────────────┘
│ └────────┘ │
│ │ CPG_BUS_PERI_COM_MSTOP.MSTOP{6, 5}_ON
│┌──────────────┐ ┌────────┐
││USHPHY control│ │ │
││ registers │ │ PHY1 │ ┌──────────────────────────────┐
│└──────────────┘ │ │◄──┤ USB CH1 │
│ └────────┘ │┌───────────────────────────┐ │◄── CPG_CLKON_USB.CLK1_ON
└─▲───────▲─────────▲──────┘ ││ host controller registers │ │
│ │ │ │└───────────────────────────┘ │
│ │ │ └────────────▲─────────────────┘
│ │ │ │
│ │ │ CPG_BUS_PERI_COM_MSTOP.MSTOP7_ON
│PWRRDY │ │
│ │ CPG_CLK_ON_USB.CLK3_ON
│ │
│ CPG_BUS_PERI_COM_MSTOP.MSTOP4_ON
│
┌────┐
│SYSC│
└────┘
where:
- CPG_CLKON_USB.CLK.CLKX_ON is the register bit controlling the clock X
of different USB blocks, X in {0, 1, 2, 3}
- CPG_BUS_PERI_COM_MSTOP.MSTOPX_ON is the register bit controlling the
MSTOP of different USB blocks, X in {4, 5, 6, 7}
- USB PHY is the USB PHY block exposing 2 ports, port0 and port1, used
by the USB CH0, USB CH1
- SYSC is the system controller block controlling the PWRRDY signal
- USB CHx are individual USB block with host and function capabilities
(USB CH0 have both host and function capabilities, USB CH1 has only
host capabilities)
The USBPHY control registers are controlled though the
reset-rzg2l-usbphy-ctrl driver. The USB PHY ports are controlled by
phy_rcar_gen3_usb2 (drivers/phy/renesas/phy-rcar-gen3-usb2.c file). The
USB PHY ports request resets from the reset-rzg2l-usbphy-ctrl driver.
The connection b/w the system controller and the USB PHY CTRL driver is
implemented through the renesas,sysc-pwrrdy device tree property
proposed in this patch. This property specifies the register offset and the
bitmask required to control the PWRRDY signal.
Since the USB PHY CTRL driver needs to be probed before any other
USB-specific driver on RZ/G3S, control of PWRRDY is passed exclusively
to it. This guarantees the correct configuration sequence between clocks,
MSTOP bits, and the PWRRDY bit on probe/resume and remove/suspend. At the
same time, changes are kept minimal by avoiding modifications to the USB
PHY driver to also handle the PWRRDY itself.
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/reset/Kconfig | 1 +
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 56 +++++++++++++++++++++++++
2 files changed, 57 insertions(+)
diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
index 8329ebd982f1..380b7e87fcd6 100644
--- a/drivers/reset/Kconfig
+++ b/drivers/reset/Kconfig
@@ -227,6 +227,7 @@ config RESET_RASPBERRYPI
config RESET_RZG2L_USBPHY_CTRL
tristate "Renesas RZ/G2L USBPHY control driver"
depends on ARCH_RZG2L || COMPILE_TEST
+ select MFD_SYSCON
help
Support for USBPHY Control found on RZ/G2L family. It mainly
controls reset and power down of the USB/PHY.
diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
index 4e2ac1f0060c..dcc8c2dde3f8 100644
--- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
+++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
@@ -13,6 +13,7 @@
#include <linux/regmap.h>
#include <linux/reset.h>
#include <linux/reset-controller.h>
+#include <linux/mfd/syscon.h>
#define RESET 0x000
#define VBENCTL 0x03c
@@ -91,6 +92,8 @@ static int rzg2l_usbphy_ctrl_status(struct reset_controller_dev *rcdev,
return !!(readl(priv->base + RESET) & port_mask);
}
+#define RZG2L_USBPHY_CTRL_PWRRDY 1
+
static const struct of_device_id rzg2l_usbphy_ctrl_match_table[] = {
{ .compatible = "renesas,rzg2l-usbphy-ctrl" },
{ /* Sentinel */ }
@@ -110,6 +113,55 @@ static const struct regmap_config rzg2l_usb_regconf = {
.max_register = 1,
};
+static void rzg2l_usbphy_ctrl_set_pwrrdy(struct regmap_field *pwrrdy,
+ bool power_on)
+{
+ u32 val = power_on ? 0 : 1;
+
+ /* The initialization path guarantees that the mask is 1 bit long. */
+ regmap_field_update_bits(pwrrdy, 1, val);
+}
+
+static void rzg2l_usbphy_ctrl_pwrrdy_off(void *data)
+{
+ rzg2l_usbphy_ctrl_set_pwrrdy(data, false);
+}
+
+static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev)
+{
+ struct regmap_field *pwrrdy;
+ struct reg_field field;
+ struct regmap *regmap;
+ const int *data;
+ u32 args[2];
+
+ data = device_get_match_data(dev);
+ if ((uintptr_t)data != RZG2L_USBPHY_CTRL_PWRRDY)
+ return 0;
+
+ regmap = syscon_regmap_lookup_by_phandle_args(dev->of_node,
+ "renesas,sysc-pwrrdy",
+ ARRAY_SIZE(args), args);
+ if (IS_ERR(regmap))
+ return PTR_ERR(regmap);
+
+ /* Don't allow more than one bit in mask. */
+ if (hweight32(args[1]) != 1)
+ return -EINVAL;
+
+ field.reg = args[0];
+ field.lsb = __ffs(args[1]);
+ field.msb = __fls(args[1]);
+
+ pwrrdy = devm_regmap_field_alloc(dev, regmap, field);
+ if (!pwrrdy)
+ return -ENOMEM;
+
+ rzg2l_usbphy_ctrl_set_pwrrdy(pwrrdy, true);
+
+ return devm_add_action_or_reset(dev, rzg2l_usbphy_ctrl_pwrrdy_off, pwrrdy);
+}
+
static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -132,6 +184,10 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
if (IS_ERR(regmap))
return PTR_ERR(regmap);
+ error = rzg2l_usbphy_ctrl_pwrrdy_init(dev);
+ if (error)
+ return error;
+
priv->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
if (IS_ERR(priv->rstc))
return dev_err_probe(dev, PTR_ERR(priv->rstc),
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 02/17] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 01/17] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 03/17] reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC Claudiu Beznea
` (16 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit 20eee0f69c9034a0f613528f829dcaca192740d5 upstream.
The Renesas USB PHY hardware block needs to have the PWRRDY bit in the
system controller set before applying any other settings. The PWRRDY bit
must be controlled during power-on, power-off, and system suspend/resume
sequences as follows:
- during power-on/resume, it must be set to zero before enabling clocks and
modules
- during power-off/suspend, it must be set to one after disabling clocks
and modules
Add the renesas,sysc-pwrrdy device tree property, which allows the
reset-rzg2l-usbphy-ctrl driver to parse, map, and control the system
controller PWRRDY bit at the appropriate time. Along with it add a new
compatible for the RZ/G3S SoC.
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
.../reset/renesas,rzg2l-usbphy-ctrl.yaml | 41 ++++++++++++++++---
1 file changed, 35 insertions(+), 6 deletions(-)
diff --git a/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml b/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
index b0b20af15313..c83469a1b379 100644
--- a/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
+++ b/Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
@@ -15,12 +15,14 @@ description:
properties:
compatible:
- items:
- - enum:
- - renesas,r9a07g043-usbphy-ctrl # RZ/G2UL and RZ/Five
- - renesas,r9a07g044-usbphy-ctrl # RZ/G2{L,LC}
- - renesas,r9a07g054-usbphy-ctrl # RZ/V2L
- - const: renesas,rzg2l-usbphy-ctrl
+ oneOf:
+ - items:
+ - enum:
+ - renesas,r9a07g043-usbphy-ctrl # RZ/G2UL and RZ/Five
+ - renesas,r9a07g044-usbphy-ctrl # RZ/G2{L,LC}
+ - renesas,r9a07g054-usbphy-ctrl # RZ/V2L
+ - const: renesas,rzg2l-usbphy-ctrl
+ - const: renesas,r9a08g045-usbphy-ctrl # RZ/G3S
reg:
maxItems: 1
@@ -48,6 +50,20 @@ properties:
$ref: /schemas/regulator/regulator.yaml#
unevaluatedProperties: false
+ renesas,sysc-pwrrdy:
+ description:
+ The system controller PWRRDY indicates to the USB PHY if the power supply
+ is ready. PWRRDY needs to be set during power-on before applying any
+ other settings. It also needs to be set before powering off the USB.
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ items:
+ - items:
+ - description:
+ System controller phandle required by USB PHY CTRL driver to set
+ PWRRDY
+ - description: Register offset associated with PWRRDY
+ - description: Register bitmask associated with PWRRDY
+
required:
- compatible
- reg
@@ -57,6 +73,19 @@ required:
- '#reset-cells'
- regulator-vbus
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a08g045-usbphy-ctrl
+ then:
+ required:
+ - renesas,sysc-pwrrdy
+ else:
+ properties:
+ renesas,sysc-pwrrdy: false
+
additionalProperties: false
examples:
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 03/17] reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 01/17] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 02/17] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 04/17] reset: rzg2l-usbphy-ctrl: Fix a NULL vs IS_ERR() bug in probe Claudiu Beznea
` (15 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit 819ac6b055350c559dbb111f970a96e2c1c812ff upstream.
The Renesas RZ/G3S SoC USB PHY HW block receives as input the USB PWRRDY
signal from the system controller. Add support for the Renesas RZ/G3S SoC.
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
index dcc8c2dde3f8..4d51213e59ba 100644
--- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
+++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
@@ -96,6 +96,10 @@ static int rzg2l_usbphy_ctrl_status(struct reset_controller_dev *rcdev,
static const struct of_device_id rzg2l_usbphy_ctrl_match_table[] = {
{ .compatible = "renesas,rzg2l-usbphy-ctrl" },
+ {
+ .compatible = "renesas,r9a08g045-usbphy-ctrl",
+ .data = (void *)RZG2L_USBPHY_CTRL_PWRRDY
+ },
{ /* Sentinel */ }
};
MODULE_DEVICE_TABLE(of, rzg2l_usbphy_ctrl_match_table);
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 04/17] reset: rzg2l-usbphy-ctrl: Fix a NULL vs IS_ERR() bug in probe
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (2 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 03/17] reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 05/17] reset: rzg2l-usbphy-ctrl: Propagate the return value of regmap_field_update_bits() Claudiu Beznea
` (14 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Dan Carpenter <dan.carpenter@linaro.org>
commit cea5d43b63b221522f8532a7894149f3d8d11f4b upstream.
The devm_regmap_field_alloc() function never returns NULL, it returns
error pointers. Update the error checking to match.
Fixes: 58128aa88867 ("reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
index 4d51213e59ba..6d8c48d247a0 100644
--- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
+++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
@@ -158,8 +158,8 @@ static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev)
field.msb = __fls(args[1]);
pwrrdy = devm_regmap_field_alloc(dev, regmap, field);
- if (!pwrrdy)
- return -ENOMEM;
+ if (IS_ERR(pwrrdy))
+ return PTR_ERR(pwrrdy);
rzg2l_usbphy_ctrl_set_pwrrdy(pwrrdy, true);
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 05/17] reset: rzg2l-usbphy-ctrl: Propagate the return value of regmap_field_update_bits()
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (3 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 04/17] reset: rzg2l-usbphy-ctrl: Fix a NULL vs IS_ERR() bug in probe Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 06/17] reset: rzg2l-usbphy-ctrl: Add suspend/resume support Claudiu Beznea
` (13 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit 2289ccd753deeb2cfe300d97e8697680c1ce556c upstream.
Propagate the return value of regmap_field_update_bits() to avoid losing
any possible error. With this, the return type of
rzg2l_usbphy_ctrl_set_pwrrdy() was updated accordingly.
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
index 6d8c48d247a0..6158f8a288af 100644
--- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
+++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
@@ -117,13 +117,13 @@ static const struct regmap_config rzg2l_usb_regconf = {
.max_register = 1,
};
-static void rzg2l_usbphy_ctrl_set_pwrrdy(struct regmap_field *pwrrdy,
- bool power_on)
+static int rzg2l_usbphy_ctrl_set_pwrrdy(struct regmap_field *pwrrdy,
+ bool power_on)
{
u32 val = power_on ? 0 : 1;
/* The initialization path guarantees that the mask is 1 bit long. */
- regmap_field_update_bits(pwrrdy, 1, val);
+ return regmap_field_update_bits(pwrrdy, 1, val);
}
static void rzg2l_usbphy_ctrl_pwrrdy_off(void *data)
@@ -138,6 +138,7 @@ static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev)
struct regmap *regmap;
const int *data;
u32 args[2];
+ int ret;
data = device_get_match_data(dev);
if ((uintptr_t)data != RZG2L_USBPHY_CTRL_PWRRDY)
@@ -161,7 +162,9 @@ static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev)
if (IS_ERR(pwrrdy))
return PTR_ERR(pwrrdy);
- rzg2l_usbphy_ctrl_set_pwrrdy(pwrrdy, true);
+ ret = rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, true);
+ if (ret)
+ return ret;
return devm_add_action_or_reset(dev, rzg2l_usbphy_ctrl_pwrrdy_off, pwrrdy);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 06/17] reset: rzg2l-usbphy-ctrl: Add suspend/resume support
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (4 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 05/17] reset: rzg2l-usbphy-ctrl: Propagate the return value of regmap_field_update_bits() Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 07/17] reset: rzg2l-usbphy-ctrl: Check pwrrdy is valid before using it Claudiu Beznea
` (12 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit c5b7cd9adefc5c060facaff6f54d3187480e4e1b upstream.
The RZ/G2L USBPHY control driver is also used on the RZ/G3S SoC.
The RZ/G3S SoC supports a power-saving mode in which power to most USB
components (including the USBPHY control block) is turned off. Because of
this, the USBPHY control block needs to be reconfigured when returning
from power-saving mode.
Add suspend/resume support to handle runtime suspend/resume of the device,
assert/deassert the reset signal, and reinitialize the USBPHY control
block.
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 99 +++++++++++++++++++++----
1 file changed, 84 insertions(+), 15 deletions(-)
diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
index 6158f8a288af..b09ba063339a 100644
--- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
+++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
@@ -36,6 +36,7 @@ struct rzg2l_usbphy_ctrl_priv {
struct reset_control *rstc;
void __iomem *base;
struct platform_device *vdev;
+ struct regmap_field *pwrrdy;
spinlock_t lock;
};
@@ -92,6 +93,19 @@ static int rzg2l_usbphy_ctrl_status(struct reset_controller_dev *rcdev,
return !!(readl(priv->base + RESET) & port_mask);
}
+/* put pll and phy into reset state */
+static void rzg2l_usbphy_ctrl_init(struct rzg2l_usbphy_ctrl_priv *priv)
+{
+ unsigned long flags;
+ u32 val;
+
+ spin_lock_irqsave(&priv->lock, flags);
+ val = readl(priv->base + RESET);
+ val |= RESET_SEL_PLLRESET | RESET_PLLRESET | PHY_RESET_PORT2 | PHY_RESET_PORT1;
+ writel(val, priv->base + RESET);
+ spin_unlock_irqrestore(&priv->lock, flags);
+}
+
#define RZG2L_USBPHY_CTRL_PWRRDY 1
static const struct of_device_id rzg2l_usbphy_ctrl_match_table[] = {
@@ -131,9 +145,9 @@ static void rzg2l_usbphy_ctrl_pwrrdy_off(void *data)
rzg2l_usbphy_ctrl_set_pwrrdy(data, false);
}
-static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev)
+static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev,
+ struct rzg2l_usbphy_ctrl_priv *priv)
{
- struct regmap_field *pwrrdy;
struct reg_field field;
struct regmap *regmap;
const int *data;
@@ -158,15 +172,15 @@ static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev)
field.lsb = __ffs(args[1]);
field.msb = __fls(args[1]);
- pwrrdy = devm_regmap_field_alloc(dev, regmap, field);
- if (IS_ERR(pwrrdy))
- return PTR_ERR(pwrrdy);
+ priv->pwrrdy = devm_regmap_field_alloc(dev, regmap, field);
+ if (IS_ERR(priv->pwrrdy))
+ return PTR_ERR(priv->pwrrdy);
ret = rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, true);
if (ret)
return ret;
- return devm_add_action_or_reset(dev, rzg2l_usbphy_ctrl_pwrrdy_off, pwrrdy);
+ return devm_add_action_or_reset(dev, rzg2l_usbphy_ctrl_pwrrdy_off, priv->pwrrdy);
}
static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
@@ -175,9 +189,7 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
struct rzg2l_usbphy_ctrl_priv *priv;
struct platform_device *vdev;
struct regmap *regmap;
- unsigned long flags;
int error;
- u32 val;
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
if (!priv)
@@ -191,7 +203,7 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
if (IS_ERR(regmap))
return PTR_ERR(regmap);
- error = rzg2l_usbphy_ctrl_pwrrdy_init(dev);
+ error = rzg2l_usbphy_ctrl_pwrrdy_init(dev, priv);
if (error)
return error;
@@ -214,12 +226,7 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
goto err_pm_disable_reset_deassert;
}
- /* put pll and phy into reset state */
- spin_lock_irqsave(&priv->lock, flags);
- val = readl(priv->base + RESET);
- val |= RESET_SEL_PLLRESET | RESET_PLLRESET | PHY_RESET_PORT2 | PHY_RESET_PORT1;
- writel(val, priv->base + RESET);
- spin_unlock_irqrestore(&priv->lock, flags);
+ rzg2l_usbphy_ctrl_init(priv);
priv->rcdev.ops = &rzg2l_usbphy_ctrl_reset_ops;
priv->rcdev.of_reset_n_cells = 1;
@@ -266,10 +273,72 @@ static void rzg2l_usbphy_ctrl_remove(struct platform_device *pdev)
reset_control_assert(priv->rstc);
}
+static int rzg2l_usbphy_ctrl_suspend(struct device *dev)
+{
+ struct rzg2l_usbphy_ctrl_priv *priv = dev_get_drvdata(dev);
+ u32 val;
+ int ret;
+
+ val = readl(priv->base + RESET);
+ if (!(val & PHY_RESET_PORT2) || !(val & PHY_RESET_PORT1))
+ WARN(1, "Suspend with resets de-asserted\n");
+
+ pm_runtime_put_sync(dev);
+
+ ret = reset_control_assert(priv->rstc);
+ if (ret)
+ goto rpm_resume;
+
+ ret = rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, false);
+ if (ret)
+ goto reset_deassert;
+
+ return 0;
+
+reset_deassert:
+ reset_control_deassert(priv->rstc);
+rpm_resume:
+ pm_runtime_resume_and_get(dev);
+ return ret;
+}
+
+static int rzg2l_usbphy_ctrl_resume(struct device *dev)
+{
+ struct rzg2l_usbphy_ctrl_priv *priv = dev_get_drvdata(dev);
+ int ret;
+
+ ret = rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, true);
+ if (ret)
+ return ret;
+
+ ret = reset_control_deassert(priv->rstc);
+ if (ret)
+ goto pwrrdy_off;
+
+ ret = pm_runtime_resume_and_get(dev);
+ if (ret)
+ goto reset_assert;
+
+ rzg2l_usbphy_ctrl_init(priv);
+
+ return 0;
+
+reset_assert:
+ reset_control_assert(priv->rstc);
+pwrrdy_off:
+ rzg2l_usbphy_ctrl_set_pwrrdy(priv->pwrrdy, false);
+ return ret;
+}
+
+static DEFINE_SIMPLE_DEV_PM_OPS(rzg2l_usbphy_ctrl_pm_ops,
+ rzg2l_usbphy_ctrl_suspend,
+ rzg2l_usbphy_ctrl_resume);
+
static struct platform_driver rzg2l_usbphy_ctrl_driver = {
.driver = {
.name = "rzg2l_usbphy_ctrl",
.of_match_table = rzg2l_usbphy_ctrl_match_table,
+ .pm = pm_ptr(&rzg2l_usbphy_ctrl_pm_ops),
},
.probe = rzg2l_usbphy_ctrl_probe,
.remove_new = rzg2l_usbphy_ctrl_remove,
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 07/17] reset: rzg2l-usbphy-ctrl: Check pwrrdy is valid before using it
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (5 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 06/17] reset: rzg2l-usbphy-ctrl: Add suspend/resume support Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 08/17] usb: host: Do not check priv->clks[clk] Claudiu Beznea
` (11 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit e0cf84109bc6c6768337123f1de24ff56b41c91b upstream.
The pwrrdy regmap_filed is allocated in rzg2l_usbphy_ctrl_pwrrdy_init()
only if the driver data is set to RZG2L_USBPHY_CTRL_PWRRDY. Check that
pwrrdy is valid before using it to avoid "Unable to handle kernel NULL
pointer dereference at virtual address" errors.
Fixes: c5b7cd9adefc ("reset: rzg2l-usbphy-ctrl: Add suspend/resume support")
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/reset/reset-rzg2l-usbphy-ctrl.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
index b09ba063339a..e6970ae6f9ca 100644
--- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
+++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
@@ -136,6 +136,9 @@ static int rzg2l_usbphy_ctrl_set_pwrrdy(struct regmap_field *pwrrdy,
{
u32 val = power_on ? 0 : 1;
+ if (!pwrrdy)
+ return 0;
+
/* The initialization path guarantees that the mask is 1 bit long. */
return regmap_field_update_bits(pwrrdy, 1, val);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 08/17] usb: host: Do not check priv->clks[clk]
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (6 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 07/17] reset: rzg2l-usbphy-ctrl: Check pwrrdy is valid before using it Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 09/17] usb: host: ehci-platform: Call reset assert/deassert on suspend/resume Claudiu Beznea
` (10 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit a7d5fe02059af66c9759cbf9199e7ed381cc592a upstream.
There is no need to check the entries in priv->clks[] array before passing
it to clk_disable_unprepare() as the clk_disable_unprepare() already
check if it receives a NULL or error pointer as argument. Remove this
check. This makes the code simpler.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20251106143625.3050119-2-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/usb/host/ehci-platform.c | 3 +--
drivers/usb/host/ohci-platform.c | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
index 98b073185e1c..cca129c70276 100644
--- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c
@@ -111,8 +111,7 @@ static void ehci_platform_power_off(struct platform_device *dev)
int clk;
for (clk = EHCI_MAX_CLKS - 1; clk >= 0; clk--)
- if (priv->clks[clk])
- clk_disable_unprepare(priv->clks[clk]);
+ clk_disable_unprepare(priv->clks[clk]);
}
static struct hc_driver __read_mostly ehci_platform_hc_driver;
diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
index 1cd4757f24da..c5eae986f6ab 100644
--- a/drivers/usb/host/ohci-platform.c
+++ b/drivers/usb/host/ohci-platform.c
@@ -69,8 +69,7 @@ static void ohci_platform_power_off(struct platform_device *dev)
int clk;
for (clk = OHCI_MAX_CLKS - 1; clk >= 0; clk--)
- if (priv->clks[clk])
- clk_disable_unprepare(priv->clks[clk]);
+ clk_disable_unprepare(priv->clks[clk]);
}
static struct hc_driver __read_mostly ohci_platform_hc_driver;
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 09/17] usb: host: ehci-platform: Call reset assert/deassert on suspend/resume
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (7 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 08/17] usb: host: Do not check priv->clks[clk] Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 10/17] usb: host: ohci-platform: " Claudiu Beznea
` (9 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit c31a401fe7abedabb5c05b5cbf36e2fdb3e6be63 upstream.
The Renesas RZ/G3S SoC supports a power-saving mode in which power to most
of the SoC components is turned off, including the USB blocks. On the
resume path, the reset signal must be de-asserted before applying any
settings to the USB registers. To handle this properly, call
reset_control_assert() and reset_control_deassert() during suspend and
resume, respectively.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Link: https://patch.msgid.link/20251106143625.3050119-3-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[claudiu.beznea: execute the code based on the
ehci_platform_reset_control_allowed() return value]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- added ehci_platform_reset_control_allowed() and use it in suspend/resume
path to avoid executing code introduced by commit
c31a401fe7abedabb5c05b5cbf36e2fdb3e6be63 on targets other than the
Renesas RZ/G3S
drivers/usb/host/ehci-platform.c | 39 ++++++++++++++++++++++++++++++--
1 file changed, 37 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
index cca129c70276..1b85fd01cb2b 100644
--- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c
@@ -424,6 +424,16 @@ static void ehci_platform_remove(struct platform_device *dev)
dev->dev.platform_data = NULL;
}
+static bool __maybe_unused ehci_platform_reset_control_allowed(void)
+{
+ static const char * const reset_control_allow_list[] = {
+ "renesas,r9a08g045", /* Renesas RZ/G3S */
+ NULL
+ };
+
+ return of_machine_compatible_match(reset_control_allow_list);
+}
+
static int __maybe_unused ehci_platform_suspend(struct device *dev)
{
struct usb_hcd *hcd = dev_get_drvdata(dev);
@@ -443,6 +453,20 @@ static int __maybe_unused ehci_platform_suspend(struct device *dev)
if (pdata->power_suspend)
pdata->power_suspend(pdev);
+ if (!ehci_platform_reset_control_allowed())
+ return ret;
+
+ ret = reset_control_assert(priv->rsts);
+ if (ret) {
+ if (pdata->power_on)
+ pdata->power_on(pdev);
+
+ ehci_resume(hcd, false);
+
+ if (priv->quirk_poll)
+ quirk_poll_init(priv);
+ }
+
return ret;
}
@@ -452,12 +476,23 @@ static int __maybe_unused ehci_platform_resume(struct device *dev)
struct usb_ehci_pdata *pdata = dev_get_platdata(dev);
struct platform_device *pdev = to_platform_device(dev);
struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd);
+ bool reset_control_allowed = ehci_platform_reset_control_allowed();
struct device *companion_dev;
+ int err;
+
+ if (reset_control_allowed) {
+ err = reset_control_deassert(priv->rsts);
+ if (err)
+ return err;
+ }
if (pdata->power_on) {
- int err = pdata->power_on(pdev);
- if (err < 0)
+ err = pdata->power_on(pdev);
+ if (err < 0) {
+ if (reset_control_allowed)
+ reset_control_assert(priv->rsts);
return err;
+ }
}
companion_dev = usb_of_get_companion_dev(hcd->self.controller);
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 10/17] usb: host: ohci-platform: Call reset assert/deassert on suspend/resume
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (8 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 09/17] usb: host: ehci-platform: Call reset assert/deassert on suspend/resume Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 11/17] dt-bindings: usb: renesas,usbhs: Document RZ/G3S SoC Claudiu Beznea
` (8 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit e4d9da32bf6059cb485caac4c9c0a2e36cdd5573 upstream.
The Renesas RZ/G3S SoC supports a power-saving mode in which power to most
of the SoC components is turned off, including the USB blocks. On the
resume path, the reset signal must be de-asserted before applying any
settings to the USB registers. To handle this properly, call
reset_control_assert() and reset_control_deassert() during suspend and
resume, respectively.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://patch.msgid.link/20251106143625.3050119-4-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[claudiu.beznea: execute the code based on the
ohci_platform_reset_control_allowed() return value]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- added ohci_platform_reset_control_allowed() and use it in suspend/resume
path to avoid executing code introduced by commit
e4d9da32bf6059cb485caac4c9c0a2e36cdd5573 on targets other than the
Renesas RZ/G3S
drivers/usb/host/ohci-platform.c | 38 ++++++++++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
index c5eae986f6ab..aa0848d366da 100644
--- a/drivers/usb/host/ohci-platform.c
+++ b/drivers/usb/host/ohci-platform.c
@@ -265,11 +265,22 @@ static void ohci_platform_remove(struct platform_device *dev)
}
#ifdef CONFIG_PM_SLEEP
+static bool ohci_platform_reset_control_allowed(void)
+{
+ static const char * const reset_control_allow_list[] = {
+ "renesas,r9a08g045", /* Renesas RZ/G3S */
+ NULL
+ };
+
+ return of_machine_compatible_match(reset_control_allow_list);
+}
+
static int ohci_platform_suspend(struct device *dev)
{
struct usb_hcd *hcd = dev_get_drvdata(dev);
struct usb_ohci_pdata *pdata = dev->platform_data;
struct platform_device *pdev = to_platform_device(dev);
+ struct ohci_platform_priv *priv = hcd_to_ohci_priv(hcd);
bool do_wakeup = device_may_wakeup(dev);
int ret;
@@ -280,6 +291,17 @@ static int ohci_platform_suspend(struct device *dev)
if (pdata->power_suspend)
pdata->power_suspend(pdev);
+ if (!ohci_platform_reset_control_allowed())
+ return ret;
+
+ ret = reset_control_assert(priv->resets);
+ if (ret) {
+ if (pdata->power_on)
+ pdata->power_on(pdev);
+
+ ohci_resume(hcd, false);
+ }
+
return ret;
}
@@ -288,11 +310,23 @@ static int ohci_platform_resume_common(struct device *dev, bool hibernated)
struct usb_hcd *hcd = dev_get_drvdata(dev);
struct usb_ohci_pdata *pdata = dev_get_platdata(dev);
struct platform_device *pdev = to_platform_device(dev);
+ struct ohci_platform_priv *priv = hcd_to_ohci_priv(hcd);
+ bool reset_control_allowed = ohci_platform_reset_control_allowed();
+ int err;
+
+ if (reset_control_allowed) {
+ err = reset_control_deassert(priv->resets);
+ if (err)
+ return err;
+ }
if (pdata->power_on) {
- int err = pdata->power_on(pdev);
- if (err < 0)
+ err = pdata->power_on(pdev);
+ if (err < 0) {
+ if (reset_control_allowed)
+ reset_control_assert(priv->resets);
return err;
+ }
}
ohci_resume(hcd, hibernated);
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 11/17] dt-bindings: usb: renesas,usbhs: Document RZ/G3S SoC
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (9 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 10/17] usb: host: ohci-platform: " Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 12/17] usb: renesas_usbhs: Assert/de-assert reset signals on suspend/resume Claudiu Beznea
` (7 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit 3b56774fa25d46bd2ff3707546e30829f52dde9e upstream.
The USBHS IP block on RZ/G3S SoC is identitcal to the one found on the
RZ/G2L device. Document the RZ/G3S USBHS IP block.
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://lore.kernel.org/r/20241126092050.1825607-7-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[claudiu.beznea:
- fixed conflict in compatible section by keping RZ/V2H, RZ/V2N along with
RZ/G3S; at the same time, sorted the compatible list by part number
- fixed conflict in allOf section by keeping the code from v6.1 CIP]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
Documentation/devicetree/bindings/usb/renesas,usbhs.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml b/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml
index 4ad5362987b1..baec5de8e3e2 100644
--- a/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml
+++ b/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml
@@ -26,6 +26,7 @@ properties:
- renesas,usbhs-r9a07g043 # RZ/G2UL and RZ/Five
- renesas,usbhs-r9a07g044 # RZ/G2{L,LC}
- renesas,usbhs-r9a07g054 # RZ/V2L
+ - renesas,usbhs-r9a08g045 # RZ/G3S
- renesas,usbhs-r9a09g056 # RZ/V2N
- renesas,usbhs-r9a09g057 # RZ/V2H(P)
- const: renesas,rzg2l-usbhs
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 12/17] usb: renesas_usbhs: Assert/de-assert reset signals on suspend/resume
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (10 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 11/17] dt-bindings: usb: renesas,usbhs: Document RZ/G3S SoC Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 13/17] dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S Claudiu Beznea
` (6 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit 3578b1cde59496efc4625ba3fbd14eb2918807a2 upstream.
The Renesas RZ/G3S SoC supports a power-saving mode in which power to most
SoC components is turned off, including the USB subsystem.
To properly restore from such a state, the reset signal needs to be
asserted/de-asserted during suspend/resume. Add reset assert/de-assert on
suspend/resume.
The resume code has been moved into a separate function to allow reusing
it in case reset_control_assert() from suspend fails.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://patch.msgid.link/20251106143625.3050119-5-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[claudiu.beznea:
- fixed conflict by keeping usbhsc_restore() function introduced by
commit 3578b1cde59496efc4625ba3fbd14eb2918807a2
- kept __maybe_unused on suspend/resume functions]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/usb/renesas_usbhs/common.c | 35 ++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
index f4a58686bf1e..c0976265b8e6 100644
--- a/drivers/usb/renesas_usbhs/common.c
+++ b/drivers/usb/renesas_usbhs/common.c
@@ -836,10 +836,26 @@ static void usbhs_remove(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev);
}
+static void usbhsc_restore(struct device *dev)
+{
+ struct usbhs_priv *priv = dev_get_drvdata(dev);
+ struct platform_device *pdev = usbhs_priv_to_pdev(priv);
+
+ if (!usbhs_get_dparam(priv, runtime_pwctrl)) {
+ usbhsc_power_ctrl(priv, 1);
+ usbhs_mod_autonomy_mode(priv);
+ }
+
+ usbhs_platform_call(priv, phy_reset, pdev);
+
+ usbhsc_schedule_notify_hotplug(pdev);
+}
+
static __maybe_unused int usbhsc_suspend(struct device *dev)
{
struct usbhs_priv *priv = dev_get_drvdata(dev);
struct usbhs_mod *mod = usbhs_mod_get_current(priv);
+ int ret;
if (mod) {
usbhs_mod_call(priv, stop, priv);
@@ -849,22 +865,23 @@ static __maybe_unused int usbhsc_suspend(struct device *dev)
if (mod || !usbhs_get_dparam(priv, runtime_pwctrl))
usbhsc_power_ctrl(priv, 0);
- return 0;
+ ret = reset_control_assert(priv->rsts);
+ if (ret)
+ usbhsc_restore(dev);
+
+ return ret;
}
static __maybe_unused int usbhsc_resume(struct device *dev)
{
struct usbhs_priv *priv = dev_get_drvdata(dev);
- struct platform_device *pdev = usbhs_priv_to_pdev(priv);
-
- if (!usbhs_get_dparam(priv, runtime_pwctrl)) {
- usbhsc_power_ctrl(priv, 1);
- usbhs_mod_autonomy_mode(priv);
- }
+ int ret;
- usbhs_platform_call(priv, phy_reset, pdev);
+ ret = reset_control_deassert(priv->rsts);
+ if (ret)
+ return ret;
- usbhsc_schedule_notify_hotplug(pdev);
+ usbhsc_restore(dev);
return 0;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 13/17] dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (11 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 12/17] usb: renesas_usbhs: Assert/de-assert reset signals on suspend/resume Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 14/17] phy: renesas: rcar-gen3-usb2: Move phy_data->init_bus check Claudiu Beznea
` (5 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit bc6f8b756c89d831c91a65ef9f3b5ceabdbae441 upstream.
The reset lines are mandatory for the Renesas RZ/G3S platform and must be
explicitly defined in device tree.
Fixes: f3c849855114 ("dt-bindings: phy: renesas,usb2-phy: Document RZ/G3S phy bindings")
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://patch.msgid.link/20251023135810.1688415-2-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
[claudiu.beznea: kept the compatible list sorted by part number]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
index 179cb4bfc424..b9d9bf1aee7d 100644
--- a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
@@ -117,6 +117,7 @@ allOf:
compatible:
contains:
enum:
+ - renesas,usb2-phy-r9a08g045
- renesas,usb2-phy-r9a09g057
- renesas,rzg2l-usb2-phy
then:
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 14/17] phy: renesas: rcar-gen3-usb2: Move phy_data->init_bus check
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (12 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 13/17] dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 15/17] phy: renesas: rcar-gen3-usb2: Add suspend/resume support Claudiu Beznea
` (4 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit 79d9db7f7a0c94b2b505666513879ac470c7e12f upstream.
Move the check of phy_data->init_bus from rcar_gen3_phy_usb2_init_bus()
to rcar_gen3_phy_usb2_probe() to avoid having it duplicated in both the
probe path and the upcoming resume code. This is a preparatory patch.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patch.msgid.link/20251119120418.686224-2-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
[claudiu.beznea: fixed conflict by keeping the code from this patch]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/phy/renesas/phy-rcar-gen3-usb2.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
index 4e8cf7527439..6127c0b4b944 100644
--- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
+++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
@@ -782,6 +782,9 @@ static int rcar_gen3_phy_usb2_init_bus(struct rcar_gen3_chan *channel)
int ret;
u32 val;
+ if (!channel->phy_data->init_bus)
+ return 0;
+
rstc = devm_reset_control_array_get_shared(dev);
if (IS_ERR(rstc))
return PTR_ERR(rstc);
@@ -861,11 +864,9 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, channel);
channel->dev = dev;
- if (channel->phy_data->init_bus) {
- ret = rcar_gen3_phy_usb2_init_bus(channel);
- if (ret)
- goto error;
- }
+ ret = rcar_gen3_phy_usb2_init_bus(channel);
+ if (ret)
+ goto error;
spin_lock_init(&channel->lock);
for (i = 0; i < NUM_OF_PHYS; i++) {
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 15/17] phy: renesas: rcar-gen3-usb2: Add suspend/resume support
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (13 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 14/17] phy: renesas: rcar-gen3-usb2: Move phy_data->init_bus check Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 16/17] arm64: dts: renesas: r9a08g045: Add USB support Claudiu Beznea
` (3 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit 942a7a6bf4c6a8661324539f686a34c9448610bd upstream.
The Renesas RZ/G3S supports a power saving mode where power to most of the
SoC components is turned off. The USB PHY is among these components.
Because of this the settings applied in driver probe need to be executed
also on resume path. On suspend path only reset signal need to be asserted.
Add suspend/resume support.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patch.msgid.link/20251119120418.686224-3-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
drivers/phy/renesas/phy-rcar-gen3-usb2.c | 57 +++++++++++++++++-------
1 file changed, 42 insertions(+), 15 deletions(-)
diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
index 6127c0b4b944..1628ede79f9a 100644
--- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
+++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
@@ -132,6 +132,7 @@ struct rcar_gen3_chan {
struct device *dev; /* platform_device's device */
const struct rcar_gen3_phy_drv_data *phy_data;
struct extcon_dev *extcon;
+ struct reset_control *rstc;
struct rcar_gen3_phy rphys[NUM_OF_PHYS];
struct regulator *vbus;
struct work_struct work;
@@ -778,38 +779,24 @@ static void rcar_gen3_reset_assert(void *data)
static int rcar_gen3_phy_usb2_init_bus(struct rcar_gen3_chan *channel)
{
struct device *dev = channel->dev;
- struct reset_control *rstc;
int ret;
u32 val;
if (!channel->phy_data->init_bus)
return 0;
- rstc = devm_reset_control_array_get_shared(dev);
- if (IS_ERR(rstc))
- return PTR_ERR(rstc);
-
ret = pm_runtime_resume_and_get(dev);
if (ret)
return ret;
- ret = reset_control_deassert(rstc);
- if (ret)
- goto rpm_put;
-
- ret = devm_add_action_or_reset(dev, rcar_gen3_reset_assert, rstc);
- if (ret)
- goto rpm_put;
-
val = readl(channel->base + USB2_AHB_BUS_CTR);
val &= ~USB2_AHB_BUS_CTR_MBL_MASK;
val |= USB2_AHB_BUS_CTR_MBL_INCR4;
writel(val, channel->base + USB2_AHB_BUS_CTR);
-rpm_put:
pm_runtime_put(dev);
- return ret;
+ return 0;
}
static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
@@ -849,6 +836,18 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
}
}
+ channel->rstc = devm_reset_control_array_get_optional_shared(dev);
+ if (IS_ERR(channel->rstc))
+ return PTR_ERR(channel->rstc);
+
+ ret = reset_control_deassert(channel->rstc);
+ if (ret)
+ return ret;
+
+ ret = devm_add_action_or_reset(dev, rcar_gen3_reset_assert, channel->rstc);
+ if (ret)
+ return ret;
+
/*
* devm_phy_create() will call pm_runtime_enable(&phy->dev);
* And then, phy-core will manage runtime pm for this device.
@@ -937,10 +936,38 @@ static void rcar_gen3_phy_usb2_remove(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev);
};
+static int rcar_gen3_phy_usb2_suspend(struct device *dev)
+{
+ struct rcar_gen3_chan *channel = dev_get_drvdata(dev);
+
+ return reset_control_assert(channel->rstc);
+}
+
+static int rcar_gen3_phy_usb2_resume(struct device *dev)
+{
+ struct rcar_gen3_chan *channel = dev_get_drvdata(dev);
+ int ret;
+
+ ret = reset_control_deassert(channel->rstc);
+ if (ret)
+ return ret;
+
+ ret = rcar_gen3_phy_usb2_init_bus(channel);
+ if (ret)
+ reset_control_assert(channel->rstc);
+
+ return ret;
+}
+
+static DEFINE_SIMPLE_DEV_PM_OPS(rcar_gen3_phy_usb2_pm_ops,
+ rcar_gen3_phy_usb2_suspend,
+ rcar_gen3_phy_usb2_resume);
+
static struct platform_driver rcar_gen3_phy_usb2_driver = {
.driver = {
.name = "phy_rcar_gen3_usb2",
.of_match_table = rcar_gen3_phy_usb2_match_table,
+ .pm = pm_ptr(&rcar_gen3_phy_usb2_pm_ops),
},
.probe = rcar_gen3_phy_usb2_probe,
.remove_new = rcar_gen3_phy_usb2_remove,
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 16/17] arm64: dts: renesas: r9a08g045: Add USB support
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (14 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 15/17] phy: renesas: rcar-gen3-usb2: Add suspend/resume support Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 17/17] arm64: dts: renesas: rzg3s-smarc: Enable " Claudiu Beznea
` (2 subsequent siblings)
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit c837ad879e7110227bac0096a32a7c610e430a8e upstream.
Add USB nodes for the Renesas RZ/G3S SoC. This consists of PHY reset,
host and device support.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://patch.msgid.link/20251023135810.1688415-7-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
[claudiu.beznea: fixed conflict with the PCIe node by keeping both PCIe
and USB nodes and moving the PCIe after USB node to maintain the
sorting by block address]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
arch/arm64/boot/dts/renesas/r9a08g045.dtsi | 118 +++++++++++++++++++++
1 file changed, 118 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a08g045.dtsi b/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
index cb7dae9f7dd6..912b0b8b252c 100644
--- a/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
@@ -691,6 +691,124 @@ eth1: ethernet@11c40000 {
status = "disabled";
};
+ phyrst: usbphy-ctrl@11e00000 {
+ compatible = "renesas,r9a08g045-usbphy-ctrl";
+ reg = <0 0x11e00000 0 0x10000>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>;
+ resets = <&cpg R9A08G045_USB_PRESETN>;
+ power-domains = <&cpg>;
+ #reset-cells = <1>;
+ renesas,sysc-pwrrdy = <&sysc 0xd70 0x1>;
+ status = "disabled";
+
+ usb0_vbus_otg: regulator-vbus {
+ regulator-name = "vbus";
+ };
+ };
+
+ ohci0: usb@11e10000 {
+ compatible = "generic-ohci";
+ reg = <0 0x11e10000 0 0x100>;
+ interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H0_HCLK>;
+ resets = <&phyrst 0>,
+ <&cpg R9A08G045_USB_U2H0_HRESETN>;
+ phys = <&usb2_phy0 1>;
+ phy-names = "usb";
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ ohci1: usb@11e30000 {
+ compatible = "generic-ohci";
+ reg = <0 0x11e30000 0 0x100>;
+ interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H1_HCLK>;
+ resets = <&phyrst 1>,
+ <&cpg R9A08G045_USB_U2H1_HRESETN>;
+ phys = <&usb2_phy1 1>;
+ phy-names = "usb";
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ ehci0: usb@11e10100 {
+ compatible = "generic-ehci";
+ reg = <0 0x11e10100 0 0x100>;
+ interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H0_HCLK>;
+ resets = <&phyrst 0>,
+ <&cpg R9A08G045_USB_U2H0_HRESETN>;
+ phys = <&usb2_phy0 2>;
+ phy-names = "usb";
+ companion = <&ohci0>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ ehci1: usb@11e30100 {
+ compatible = "generic-ehci";
+ reg = <0 0x11e30100 0 0x100>;
+ interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H1_HCLK>;
+ resets = <&phyrst 1>,
+ <&cpg R9A08G045_USB_U2H1_HRESETN>;
+ phys = <&usb2_phy1 2>;
+ phy-names = "usb";
+ companion = <&ohci1>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ usb2_phy0: usb-phy@11e10200 {
+ compatible = "renesas,usb2-phy-r9a08g045";
+ reg = <0 0x11e10200 0 0x700>;
+ interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H0_HCLK>;
+ resets = <&phyrst 0>,
+ <&cpg R9A08G045_USB_U2H0_HRESETN>;
+ #phy-cells = <1>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ usb2_phy1: usb-phy@11e30200 {
+ compatible = "renesas,usb2-phy-r9a08g045";
+ reg = <0 0x11e30200 0 0x700>;
+ interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2H1_HCLK>;
+ resets = <&phyrst 1>,
+ <&cpg R9A08G045_USB_U2H1_HRESETN>;
+ #phy-cells = <1>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ hsusb: usb@11e20000 {
+ compatible = "renesas,usbhs-r9a08g045",
+ "renesas,rzg2l-usbhs";
+ reg = <0 0x11e20000 0 0x10000>;
+ interrupts = <GIC_SPI 85 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD R9A08G045_USB_PCLK>,
+ <&cpg CPG_MOD R9A08G045_USB_U2P_EXR_CPUCLK>;
+ resets = <&phyrst 0>,
+ <&cpg R9A08G045_USB_U2P_EXL_SYSRST>;
+ renesas,buswait = <7>;
+ phys = <&usb2_phy0 3>;
+ phy-names = "usb";
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
pcie: pcie@11e40000 {
compatible = "renesas,r9a08g045-pcie";
reg = <0 0x11e40000 0 0x10000>;
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6.12.y-cip v2 17/17] arm64: dts: renesas: rzg3s-smarc: Enable USB support
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (15 preceding siblings ...)
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 16/17] arm64: dts: renesas: r9a08g045: Add USB support Claudiu Beznea
@ 2026-07-08 8:12 ` Claudiu Beznea
[not found] ` <18C0424F82C9BC8D.550146@lists.cip-project.org>
2026-07-27 12:37 ` [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Pavel Machek
18 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-08 8:12 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
commit 0926e6e69852a450dc2f6e3f8412ae58f773e29b upstream.
Enable USB support (host, device, USB PHYs).
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://patch.msgid.link/20251023135810.1688415-8-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
Changes in v2:
- none
arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi | 57 ++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi b/arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi
index d90f65a7d79b..071da86ed3dc 100644
--- a/arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi
+++ b/arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi
@@ -95,6 +95,20 @@ &audio_clk2 {
clock-frequency = <12288000>;
};
+&ehci0 {
+ dr_mode = "otg";
+ status = "okay";
+};
+
+&ehci1 {
+ status = "okay";
+};
+
+&hsusb {
+ dr_mode = "otg";
+ status = "okay";
+};
+
&i2c0 {
status = "okay";
@@ -128,6 +142,19 @@ &pcie {
status = "okay";
};
+&ohci0 {
+ dr_mode = "otg";
+ status = "okay";
+};
+
+&ohci1 {
+ status = "okay";
+};
+
+&phyrst {
+ status = "okay";
+};
+
&pinctrl {
audio_clock_pins: audio-clock {
pins = "AUDIO_CLK1", "AUDIO_CLK2";
@@ -208,6 +235,23 @@ ssi3_pins: ssi3 {
<RZG2L_PORT_PINMUX(18, 4, 8)>, /* TXD */
<RZG2L_PORT_PINMUX(18, 5, 8)>; /* RXD */
};
+
+ usb0_pins: usb0 {
+ peri {
+ pinmux = <RZG2L_PORT_PINMUX(5, 0, 1)>, /* VBUS */
+ <RZG2L_PORT_PINMUX(5, 2, 1)>; /* OVC */
+ };
+
+ otg {
+ pinmux = <RZG2L_PORT_PINMUX(5, 3, 1)>; /* OTG_ID */
+ bias-pull-up;
+ };
+ };
+
+ usb1_pins: usb1 {
+ pinmux = <RZG2L_PORT_PINMUX(5, 4, 5)>, /* OVC */
+ <RZG2L_PORT_PINMUX(6, 0, 1)>; /* VBUS */
+ };
};
&scif0 {
@@ -243,3 +287,16 @@ &ssi3 {
pinctrl-0 = <&ssi3_pins>, <&audio_clock_pins>;
status = "okay";
};
+
+&usb2_phy0 {
+ pinctrl-0 = <&usb0_pins>;
+ pinctrl-names = "default";
+ vbus-supply = <&usb0_vbus_otg>;
+ status = "okay";
+};
+
+&usb2_phy1 {
+ pinctrl-0 = <&usb1_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [cip-dev] [PATCH 6.12.y-cip v2 01/17] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY
[not found] ` <18C0424F82C9BC8D.550146@lists.cip-project.org>
@ 2026-07-21 9:21 ` Claudiu Beznea
0 siblings, 0 replies; 21+ messages in thread
From: Claudiu Beznea @ 2026-07-21 9:21 UTC (permalink / raw)
To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev
Hi, CIP maintainers,
Could you please let me know if there's anything I need to do for this series
and the 6.1, 5.10 ones?
Thank you,
Claudiu
On 7/8/26 11:12, claudiu beznea via lists.cip-project.org wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>
> commit 78f2d64e484753bfede6a0e9eab0ef35830c34fb upstream.
>
> On the Renesas RZ/G3S SoC, the USB PHY block has an input signal called
> PWRRDY. This signal is managed by the system controller and must be
> de-asserted after powering on the area where USB PHY resides and asserted
> before powering it off.
>
> On power-on/resume the USB PWRRDY signal need to be de-asserted before
> enabling clock and switching the module to normal state (through MSTOP
> support). The power-on/resume configuration sequence must be:
>
> 1/ PWRRDY=0
> 2/ CLK_ON=1
> 3/ MSTOP=0
>
> On power-off/suspend the configuration sequence should be:
>
> 1/ MSTOP=1
> 2/ CLK_ON=0
> 3/ PWRRDY=1
>
> The CLK_ON and MSTOP functionalities are controlled by clock drivers.
> The suspend/resume support will be handled by different patches.
>
> After long discussions with the internal HW team, it has been confirmed
> that the HW connection b/w USB PHY block, the USB channels, the system
> controller, clock, MSTOP, PWRRDY signal is as follows:
>
> ┌──────────────────────────────┐
> │ │◄── CPG_CLKON_USB.CLK0_ON
> │ USB CH0 │
> ┌──────────────────────────┐ │┌───────────────────────────┐ │◄── CPG_CLKON_USB.CLK2_ON
> │ ┌────────┐ ││host controller registers │ │
> │ │ │ ││function controller registers│
> │ │ PHY0 │◄──┤└───────────────────────────┘ │
> │ USB PHY │ │ └────────────▲─────────────────┘
> │ └────────┘ │
> │ │ CPG_BUS_PERI_COM_MSTOP.MSTOP{6, 5}_ON
> │┌──────────────┐ ┌────────┐
> ││USHPHY control│ │ │
> ││ registers │ │ PHY1 │ ┌──────────────────────────────┐
> │└──────────────┘ │ │◄──┤ USB CH1 │
> │ └────────┘ │┌───────────────────────────┐ │◄── CPG_CLKON_USB.CLK1_ON
> └─▲───────▲─────────▲──────┘ ││ host controller registers │ │
> │ │ │ │└───────────────────────────┘ │
> │ │ │ └────────────▲─────────────────┘
> │ │ │ │
> │ │ │ CPG_BUS_PERI_COM_MSTOP.MSTOP7_ON
> │PWRRDY │ │
> │ │ CPG_CLK_ON_USB.CLK3_ON
> │ │
> │ CPG_BUS_PERI_COM_MSTOP.MSTOP4_ON
> │
> ┌────┐
> │SYSC│
> └────┘
>
> where:
> - CPG_CLKON_USB.CLK.CLKX_ON is the register bit controlling the clock X
> of different USB blocks, X in {0, 1, 2, 3}
> - CPG_BUS_PERI_COM_MSTOP.MSTOPX_ON is the register bit controlling the
> MSTOP of different USB blocks, X in {4, 5, 6, 7}
> - USB PHY is the USB PHY block exposing 2 ports, port0 and port1, used
> by the USB CH0, USB CH1
> - SYSC is the system controller block controlling the PWRRDY signal
> - USB CHx are individual USB block with host and function capabilities
> (USB CH0 have both host and function capabilities, USB CH1 has only
> host capabilities)
>
> The USBPHY control registers are controlled though the
> reset-rzg2l-usbphy-ctrl driver. The USB PHY ports are controlled by
> phy_rcar_gen3_usb2 (drivers/phy/renesas/phy-rcar-gen3-usb2.c file). The
> USB PHY ports request resets from the reset-rzg2l-usbphy-ctrl driver.
>
> The connection b/w the system controller and the USB PHY CTRL driver is
> implemented through the renesas,sysc-pwrrdy device tree property
> proposed in this patch. This property specifies the register offset and the
> bitmask required to control the PWRRDY signal.
>
> Since the USB PHY CTRL driver needs to be probed before any other
> USB-specific driver on RZ/G3S, control of PWRRDY is passed exclusively
> to it. This guarantees the correct configuration sequence between clocks,
> MSTOP bits, and the PWRRDY bit on probe/resume and remove/suspend. At the
> same time, changes are kept minimal by avoiding modifications to the USB
> PHY driver to also handle the PWRRDY itself.
>
> Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> ---
>
> Changes in v2:
> - none
>
> drivers/reset/Kconfig | 1 +
> drivers/reset/reset-rzg2l-usbphy-ctrl.c | 56 +++++++++++++++++++++++++
> 2 files changed, 57 insertions(+)
>
> diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
> index 8329ebd982f1..380b7e87fcd6 100644
> --- a/drivers/reset/Kconfig
> +++ b/drivers/reset/Kconfig
> @@ -227,6 +227,7 @@ config RESET_RASPBERRYPI
> config RESET_RZG2L_USBPHY_CTRL
> tristate "Renesas RZ/G2L USBPHY control driver"
> depends on ARCH_RZG2L || COMPILE_TEST
> + select MFD_SYSCON
> help
> Support for USBPHY Control found on RZ/G2L family. It mainly
> controls reset and power down of the USB/PHY.
> diff --git a/drivers/reset/reset-rzg2l-usbphy-ctrl.c b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
> index 4e2ac1f0060c..dcc8c2dde3f8 100644
> --- a/drivers/reset/reset-rzg2l-usbphy-ctrl.c
> +++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
> @@ -13,6 +13,7 @@
> #include <linux/regmap.h>
> #include <linux/reset.h>
> #include <linux/reset-controller.h>
> +#include <linux/mfd/syscon.h>
>
> #define RESET 0x000
> #define VBENCTL 0x03c
> @@ -91,6 +92,8 @@ static int rzg2l_usbphy_ctrl_status(struct reset_controller_dev *rcdev,
> return !!(readl(priv->base + RESET) & port_mask);
> }
>
> +#define RZG2L_USBPHY_CTRL_PWRRDY 1
> +
> static const struct of_device_id rzg2l_usbphy_ctrl_match_table[] = {
> { .compatible = "renesas,rzg2l-usbphy-ctrl" },
> { /* Sentinel */ }
> @@ -110,6 +113,55 @@ static const struct regmap_config rzg2l_usb_regconf = {
> .max_register = 1,
> };
>
> +static void rzg2l_usbphy_ctrl_set_pwrrdy(struct regmap_field *pwrrdy,
> + bool power_on)
> +{
> + u32 val = power_on ? 0 : 1;
> +
> + /* The initialization path guarantees that the mask is 1 bit long. */
> + regmap_field_update_bits(pwrrdy, 1, val);
> +}
> +
> +static void rzg2l_usbphy_ctrl_pwrrdy_off(void *data)
> +{
> + rzg2l_usbphy_ctrl_set_pwrrdy(data, false);
> +}
> +
> +static int rzg2l_usbphy_ctrl_pwrrdy_init(struct device *dev)
> +{
> + struct regmap_field *pwrrdy;
> + struct reg_field field;
> + struct regmap *regmap;
> + const int *data;
> + u32 args[2];
> +
> + data = device_get_match_data(dev);
> + if ((uintptr_t)data != RZG2L_USBPHY_CTRL_PWRRDY)
> + return 0;
> +
> + regmap = syscon_regmap_lookup_by_phandle_args(dev->of_node,
> + "renesas,sysc-pwrrdy",
> + ARRAY_SIZE(args), args);
> + if (IS_ERR(regmap))
> + return PTR_ERR(regmap);
> +
> + /* Don't allow more than one bit in mask. */
> + if (hweight32(args[1]) != 1)
> + return -EINVAL;
> +
> + field.reg = args[0];
> + field.lsb = __ffs(args[1]);
> + field.msb = __fls(args[1]);
> +
> + pwrrdy = devm_regmap_field_alloc(dev, regmap, field);
> + if (!pwrrdy)
> + return -ENOMEM;
> +
> + rzg2l_usbphy_ctrl_set_pwrrdy(pwrrdy, true);
> +
> + return devm_add_action_or_reset(dev, rzg2l_usbphy_ctrl_pwrrdy_off, pwrrdy);
> +}
> +
> static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> @@ -132,6 +184,10 @@ static int rzg2l_usbphy_ctrl_probe(struct platform_device *pdev)
> if (IS_ERR(regmap))
> return PTR_ERR(regmap);
>
> + error = rzg2l_usbphy_ctrl_pwrrdy_init(dev);
> + if (error)
> + return error;
> +
> priv->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
> if (IS_ERR(priv->rstc))
> return dev_err_probe(dev, PTR_ERR(priv->rstc),
>
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#23530): https://lists.cip-project.org/g/cip-dev/message/23530
> Mute This Topic: https://lists.cip-project.org/mt/120170421/8377987
> Group Owner: cip-dev+owner@lists.cip-project.org
> Unsubscribe: https://lists.cip-project.org/g/cip-dev/unsub [claudiu.beznea@tuxon.dev]
> -=-=-=-=-=-=-=-=-=-=-=-
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6.12.y-cip v2 01/17] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 01/17] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY Claudiu Beznea
@ 2026-07-27 12:34 ` Pavel Machek
0 siblings, 0 replies; 21+ messages in thread
From: Pavel Machek @ 2026-07-27 12:34 UTC (permalink / raw)
To: Claudiu Beznea; +Cc: nobuhiro.iwamatsu.x90, pavel, cip-dev
[-- Attachment #1: Type: text/plain, Size: 799 bytes --]
Hi!
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>
> commit 78f2d64e484753bfede6a0e9eab0ef35830c34fb upstream.
>
> On the Renesas RZ/G3S SoC, the USB PHY block has an input signal called
> PWRRDY. This signal is managed by the system controller and must be
> de-asserted after powering on the area where USB PHY resides and asserted
> before powering it off.
> +++ b/drivers/reset/reset-rzg2l-usbphy-ctrl.c
>
> +static void rzg2l_usbphy_ctrl_set_pwrrdy(struct regmap_field *pwrrdy,
> + bool power_on)
> +{
> + u32 val = power_on ? 0 : 1;
This probably should be !power_on... for readability.
> + /* The initialization path guarantees that the mask is 1 bit long. */
> + regmap_field_update_bits(pwrrdy, 1, val);
> +}
Best regards,
Pavel
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
` (17 preceding siblings ...)
[not found] ` <18C0424F82C9BC8D.550146@lists.cip-project.org>
@ 2026-07-27 12:37 ` Pavel Machek
18 siblings, 0 replies; 21+ messages in thread
From: Pavel Machek @ 2026-07-27 12:37 UTC (permalink / raw)
To: Claudiu Beznea; +Cc: nobuhiro.iwamatsu.x90, pavel, cip-dev
[-- Attachment #1: Type: text/plain, Size: 365 bytes --]
Hi!
> Patches backport the Renesas RZ/G3S USB support.
I had a minor comment here, but that should be fixed in mainline,
first.
This looks okay to me.
Reviewed-by: Pavel Machek <pavel@nabladev.com>
I can apply the series if it passes testing and there are no other
comments.
Best regards,
Pavel
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2026-07-27 12:37 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-08 8:12 [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 01/17] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY Claudiu Beznea
2026-07-27 12:34 ` Pavel Machek
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 02/17] dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G3S support Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 03/17] reset: rzg2l-usbphy-ctrl: Add support for RZ/G3S SoC Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 04/17] reset: rzg2l-usbphy-ctrl: Fix a NULL vs IS_ERR() bug in probe Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 05/17] reset: rzg2l-usbphy-ctrl: Propagate the return value of regmap_field_update_bits() Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 06/17] reset: rzg2l-usbphy-ctrl: Add suspend/resume support Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 07/17] reset: rzg2l-usbphy-ctrl: Check pwrrdy is valid before using it Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 08/17] usb: host: Do not check priv->clks[clk] Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 09/17] usb: host: ehci-platform: Call reset assert/deassert on suspend/resume Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 10/17] usb: host: ohci-platform: " Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 11/17] dt-bindings: usb: renesas,usbhs: Document RZ/G3S SoC Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 12/17] usb: renesas_usbhs: Assert/de-assert reset signals on suspend/resume Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 13/17] dt-bindings: phy: renesas,usb2-phy: Mark resets as required for RZ/G3S Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 14/17] phy: renesas: rcar-gen3-usb2: Move phy_data->init_bus check Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 15/17] phy: renesas: rcar-gen3-usb2: Add suspend/resume support Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 16/17] arm64: dts: renesas: r9a08g045: Add USB support Claudiu Beznea
2026-07-08 8:12 ` [PATCH 6.12.y-cip v2 17/17] arm64: dts: renesas: rzg3s-smarc: Enable " Claudiu Beznea
[not found] ` <18C0424F82C9BC8D.550146@lists.cip-project.org>
2026-07-21 9:21 ` [cip-dev] [PATCH 6.12.y-cip v2 01/17] reset: rzg2l-usbphy-ctrl: Add support for USB PWRRDY Claudiu Beznea
2026-07-27 12:37 ` [PATCH 6.12.y-cip v2 00/17] Backport RZ/G3S USB support Pavel Machek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox