linux-phy.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 00/21] Add USB2.0 support for RZ/G3E
@ 2025-11-10 12:08 Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 01/21] phy: renesas: rcar-gen3-usb2: Use devm_pm_runtime_enable() Tommaso Merciai
                   ` (20 more replies)
  0 siblings, 21 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Dear All,

This patch series adds USB2.0 support for the Renesas R9A09G047 SoC and
enables it on the RZ/G3E SMARK II board. RZ/G3E has USB2.0 IP that is
identical to the one's found into the RZ/V2H SoC (R9A09G057).

This series apply on top of [1] + [2].

Thanks & Regards,
Tommaso

[1] https://patchwork.kernel.org/project/linux-renesas-soc/list/?series=1015037
[2] https://patchwork.kernel.org/project/linux-renesas-soc/patch/20250912130911.185674-1-tommaso.merciai.xr@bp.renesas.com/

v2->v3:
 - Rebased on top of next-20251110 + [1] + [2]
 - Add missing Cc: stable@vger.kernel.org in patch 03/21
 - Patch 03/21: Added missing Cc: stable@vger.kernel.org.
   Improved commit body describing the removal of rzv2h_usbphy_assert_helper()
   from rzv2h_usb2phy_reset_probe().
 - Patch 04/21: Manipulate mux-controller as an internal node.
   Improved commit body.
 - Patch 05/21: The main driver is using now __devm_auxiliary_device_create()
   then update the aux driver accordingly.
 - Patch 06/21: Use __devm_auxiliary_device_create() to create the aux device.
 - Patch 08/21: Improved commit body and mux-states description.
 - Patch 14/21: Manipulate the mux controller as an internal node,
   and update commit body accordingly.
 - Patch 15/21: Manipulate the mux controller as an internal node,
   and update commit body accordingly.
 - Patch 20/21: Manipulate the mux controller as an internal node.

v1->v2:
 - Rebased on top of next-20251103 + [1] + [2]
 - Reworked series to use mux-state for controlling VBUS_SEL
   as suggested by PZabel added also mux bindings documentation
   on phy and rst side.
 - Collected Conor Dooley tags
 - Dropped unnecessary rzv2h_usbphy_assert_helper() function from
   rzv2h_usb2phy_reset_probe()

Tommaso Merciai (21):
  phy: renesas: rcar-gen3-usb2: Use devm_pm_runtime_enable()
  phy: renesas: rcar-gen3-usb2: Factor out VBUS control logic
  reset: rzv2h-usb2phy: Keep PHY clock enabled for entire device
    lifetime
  dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux
  mux: Add driver for Renesas RZ/V2H USB VBUS_SEL mux
  reset: rzv2h-usb2phy: Add support for VBUS mux controller registration
  dt-bindings: phy: renesas,usb2-phy: Document USB VBUS regulator
  dt-bindings: phy: renesas,usb2-phy: Document mux-states property
  phy: renesas: rcar-gen3-usb2: Add regulator for OTG VBUS control
  phy: renesas: rcar-gen3-usb2: Use mux-state for phyrst management
  dt-bindings: usb: renesas,usbhs: Add RZ/G3E SoC support
  dt-bindings: phy: renesas,usb2-phy: Document RZ/G3E SoC
  dt-bindings: reset: Document RZ/G3E USB2PHY reset
  arm64: dts: renesas: r9a09g057: Add USB2.0 VBUS_SEL mux-controller
    support
  arm64: dts: renesas: r9a09g056: Add USB2.0 VBUS_SEL mux-controller
    support
  arm64: dts: renesas: r9a09g056: Add USB2.0 PHY VBUS internal regulator
    node
  arm64: dts: renesas: r9a09g056n48-rzv2n-evk: Enable USB2 PHY0 VBUS
    support
  arm64: dts: renesas: r9a09g057: Add USB2.0 PHY VBUS internal regulator
    node
  arm64: dts: renesas: r9a09g057h44-rzv2h-evk: Enable USB2 PHY0 VBUS
    support
  arm64: dts: renesas: r9a09g047: Add USB2.0 support
  arm64: dts: renesas: r9a09g047e57-smarc: Enable USB2.0 support

 .../bindings/phy/renesas,usb2-phy.yaml        |  15 +-
 .../reset/renesas,rzv2h-usb2phy-reset.yaml    |  15 +-
 .../bindings/usb/renesas,usbhs.yaml           |   1 +
 arch/arm64/boot/dts/renesas/r9a09g047.dtsi    | 131 +++++++++
 .../boot/dts/renesas/r9a09g047e57-smarc.dts   |  49 ++++
 arch/arm64/boot/dts/renesas/r9a09g056.dtsi    |  10 +
 .../dts/renesas/r9a09g056n48-rzv2n-evk.dts    |   5 +
 arch/arm64/boot/dts/renesas/r9a09g057.dtsi    |  15 +
 .../dts/renesas/r9a09g057h44-rzv2h-evk.dts    |   5 +
 .../boot/dts/renesas/renesas-smarc2.dtsi      |  23 ++
 drivers/mux/Kconfig                           |  10 +
 drivers/mux/Makefile                          |   2 +
 drivers/mux/rzv2h-usb-vbus.c                  |  98 +++++++
 drivers/phy/renesas/phy-rcar-gen3-usb2.c      | 263 ++++++++++++++----
 drivers/reset/Kconfig                         |   1 +
 drivers/reset/reset-rzv2h-usb2phy.c           | 108 ++++---
 include/linux/reset/reset_rzv2h_usb2phy.h     |  11 +
 17 files changed, 665 insertions(+), 97 deletions(-)
 create mode 100644 drivers/mux/rzv2h-usb-vbus.c
 create mode 100644 include/linux/reset/reset_rzv2h_usb2phy.h

-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* [PATCH v3 01/21] phy: renesas: rcar-gen3-usb2: Use devm_pm_runtime_enable()
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 02/21] phy: renesas: rcar-gen3-usb2: Factor out VBUS control logic Tommaso Merciai
                   ` (19 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Replace pm_runtime_enable() with devm_pm_runtime_enable() to ensure proper
cleanup if the probe fails. This change enhances driver reliability by
avoiding resource leaks, as the devm-managed version automatically handles
disabling at probe failure or device removal.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - No changes

 drivers/phy/renesas/phy-rcar-gen3-usb2.c | 53 ++++++++++--------------
 1 file changed, 21 insertions(+), 32 deletions(-)

diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
index 150423dbb1f2..38b49ceb5ff3 100644
--- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
+++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
@@ -850,13 +850,13 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
 	 * devm_phy_create() will call pm_runtime_enable(&phy->dev);
 	 * And then, phy-core will manage runtime pm for this device.
 	 */
-	pm_runtime_enable(dev);
+	ret = devm_pm_runtime_enable(dev);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to enable pm_runtime\n");
 
 	channel->phy_data = of_device_get_match_data(dev);
-	if (!channel->phy_data) {
-		ret = -EINVAL;
-		goto error;
-	}
+	if (!channel->phy_data)
+		return -EINVAL;
 
 	platform_set_drvdata(pdev, channel);
 	channel->dev = dev;
@@ -864,18 +864,17 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
 	if (channel->phy_data->init_bus) {
 		ret = rcar_gen3_phy_usb2_init_bus(channel);
 		if (ret)
-			goto error;
+			return ret;
 	}
 
 	spin_lock_init(&channel->lock);
 	for (i = 0; i < NUM_OF_PHYS; i++) {
 		channel->rphys[i].phy = devm_phy_create(dev, NULL,
 							channel->phy_data->phy_usb2_ops);
-		if (IS_ERR(channel->rphys[i].phy)) {
-			dev_err(dev, "Failed to create USB2 PHY\n");
-			ret = PTR_ERR(channel->rphys[i].phy);
-			goto error;
-		}
+		if (IS_ERR(channel->rphys[i].phy))
+			return dev_err_probe(dev, PTR_ERR(channel->rphys[i].phy),
+					     "Failed to create USB2 PHY\n");
+
 		channel->rphys[i].ch = channel;
 		channel->rphys[i].int_enable_bits = rcar_gen3_int_enable[i];
 		phy_set_drvdata(channel->rphys[i].phy, &channel->rphys[i]);
@@ -886,44 +885,36 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
 	else
 		channel->vbus = devm_regulator_get_optional(dev, "vbus");
 	if (IS_ERR(channel->vbus)) {
-		if (PTR_ERR(channel->vbus) == -EPROBE_DEFER) {
-			ret = PTR_ERR(channel->vbus);
-			goto error;
-		}
+		if (PTR_ERR(channel->vbus) == -EPROBE_DEFER)
+			return PTR_ERR(channel->vbus);
+
 		channel->vbus = NULL;
 	}
 
 	irq = platform_get_irq_optional(pdev, 0);
 	if (irq < 0 && irq != -ENXIO) {
-		ret = irq;
-		goto error;
+		return irq;
 	} else if (irq > 0) {
 		INIT_WORK(&channel->work, rcar_gen3_phy_usb2_work);
 		ret = devm_request_irq(dev, irq, rcar_gen3_phy_usb2_irq,
 				       IRQF_SHARED, dev_name(dev), channel);
-		if (ret < 0) {
-			dev_err(dev, "Failed to request irq (%d)\n", irq);
-			goto error;
-		}
+		if (ret < 0)
+			return dev_err_probe(dev, ret,
+					     "Failed to request irq (%d)\n",
+					     irq);
 	}
 
 	provider = devm_of_phy_provider_register(dev, rcar_gen3_phy_usb2_xlate);
 	if (IS_ERR(provider)) {
-		dev_err(dev, "Failed to register PHY provider\n");
-		ret = PTR_ERR(provider);
-		goto error;
+		return dev_err_probe(dev, PTR_ERR(provider),
+				     "Failed to register PHY provider\n");
 	} else if (channel->is_otg_channel) {
 		ret = device_create_file(dev, &dev_attr_role);
 		if (ret < 0)
-			goto error;
+			return ret;
 	}
 
 	return 0;
-
-error:
-	pm_runtime_disable(dev);
-
-	return ret;
 }
 
 static void rcar_gen3_phy_usb2_remove(struct platform_device *pdev)
@@ -932,8 +923,6 @@ static void rcar_gen3_phy_usb2_remove(struct platform_device *pdev)
 
 	if (channel->is_otg_channel)
 		device_remove_file(&pdev->dev, &dev_attr_role);
-
-	pm_runtime_disable(&pdev->dev);
 }
 
 static struct platform_driver rcar_gen3_phy_usb2_driver = {
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 02/21] phy: renesas: rcar-gen3-usb2: Factor out VBUS control logic
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 01/21] phy: renesas: rcar-gen3-usb2: Use devm_pm_runtime_enable() Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 03/21] reset: rzv2h-usb2phy: Keep PHY clock enabled for entire device lifetime Tommaso Merciai
                   ` (18 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Refactor the VBUS control logic into a new helper function to improve
code clarity and reduce duplication. This makes it easier to handle
different VBUS control register cases and aids future maintenance.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - No changes

 drivers/phy/renesas/phy-rcar-gen3-usb2.c | 34 +++++++++++++++---------
 1 file changed, 22 insertions(+), 12 deletions(-)

diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
index 38b49ceb5ff3..f6026b3b95e3 100644
--- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
+++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
@@ -203,28 +203,38 @@ static void rcar_gen3_set_linectrl(struct rcar_gen3_chan *ch, int dp, int dm)
 	writel(val, usb2_base + USB2_LINECTRL1);
 }
 
-static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus)
+static void rcar_gen3_phy_usb2_set_vbus(struct rcar_gen3_chan *ch,
+					u32 vbus_ctrl_reg,
+					u32 vbus_ctrl_val,
+					bool enable)
 {
 	void __iomem *usb2_base = ch->base;
-	u32 vbus_ctrl_reg = USB2_ADPCTRL;
-	u32 vbus_ctrl_val = USB2_ADPCTRL_DRVVBUS;
 	u32 val;
 
+	val = readl(usb2_base + vbus_ctrl_reg);
+	if (enable)
+		val |= vbus_ctrl_val;
+	else
+		val &= ~vbus_ctrl_val;
+	writel(val, usb2_base + vbus_ctrl_reg);
+
+	dev_vdbg(ch->dev, "%s: reg=0x%08x, val=%08x, enable=%d\n",
+		 __func__, vbus_ctrl_reg, val, enable);
+}
+
+static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus)
+{
 	if (ch->phy_data->no_adp_ctrl || ch->phy_data->vblvl_ctrl) {
 		if (ch->vbus)
 			regulator_hardware_enable(ch->vbus, vbus);
 
-		vbus_ctrl_reg = USB2_VBCTRL;
-		vbus_ctrl_val = USB2_VBCTRL_VBOUT;
+		rcar_gen3_phy_usb2_set_vbus(ch, USB2_VBCTRL,
+					    USB2_VBCTRL_VBOUT, vbus);
+		return;
 	}
 
-	val = readl(usb2_base + vbus_ctrl_reg);
-	if (vbus)
-		val |= vbus_ctrl_val;
-	else
-		val &= ~vbus_ctrl_val;
-	dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, vbus);
-	writel(val, usb2_base + vbus_ctrl_reg);
+	rcar_gen3_phy_usb2_set_vbus(ch, USB2_ADPCTRL,
+				    USB2_ADPCTRL_DRVVBUS, vbus);
 }
 
 static void rcar_gen3_control_otg_irq(struct rcar_gen3_chan *ch, int enable)
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 03/21] reset: rzv2h-usb2phy: Keep PHY clock enabled for entire device lifetime
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 01/21] phy: renesas: rcar-gen3-usb2: Use devm_pm_runtime_enable() Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 02/21] phy: renesas: rcar-gen3-usb2: Factor out VBUS control logic Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux Tommaso Merciai
                   ` (17 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel, stable

The driver was disabling the USB2 PHY clock immediately after register
initialization in probe() and after each reset operation. This left the
PHY unclocked even though it must remain active for USB functionality.

The behavior appeared to work only when another driver
(e.g., USB controller) had already enabled the clock, making operation
unreliable and hardware-dependent. In configurations where this driver
is the sole clock user, USB functionality would fail.

Fix this by:
- Enabling the clock once in probe() via pm_runtime_resume_and_get()
- Removing all pm_runtime_put() calls from assert/deassert/status
- Registering a devm cleanup action to release the clock at removal
- Removed rzv2h_usbphy_assert_helper() and its call in
  rzv2h_usb2phy_reset_probe()

This ensures the PHY clock remains enabled for the entire device lifetime,
preventing instability and aligning with hardware requirements.

Cc: stable@vger.kernel.org
Fixes: e3911d7f865b ("reset: Add USB2PHY port reset driver for Renesas RZ/V2H(P)")
Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - Added missing Cc: stable@vger.kernel.org
 - Improved commit body describing the removal of rzv2h_usbphy_assert_helper()
   from rzv2h_usb2phy_reset_probe().

v1->v2:
 - Improve commit body and commit msg
 - Added Fixes tag
 - Dropped unnecessary rzv2h_usbphy_assert_helper() function

 drivers/reset/reset-rzv2h-usb2phy.c | 64 ++++++++---------------------
 1 file changed, 18 insertions(+), 46 deletions(-)

diff --git a/drivers/reset/reset-rzv2h-usb2phy.c b/drivers/reset/reset-rzv2h-usb2phy.c
index ae643575b067..5bdd39274612 100644
--- a/drivers/reset/reset-rzv2h-usb2phy.c
+++ b/drivers/reset/reset-rzv2h-usb2phy.c
@@ -49,9 +49,10 @@ static inline struct rzv2h_usb2phy_reset_priv
 	return container_of(rcdev, struct rzv2h_usb2phy_reset_priv, rcdev);
 }
 
-/* This function must be called only after pm_runtime_resume_and_get() has been called */
-static void rzv2h_usbphy_assert_helper(struct rzv2h_usb2phy_reset_priv *priv)
+static int rzv2h_usbphy_reset_assert(struct reset_controller_dev *rcdev,
+				     unsigned long id)
 {
+	struct rzv2h_usb2phy_reset_priv *priv = rzv2h_usbphy_rcdev_to_priv(rcdev);
 	const struct rzv2h_usb2phy_reset_of_data *data = priv->data;
 
 	scoped_guard(spinlock, &priv->lock) {
@@ -60,24 +61,6 @@ static void rzv2h_usbphy_assert_helper(struct rzv2h_usb2phy_reset_priv *priv)
 	}
 
 	usleep_range(11, 20);
-}
-
-static int rzv2h_usbphy_reset_assert(struct reset_controller_dev *rcdev,
-				     unsigned long id)
-{
-	struct rzv2h_usb2phy_reset_priv *priv = rzv2h_usbphy_rcdev_to_priv(rcdev);
-	struct device *dev = priv->dev;
-	int ret;
-
-	ret = pm_runtime_resume_and_get(dev);
-	if (ret) {
-		dev_err(dev, "pm_runtime_resume_and_get failed\n");
-		return ret;
-	}
-
-	rzv2h_usbphy_assert_helper(priv);
-
-	pm_runtime_put(dev);
 
 	return 0;
 }
@@ -87,14 +70,6 @@ static int rzv2h_usbphy_reset_deassert(struct reset_controller_dev *rcdev,
 {
 	struct rzv2h_usb2phy_reset_priv *priv = rzv2h_usbphy_rcdev_to_priv(rcdev);
 	const struct rzv2h_usb2phy_reset_of_data *data = priv->data;
-	struct device *dev = priv->dev;
-	int ret;
-
-	ret = pm_runtime_resume_and_get(dev);
-	if (ret) {
-		dev_err(dev, "pm_runtime_resume_and_get failed\n");
-		return ret;
-	}
 
 	scoped_guard(spinlock, &priv->lock) {
 		writel(data->reset_deassert_val, priv->base + data->reset_reg);
@@ -102,8 +77,6 @@ static int rzv2h_usbphy_reset_deassert(struct reset_controller_dev *rcdev,
 		writel(data->reset_release_val, priv->base + data->reset_reg);
 	}
 
-	pm_runtime_put(dev);
-
 	return 0;
 }
 
@@ -111,20 +84,10 @@ static int rzv2h_usbphy_reset_status(struct reset_controller_dev *rcdev,
 				     unsigned long id)
 {
 	struct rzv2h_usb2phy_reset_priv *priv = rzv2h_usbphy_rcdev_to_priv(rcdev);
-	struct device *dev = priv->dev;
-	int ret;
 	u32 reg;
 
-	ret = pm_runtime_resume_and_get(dev);
-	if (ret) {
-		dev_err(dev, "pm_runtime_resume_and_get failed\n");
-		return ret;
-	}
-
 	reg = readl(priv->base + priv->data->reset_reg);
 
-	pm_runtime_put(dev);
-
 	return (reg & priv->data->reset_status_bits) == priv->data->reset_status_bits;
 }
 
@@ -141,6 +104,11 @@ static int rzv2h_usb2phy_reset_of_xlate(struct reset_controller_dev *rcdev,
 	return 0;
 }
 
+static void rzv2h_usb2phy_reset_pm_runtime_put(void *data)
+{
+	pm_runtime_put(data);
+}
+
 static int rzv2h_usb2phy_reset_probe(struct platform_device *pdev)
 {
 	const struct rzv2h_usb2phy_reset_of_data *data;
@@ -175,14 +143,14 @@ static int rzv2h_usb2phy_reset_probe(struct platform_device *pdev)
 	if (error)
 		return dev_err_probe(dev, error, "pm_runtime_resume_and_get failed\n");
 
+	error = devm_add_action_or_reset(dev, rzv2h_usb2phy_reset_pm_runtime_put,
+					 dev);
+	if (error)
+		return dev_err_probe(dev, error, "unable to register cleanup action\n");
+
 	for (unsigned int i = 0; i < data->init_val_count; i++)
 		writel(data->init_vals[i].val, priv->base + data->init_vals[i].reg);
 
-	/* keep usb2phy in asserted state */
-	rzv2h_usbphy_assert_helper(priv);
-
-	pm_runtime_put(dev);
-
 	priv->rcdev.ops = &rzv2h_usbphy_reset_ops;
 	priv->rcdev.of_reset_n_cells = 0;
 	priv->rcdev.nr_resets = 1;
@@ -190,7 +158,11 @@ static int rzv2h_usb2phy_reset_probe(struct platform_device *pdev)
 	priv->rcdev.of_node = dev->of_node;
 	priv->rcdev.dev = dev;
 
-	return devm_reset_controller_register(dev, &priv->rcdev);
+	error = devm_reset_controller_register(dev, &priv->rcdev);
+	if (error)
+		return dev_err_probe(dev, error, "could not register reset controller\n");
+
+	return 0;
 }
 
 /*
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (2 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 03/21] reset: rzv2h-usb2phy: Keep PHY clock enabled for entire device lifetime Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 18:56   ` Conor Dooley
  2025-11-17  7:00   ` Krzysztof Kozlowski
  2025-11-10 12:08 ` [PATCH v3 05/21] mux: Add driver for Renesas RZ/V2H USB " Tommaso Merciai
                   ` (16 subsequent siblings)
  20 siblings, 2 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Document the 'mux-controller' child node in the Renesas RZ/V2H(P)
USB2PHY reset binding to support describing the USB VBUS_SEL
multiplexer as a mux-controller.

This is required to properly configure the USB PHY VBUS source on
RZ/V2H(P), RZ/G3E SoCs.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - Manipulate mux-controller as an internal node.
 - Improved commit body.

v1->v2:
 - New patch

 .../bindings/reset/renesas,rzv2h-usb2phy-reset.yaml   | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
index c1b800a10b53..03da74ff2d08 100644
--- a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
+++ b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
@@ -37,6 +37,12 @@ properties:
   '#reset-cells':
     const: 0
 
+  mux-controller:
+    $ref: /schemas/mux/mux-controller.yaml#
+    description: Mux controller for USB VBUS source selection.
+    type: object
+    unevaluatedProperties: false
+
 required:
   - compatible
   - reg
@@ -44,6 +50,7 @@ required:
   - resets
   - power-domains
   - '#reset-cells'
+  - mux-controller
 
 additionalProperties: false
 
@@ -58,4 +65,8 @@ examples:
         resets = <&cpg 0xaf>;
         power-domains = <&cpg>;
         #reset-cells = <0>;
+
+        mux-controller {
+          #mux-state-cells = <1>;
+        };
     };
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 05/21] mux: Add driver for Renesas RZ/V2H USB VBUS_SEL mux
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (3 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 06/21] reset: rzv2h-usb2phy: Add support for VBUS mux controller registration Tommaso Merciai
                   ` (15 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

As per the RZ/V2H(P) HW manual, VBUSEN can be controlled by the VBUS_SEL
bit of the VBENCTL Control Register. This register is mapped in the
reset framework. The reset driver expose this register as mux-controller
and instantiates this driver. The consumer will use the mux API to
control the VBUS_SEL bit.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - Added mux_chip->dev.of_node = dev->of_node->child as the mux-controller
   is an internal node.
 - Fixed auxiliary_device_id name.
 - Get rdev using from platform_data.
 - Drop struct auxiliary_device adev from reset_rzv2h_usb2phy_adev
   as it is needed.
 - Drop to_reset_rzv2h_usb2phy_adev() as it is not needed.

v1->v2:
 - New patch

 drivers/mux/Kconfig                       | 10 +++
 drivers/mux/Makefile                      |  2 +
 drivers/mux/rzv2h-usb-vbus.c              | 98 +++++++++++++++++++++++
 include/linux/reset/reset_rzv2h_usb2phy.h | 11 +++
 4 files changed, 121 insertions(+)
 create mode 100644 drivers/mux/rzv2h-usb-vbus.c
 create mode 100644 include/linux/reset/reset_rzv2h_usb2phy.h

diff --git a/drivers/mux/Kconfig b/drivers/mux/Kconfig
index c68132e38138..604f625544ed 100644
--- a/drivers/mux/Kconfig
+++ b/drivers/mux/Kconfig
@@ -59,4 +59,14 @@ config MUX_MMIO
 	  To compile the driver as a module, choose M here: the module will
 	  be called mux-mmio.
 
+config MUX_RZV2H_VBENCTL
+	tristate "Renesas RZ/V2H USB VBUS mux driver"
+	depends on RESET_RZV2H_USB2PHY || COMPILE_TEST
+	depends on OF
+	select REGMAP_MMIO
+	select AUXILIARY_BUS
+	default RESET_RZV2H_USB2PHY
+	help
+	  Support for VBUS mux implemented on Renesas RZ/V2H SoCs.
+
 endmenu
diff --git a/drivers/mux/Makefile b/drivers/mux/Makefile
index 6e9fa47daf56..9421660399af 100644
--- a/drivers/mux/Makefile
+++ b/drivers/mux/Makefile
@@ -8,9 +8,11 @@ mux-adg792a-objs		:= adg792a.o
 mux-adgs1408-objs		:= adgs1408.o
 mux-gpio-objs			:= gpio.o
 mux-mmio-objs			:= mmio.o
+mux-rzv2h-usb-vbus-objs		:= rzv2h-usb-vbus.o
 
 obj-$(CONFIG_MULTIPLEXER)	+= mux-core.o
 obj-$(CONFIG_MUX_ADG792A)	+= mux-adg792a.o
 obj-$(CONFIG_MUX_ADGS1408)	+= mux-adgs1408.o
 obj-$(CONFIG_MUX_GPIO)		+= mux-gpio.o
 obj-$(CONFIG_MUX_MMIO)		+= mux-mmio.o
+obj-$(CONFIG_MUX_RZV2H_VBENCTL)	+= mux-rzv2h-usb-vbus.o
diff --git a/drivers/mux/rzv2h-usb-vbus.c b/drivers/mux/rzv2h-usb-vbus.c
new file mode 100644
index 000000000000..c71a4a8831ec
--- /dev/null
+++ b/drivers/mux/rzv2h-usb-vbus.c
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Renesas RZ/V2H(P) USB2 VBUS_SEL mux driver
+ *
+ * Copyright (C) 2025 Renesas Electronics Corp.
+ */
+
+#include <linux/auxiliary_bus.h>
+#include <linux/bitops.h>
+#include <linux/err.h>
+#include <linux/module.h>
+#include <linux/mux/driver.h>
+#include <linux/of.h>
+#include <linux/property.h>
+#include <linux/regmap.h>
+#include <linux/reset/reset_rzv2h_usb2phy.h>
+
+#define RZV2H_VBENCTL		0xf0c
+
+struct mux_rzv2h_usb_vbus_priv {
+	struct regmap_field *field;
+};
+
+static int mux_rzv2h_usb_vbus_set(struct mux_control *mux, int state)
+{
+	struct mux_rzv2h_usb_vbus_priv *priv = mux_chip_priv(mux->chip);
+
+	return regmap_field_write(priv->field, state);
+}
+
+static const struct mux_control_ops mux_rzv2h_usb_vbus_ops = {
+	.set = mux_rzv2h_usb_vbus_set,
+};
+
+static const struct regmap_config rzv2h_usb_vbus_regconf = {
+	.reg_bits = 32,
+	.val_bits = 32,
+	.reg_stride = 4,
+	.max_register = RZV2H_VBENCTL,
+};
+
+static int mux_rzv2h_usb_vbus_probe(struct auxiliary_device *adev,
+				    const struct auxiliary_device_id *id)
+{
+	struct reset_rzv2h_usb2phy_adev *rdev = adev->dev.platform_data;
+	struct mux_rzv2h_usb_vbus_priv *priv;
+	struct device *dev = &adev->dev;
+	struct mux_chip *mux_chip;
+	struct regmap *regmap;
+	struct reg_field reg_field = {
+		.reg = RZV2H_VBENCTL,
+		.lsb = 0,
+		.msb = 0,
+	};
+	int ret;
+
+	regmap = devm_regmap_init_mmio(dev, rdev->base, &rzv2h_usb_vbus_regconf);
+	if (IS_ERR(regmap))
+		return PTR_ERR(regmap);
+
+	mux_chip = devm_mux_chip_alloc(dev, 1, sizeof(*priv));
+	if (IS_ERR(mux_chip))
+		return PTR_ERR(mux_chip);
+
+	priv = mux_chip_priv(mux_chip);
+
+	priv->field = devm_regmap_field_alloc(dev, regmap, reg_field);
+	if (IS_ERR(priv->field))
+		return PTR_ERR(priv->field);
+
+	mux_chip->dev.of_node = dev->of_node->child;
+	mux_chip->ops = &mux_rzv2h_usb_vbus_ops;
+	mux_chip->mux[0].states = 2;
+	mux_chip->mux[0].idle_state = MUX_IDLE_AS_IS;
+
+	ret = devm_mux_chip_register(dev, mux_chip);
+	if (ret < 0)
+		return dev_err_probe(dev, ret, "Failed to register mux chip\n");
+
+	return 0;
+}
+
+static const struct auxiliary_device_id mux_rzv2h_usb_vbus_ids[] = {
+	{ .name = "rzv2h_usb2phy_reset.vbus-sel-mux" },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(auxiliary, mux_rzv2h_usb_vbus_ids);
+
+static struct auxiliary_driver mux_rzv2h_usb_vbus_driver = {
+	.name		= "vbus-sel-mux",
+	.probe		= mux_rzv2h_usb_vbus_probe,
+	.id_table	= mux_rzv2h_usb_vbus_ids,
+};
+module_auxiliary_driver(mux_rzv2h_usb_vbus_driver);
+
+MODULE_DESCRIPTION("RZ/V2H USB VBUS_SEL mux driver");
+MODULE_AUTHOR("Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/reset/reset_rzv2h_usb2phy.h b/include/linux/reset/reset_rzv2h_usb2phy.h
new file mode 100644
index 000000000000..06247080a66c
--- /dev/null
+++ b/include/linux/reset/reset_rzv2h_usb2phy.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _RESET_RZV2H_USB2PHY_H
+#define _RESET_RZV2H_USB2PHY_H
+
+#include <linux/auxiliary_bus.h>
+
+struct reset_rzv2h_usb2phy_adev {
+	void __iomem *base;
+};
+
+#endif
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 06/21] reset: rzv2h-usb2phy: Add support for VBUS mux controller registration
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (4 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 05/21] mux: Add driver for Renesas RZ/V2H USB " Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 07/21] dt-bindings: phy: renesas,usb2-phy: Document USB VBUS regulator Tommaso Merciai
                   ` (14 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

The RZ/V2H USB2 PHY requires control of the VBUS selection line
(VBENCTL) through a mux controller described in the device tree as
"mux-controller". This change adds support for registering
vbus-sel-mux auxiliary driver during probe.

This enables proper management of USB2.0 VBUS source selection on
platforms using the RZ/V2H SoC.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - Use __devm_auxiliary_device_create() to create the auxiliary device.

v1->v2:
 - New patch

 drivers/reset/Kconfig               |  1 +
 drivers/reset/reset-rzv2h-usb2phy.c | 44 +++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
index e1ae624661f3..f54e216ca7f6 100644
--- a/drivers/reset/Kconfig
+++ b/drivers/reset/Kconfig
@@ -255,6 +255,7 @@ config RESET_RZG2L_USBPHY_CTRL
 config RESET_RZV2H_USB2PHY
 	tristate "Renesas RZ/V2H(P) (and similar SoCs) USB2PHY Reset driver"
 	depends on ARCH_RENESAS || COMPILE_TEST
+	select AUXILIARY_BUS
 	help
 	  Support for USB2PHY Port reset Control found on the RZ/V2H(P) SoC
 	  (and similar SoCs).
diff --git a/drivers/reset/reset-rzv2h-usb2phy.c b/drivers/reset/reset-rzv2h-usb2phy.c
index 5bdd39274612..873191f30448 100644
--- a/drivers/reset/reset-rzv2h-usb2phy.c
+++ b/drivers/reset/reset-rzv2h-usb2phy.c
@@ -5,8 +5,10 @@
  * Copyright (C) 2025 Renesas Electronics Corporation
  */
 
+#include <linux/auxiliary_bus.h>
 #include <linux/cleanup.h>
 #include <linux/delay.h>
+#include <linux/idr.h>
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/of.h>
@@ -14,6 +16,9 @@
 #include <linux/pm_runtime.h>
 #include <linux/reset.h>
 #include <linux/reset-controller.h>
+#include <linux/reset/reset_rzv2h_usb2phy.h>
+
+static DEFINE_IDA(auxiliary_ids);
 
 struct rzv2h_usb2phy_regval {
 	u16 reg;
@@ -104,6 +109,41 @@ static int rzv2h_usb2phy_reset_of_xlate(struct reset_controller_dev *rcdev,
 	return 0;
 }
 
+static void rzv2h_usb2phy_reset_ida_free(void *data)
+{
+	struct auxiliary_device *adev = data;
+
+	ida_free(&auxiliary_ids, adev->id);
+}
+
+static int rzv2h_usb2phy_reset_mux_register(struct device *dev,
+					    void __iomem *base,
+					    const char *mux_name)
+{
+	struct reset_rzv2h_usb2phy_adev *rdev;
+	struct auxiliary_device *adev;
+	int id;
+
+	rdev = devm_kzalloc(dev, sizeof(*rdev), GFP_KERNEL);
+	if (!rdev)
+		return -ENOMEM;
+
+	rdev->base = base;
+
+	id = ida_alloc(&auxiliary_ids, GFP_KERNEL);
+	if (id < 0)
+		return id;
+
+	adev = __devm_auxiliary_device_create(dev, dev->driver->name,
+					      mux_name, rdev, id);
+	if (!adev) {
+		ida_free(&auxiliary_ids, id);
+		return -ENOMEM;
+	}
+
+	return devm_add_action_or_reset(dev, rzv2h_usb2phy_reset_ida_free, adev);
+}
+
 static void rzv2h_usb2phy_reset_pm_runtime_put(void *data)
 {
 	pm_runtime_put(data);
@@ -162,6 +202,10 @@ static int rzv2h_usb2phy_reset_probe(struct platform_device *pdev)
 	if (error)
 		return dev_err_probe(dev, error, "could not register reset controller\n");
 
+	error = rzv2h_usb2phy_reset_mux_register(dev, priv->base, "vbus-sel-mux");
+	if (error)
+		return dev_err_probe(dev, error, "could not register aux mux\n");
+
 	return 0;
 }
 
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 07/21] dt-bindings: phy: renesas,usb2-phy: Document USB VBUS regulator
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (5 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 06/21] reset: rzv2h-usb2phy: Add support for VBUS mux controller registration Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 08/21] dt-bindings: phy: renesas,usb2-phy: Document mux-states property Tommaso Merciai
                   ` (13 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel, Conor Dooley

Document the 'vbus-regulator' child node in the Renesas USB2 PHY binding
to describe the internal USB VBUS regulator.

Require this regulator node on OTG channels to accurately represent
hardware dependencies in the device tree.

Documenting this regulator allows device trees to model the VBUS power
requirements of these SoCs properly.

Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - Collected CDooley tag

 Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
index 2bbec8702a1e..2cd0efa75f81 100644
--- a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
@@ -89,6 +89,12 @@ properties:
       Phandle to a regulator that provides power to the VBUS. This regulator
       will be managed during the PHY power on/off sequence.
 
+  vbus-regulator:
+    $ref: /schemas/regulator/regulator.yaml#
+    description: USB VBUS internal regulator
+    type: object
+    unevaluatedProperties: false
+
   renesas,no-otg-pins:
     $ref: /schemas/types.yaml#/definitions/flag
     description: |
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 08/21] dt-bindings: phy: renesas,usb2-phy: Document mux-states property
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (6 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 07/21] dt-bindings: phy: renesas,usb2-phy: Document USB VBUS regulator Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 18:54   ` Conor Dooley
  2025-11-10 12:08 ` [PATCH v3 09/21] phy: renesas: rcar-gen3-usb2: Add regulator for OTG VBUS control Tommaso Merciai
                   ` (12 subsequent siblings)
  20 siblings, 1 reply; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Some Renesas SoCs, such as RZ/G3E, provide a USB2.0 OTG PHY with
configurable VBUS control through a multiplexed hardware register.
This register allows selecting the VBUS source via a mux control
line exposed by the PHY.

To represent this hardware configuration, support the standard
`mux-states` property in the Renesas USB2 PHY binding.
This allows the DeviceTree to model the VBUS source selection as
a mux, consistent with generic binding conventions.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - Improved commit body.
 - Improved mux-states description.

v1->v2:
 - New patch

 Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
index 2cd0efa75f81..448da30757f2 100644
--- a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
@@ -102,6 +102,11 @@ properties:
 
   dr_mode: true
 
+  mux-states:
+    description:
+      phandle to a mux controller node that select the source for USB VBUS.
+    maxItems: 1
+
 if:
   properties:
     compatible:
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 09/21] phy: renesas: rcar-gen3-usb2: Add regulator for OTG VBUS control
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (7 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 08/21] dt-bindings: phy: renesas,usb2-phy: Document mux-states property Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 10/21] phy: renesas: rcar-gen3-usb2: Use mux-state for phyrst management Tommaso Merciai
                   ` (11 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Enable OTG VBUS control on R-Car Gen3 USB2 PHY by registering a regulator
driver that manages the VBOUT line. This change allows the controller to
handle VBUS output for OTG ports using the regulator framework when the
platform requires hardware-based VBUS control.

Without this, some platforms cannot properly manage VBUS power on OTG-
capable ports, leading to potential USB functionality issues.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - No changes

 drivers/phy/renesas/phy-rcar-gen3-usb2.c | 142 ++++++++++++++++++++++-
 1 file changed, 137 insertions(+), 5 deletions(-)

diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
index f6026b3b95e3..6424fce18705 100644
--- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
+++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
@@ -22,6 +22,7 @@
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 #include <linux/regulator/consumer.h>
+#include <linux/regulator/driver.h>
 #include <linux/reset.h>
 #include <linux/string.h>
 #include <linux/usb/of.h>
@@ -140,6 +141,7 @@ struct rcar_gen3_chan {
 	bool extcon_host;
 	bool is_otg_channel;
 	bool uses_otg_pins;
+	bool otg_internal_reg;
 };
 
 struct rcar_gen3_phy_drv_data {
@@ -224,6 +226,11 @@ static void rcar_gen3_phy_usb2_set_vbus(struct rcar_gen3_chan *ch,
 
 static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus)
 {
+	if (ch->otg_internal_reg) {
+		regulator_hardware_enable(ch->vbus, vbus);
+		return;
+	}
+
 	if (ch->phy_data->no_adp_ctrl || ch->phy_data->vblvl_ctrl) {
 		if (ch->vbus)
 			regulator_hardware_enable(ch->vbus, vbus);
@@ -592,7 +599,7 @@ static int rcar_gen3_phy_usb2_power_on(struct phy *p)
 	u32 val;
 	int ret = 0;
 
-	if (channel->vbus) {
+	if (channel->vbus && !channel->otg_internal_reg) {
 		ret = regulator_enable(channel->vbus);
 		if (ret)
 			return ret;
@@ -633,7 +640,7 @@ static int rcar_gen3_phy_usb2_power_off(struct phy *p)
 		}
 	}
 
-	if (channel->vbus)
+	if (channel->vbus && !channel->otg_internal_reg)
 		ret = regulator_disable(channel->vbus);
 
 	return ret;
@@ -819,6 +826,128 @@ static int rcar_gen3_phy_usb2_init_bus(struct rcar_gen3_chan *channel)
 	return ret;
 }
 
+static int rcar_gen3_phy_usb2_regulator_endisable(struct regulator_dev *rdev,
+						  bool enable)
+{
+	struct rcar_gen3_chan *channel = rdev_get_drvdata(rdev);
+	struct device *dev = channel->dev;
+	int ret;
+
+	ret = pm_runtime_resume_and_get(dev);
+	if (ret < 0) {
+		dev_warn(dev, "pm_runtime_get failed: %i\n", ret);
+		return ret;
+	}
+
+	rcar_gen3_phy_usb2_set_vbus(channel, USB2_VBCTRL,
+				    USB2_VBCTRL_VBOUT, enable);
+	pm_runtime_put_noidle(dev);
+
+	return ret;
+}
+
+static int rcar_gen3_phy_usb2_regulator_enable(struct regulator_dev *rdev)
+{
+	return rcar_gen3_phy_usb2_regulator_endisable(rdev, true);
+}
+
+static int rcar_gen3_phy_usb2_regulator_disable(struct regulator_dev *rdev)
+{
+	return rcar_gen3_phy_usb2_regulator_endisable(rdev, false);
+}
+
+static int rcar_gen3_phy_usb2_regulator_is_enabled(struct regulator_dev *rdev)
+{
+	struct rcar_gen3_chan *channel = rdev_get_drvdata(rdev);
+	void __iomem *usb2_base = channel->base;
+	struct device *dev = channel->dev;
+	u32 vbus_ctrl_reg = USB2_VBCTRL;
+	u32 val;
+	int ret;
+
+	ret = pm_runtime_resume_and_get(dev);
+	if (ret < 0) {
+		dev_warn(dev, "pm_runtime_get failed: %i\n", ret);
+		return ret;
+	}
+
+	val = readl(usb2_base + vbus_ctrl_reg);
+
+	pm_runtime_put_noidle(dev);
+	dev_dbg(channel->dev, "%s: %08x\n", __func__, val);
+
+	return (val & USB2_VBCTRL_VBOUT) ? 1 : 0;
+}
+
+static const struct regulator_ops rcar_gen3_phy_usb2_regulator_ops = {
+	.enable = rcar_gen3_phy_usb2_regulator_enable,
+	.disable = rcar_gen3_phy_usb2_regulator_disable,
+	.is_enabled = rcar_gen3_phy_usb2_regulator_is_enabled,
+};
+
+static const struct regulator_desc rcar_gen3_phy_usb2_regulator = {
+	.name = "otg-vbus-regulator",
+	.of_match = of_match_ptr("vbus-regulator"),
+	.ops = &rcar_gen3_phy_usb2_regulator_ops,
+	.type = REGULATOR_VOLTAGE,
+	.owner = THIS_MODULE,
+	.fixed_uV = 5000000,
+	.n_voltages = 1,
+};
+
+static void rcar_gen3_phy_usb2_vbus_disable_action(void *data)
+{
+	struct regulator *vbus = data;
+
+	regulator_disable(vbus);
+}
+
+static int rcar_gen3_phy_usb2_vbus_regulator_get_exclusive_enable(struct rcar_gen3_chan *channel,
+								  bool enable)
+{
+	struct device *dev = channel->dev;
+	int ret;
+
+	channel->vbus = devm_regulator_get_exclusive(dev, "vbus");
+	if (IS_ERR(channel->vbus))
+		return PTR_ERR(channel->vbus);
+
+	if (!enable)
+		return 0;
+
+	ret = regulator_enable(channel->vbus);
+	if (ret)
+		return ret;
+
+	return devm_add_action_or_reset(dev, rcar_gen3_phy_usb2_vbus_disable_action,
+					channel->vbus);
+}
+
+static int rcar_gen3_phy_usb2_vbus_regulator_register(struct rcar_gen3_chan *channel)
+{
+	struct device *dev = channel->dev;
+	struct regulator_config rcfg = { .dev = dev, };
+	struct regulator_dev *rdev;
+	bool enable = false;
+
+	rcfg.of_node = of_get_available_child_by_name(dev->of_node,
+						      "vbus-regulator");
+	if (rcfg.of_node) {
+		rcfg.driver_data = channel;
+		rdev = devm_regulator_register(dev, &rcar_gen3_phy_usb2_regulator,
+					       &rcfg);
+		of_node_put(rcfg.of_node);
+		if (IS_ERR(rdev))
+			return dev_err_probe(dev, PTR_ERR(rdev),
+					     "Failed to create vbus-regulator\n");
+
+		channel->otg_internal_reg = true;
+		enable = true;
+	}
+
+	return rcar_gen3_phy_usb2_vbus_regulator_get_exclusive_enable(channel, enable);
+}
+
 static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
@@ -890,10 +1019,13 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
 		phy_set_drvdata(channel->rphys[i].phy, &channel->rphys[i]);
 	}
 
-	if (channel->phy_data->no_adp_ctrl && channel->is_otg_channel)
-		channel->vbus = devm_regulator_get_exclusive(dev, "vbus");
-	else
+	if (channel->phy_data->no_adp_ctrl && channel->is_otg_channel) {
+		ret = rcar_gen3_phy_usb2_vbus_regulator_register(channel);
+		if (ret)
+			return ret;
+	} else {
 		channel->vbus = devm_regulator_get_optional(dev, "vbus");
+	}
 	if (IS_ERR(channel->vbus)) {
 		if (PTR_ERR(channel->vbus) == -EPROBE_DEFER)
 			return PTR_ERR(channel->vbus);
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 10/21] phy: renesas: rcar-gen3-usb2: Use mux-state for phyrst management
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (8 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 09/21] phy: renesas: rcar-gen3-usb2: Add regulator for OTG VBUS control Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-13 19:27   ` Geert Uytterhoeven
  2025-11-10 12:08 ` [PATCH v3 11/21] dt-bindings: usb: renesas,usbhs: Add RZ/G3E SoC support Tommaso Merciai
                   ` (10 subsequent siblings)
  20 siblings, 1 reply; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Add support for selecting the phyrst mux-state using the Linux mux
subsystem in the R-Car Gen3 USB2 PHY driver. This ensures correct hardware
initialization and integration with systems utilizing the mux-state device
tree property.

A temporary wrapper for optional muxes is introduced until native support
is available in the multiplexer subsystem.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - New patch

 drivers/phy/renesas/phy-rcar-gen3-usb2.c | 34 ++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
index 6424fce18705..50817bffff34 100644
--- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
+++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
@@ -17,6 +17,7 @@
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
+#include <linux/mux/consumer.h>
 #include <linux/of.h>
 #include <linux/phy/phy.h>
 #include <linux/platform_device.h>
@@ -948,11 +949,27 @@ static int rcar_gen3_phy_usb2_vbus_regulator_register(struct rcar_gen3_chan *cha
 	return rcar_gen3_phy_usb2_vbus_regulator_get_exclusive_enable(channel, enable);
 }
 
+/* Temporary wrapper until the multiplexer subsystem supports optional muxes */
+static inline struct mux_state *
+devm_mux_state_get_optional(struct device *dev, const char *mux_name)
+{
+	if (!of_property_present(dev->of_node, "mux-states"))
+		return NULL;
+
+	return devm_mux_state_get(dev, mux_name);
+}
+
+static void rcar_gen3_phy_mux_state_deselect(void *data)
+{
+	mux_state_deselect(data);
+}
+
 static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct rcar_gen3_chan *channel;
 	struct phy_provider *provider;
+	struct mux_state *mux_state;
 	int ret = 0, i, irq;
 
 	if (!dev->of_node) {
@@ -1019,6 +1036,23 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
 		phy_set_drvdata(channel->rphys[i].phy, &channel->rphys[i]);
 	}
 
+	mux_state = devm_mux_state_get_optional(dev, NULL);
+	if (IS_ERR(mux_state)) {
+		if (PTR_ERR(mux_state) == -EPROBE_DEFER)
+			return PTR_ERR(mux_state);
+		mux_state = NULL;
+	} else {
+		ret = mux_state_select(mux_state);
+		if (ret)
+			return dev_err_probe(dev, ret, "Failed to select USB mux\n");
+
+		ret = devm_add_action_or_reset(dev, rcar_gen3_phy_mux_state_deselect,
+					       mux_state);
+		if (ret)
+			return dev_err_probe(dev, ret,
+					     "Failed to register USB mux state deselect\n");
+	}
+
 	if (channel->phy_data->no_adp_ctrl && channel->is_otg_channel) {
 		ret = rcar_gen3_phy_usb2_vbus_regulator_register(channel);
 		if (ret)
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 11/21] dt-bindings: usb: renesas,usbhs: Add RZ/G3E SoC support
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (9 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 10/21] phy: renesas: rcar-gen3-usb2: Use mux-state for phyrst management Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 12/21] dt-bindings: phy: renesas,usb2-phy: Document RZ/G3E SoC Tommaso Merciai
                   ` (9 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel, Conor Dooley

Document the Renesas USBHS controller found on the Renesas RZ/G3E SoC.
The USBHS block on RZ/G3E is functionally identical to the one found
on the RZ/G2L family, so no driver changes are needed. The existing
"renesas,rzg2l-usbhs" fallback compatible will continue to be used for
handling this IP.

Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - Collected CDooley tag

 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 0b8b90dd1951..dc74e70f1b92 100644
--- a/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml
+++ b/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml
@@ -27,6 +27,7 @@ properties:
               - renesas,usbhs-r9a07g044 # RZ/G2{L,LC}
               - renesas,usbhs-r9a07g054 # RZ/V2L
               - renesas,usbhs-r9a08g045 # RZ/G3S
+              - renesas,usbhs-r9a09g047 # RZ/G3E
               - renesas,usbhs-r9a09g056 # RZ/V2N
               - renesas,usbhs-r9a09g057 # RZ/V2H(P)
           - const: renesas,rzg2l-usbhs
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 12/21] dt-bindings: phy: renesas,usb2-phy: Document RZ/G3E SoC
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (10 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 11/21] dt-bindings: usb: renesas,usbhs: Add RZ/G3E SoC support Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 13/21] dt-bindings: reset: Document RZ/G3E USB2PHY reset Tommaso Merciai
                   ` (8 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel, Conor Dooley

Document USB2.0 phy bindings for RZ/G3E ("R9A09G047") SoC.

The RZ/G3E USB2.0 phy is functionally identical to the one found
on the RZ/V2H(P), so no driver changes are needed. The existing
"renesas,usb2-phy-r9a09g057" will be used as a fallback compatible for
this IP.

Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - Collected CDooley tag

 Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
index 448da30757f2..9740e5b335f9 100644
--- a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
@@ -41,7 +41,9 @@ properties:
           - const: renesas,rzg2l-usb2-phy
 
       - items:
-          - const: renesas,usb2-phy-r9a09g056 # RZ/V2N
+          - enum:
+              - renesas,usb2-phy-r9a09g047 # RZ/G3E
+              - renesas,usb2-phy-r9a09g056 # RZ/V2N
           - const: renesas,usb2-phy-r9a09g057
 
       - const: renesas,usb2-phy-r9a09g077 # RZ/T2H
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 13/21] dt-bindings: reset: Document RZ/G3E USB2PHY reset
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (11 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 12/21] dt-bindings: phy: renesas,usb2-phy: Document RZ/G3E SoC Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 14/21] arm64: dts: renesas: r9a09g057: Add USB2.0 VBUS_SEL mux-controller support Tommaso Merciai
                   ` (7 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel, Conor Dooley

Document USB2PHY reset controller bindings for RZ/G3E ("R9A09G047") SoC.

The RZ/G3E USB2PHY reset controller is functionally identical to the one
found on the RZ/V2H(P), so no driver changes are needed. The existing
"renesas,r9a09g057-usb2phy-reset" will be used as a fallback compatible
for this IP.

Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - Collected CDooley tag

 .../bindings/reset/renesas,rzv2h-usb2phy-reset.yaml           | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
index 03da74ff2d08..c4f3aa8b27fe 100644
--- a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
+++ b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
@@ -17,7 +17,9 @@ properties:
   compatible:
     oneOf:
       - items:
-          - const: renesas,r9a09g056-usb2phy-reset # RZ/V2N
+          - enum:
+              - renesas,r9a09g047-usb2phy-reset # RZ/G3E
+              - renesas,r9a09g056-usb2phy-reset # RZ/V2N
           - const: renesas,r9a09g057-usb2phy-reset
 
       - const: renesas,r9a09g057-usb2phy-reset # RZ/V2H(P)
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 14/21] arm64: dts: renesas: r9a09g057: Add USB2.0 VBUS_SEL mux-controller support
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (12 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 13/21] dt-bindings: reset: Document RZ/G3E USB2PHY reset Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 15/21] arm64: dts: renesas: r9a09g056: " Tommaso Merciai
                   ` (6 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Enable control of USB2.0 VBUSEN via the VBUS_SEL bit in the VBENCTL
register. According to the RZ/V2H(P) SoC hardware manual, OTG channels
require VBUS_SEL set, while HOST-only channels require it cleared.

Add the internal mux-controller node to the usb20phyrst and usb21phyrst
reset nodes.

Set the required mux-states in usb2_phy0 (OTG: state 1) and usb2_phy1
(HOST: state 0) nodes.

This enables proper VBUSEN management for OTG and HOST-only USB2.0
channels.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - Manipulate the mux controller as an internal node, and update
   commit body accordingly.

v1->v2:
 - New patch

 arch/arm64/boot/dts/renesas/r9a09g057.dtsi | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r9a09g057.dtsi b/arch/arm64/boot/dts/renesas/r9a09g057.dtsi
index 40b15f1db930..6c6ef5967bc0 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g057.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g057.dtsi
@@ -989,6 +989,7 @@ usb2_phy0: usb-phy@15800200 {
 			resets = <&usb20phyrst>;
 			#phy-cells = <1>;
 			power-domains = <&cpg>;
+			mux-states = <&usb20phyrst_mux 1>;
 			status = "disabled";
 		};
 
@@ -1002,6 +1003,7 @@ usb2_phy1: usb-phy@15810200 {
 			resets = <&usb21phyrst>;
 			#phy-cells = <1>;
 			power-domains = <&cpg>;
+			mux-states = <&usb21phyrst_mux 0>;
 			status = "disabled";
 		};
 
@@ -1030,6 +1032,10 @@ usb20phyrst: usb20phy-reset@15830000 {
 			power-domains = <&cpg>;
 			#reset-cells = <0>;
 			status = "disabled";
+
+			usb20phyrst_mux: mux-controller {
+				#mux-state-cells = <1>;
+			};
 		};
 
 		usb21phyrst: usb21phy-reset@15840000 {
@@ -1040,6 +1046,10 @@ usb21phyrst: usb21phy-reset@15840000 {
 			power-domains = <&cpg>;
 			#reset-cells = <0>;
 			status = "disabled";
+
+			usb21phyrst_mux: mux-controller {
+				#mux-state-cells = <1>;
+			};
 		};
 
 		sdhi0: mmc@15c00000  {
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 15/21] arm64: dts: renesas: r9a09g056: Add USB2.0 VBUS_SEL mux-controller support
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (13 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 14/21] arm64: dts: renesas: r9a09g057: Add USB2.0 VBUS_SEL mux-controller support Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 16/21] arm64: dts: renesas: r9a09g056: Add USB2.0 PHY VBUS internal regulator node Tommaso Merciai
                   ` (5 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Enable control of USB2.0 VBUSEN via the VBUS_SEL bit in the VBENCTL
register. According to the RZ/V2N SoC hardware manual, OTG channel
require VBUS_SEL set.

Add the internal mux-controller node to the usb20phyrst reset node.

Set the required mux-states in usb2_phy0 (OTG: state 1) node.

This enables proper VBUSEN management for OTG channel.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - Manipulate the mux controller as an internal node, and update
   commit body accordingly.

v1->v2:
 - New patch

 arch/arm64/boot/dts/renesas/r9a09g056.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r9a09g056.dtsi b/arch/arm64/boot/dts/renesas/r9a09g056.dtsi
index 8781c2fa7313..205fa37d04ef 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g056.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g056.dtsi
@@ -663,6 +663,7 @@ usb2_phy0: usb-phy@15800200 {
 			resets = <&usb20phyrst>;
 			#phy-cells = <1>;
 			power-domains = <&cpg>;
+			mux-states = <&usb20phyrst_mux 1>;
 			status = "disabled";
 		};
 
@@ -692,6 +693,10 @@ usb20phyrst: usb20phy-reset@15830000 {
 			power-domains = <&cpg>;
 			#reset-cells = <0>;
 			status = "disabled";
+
+			usb20phyrst_mux: mux-controller {
+				#mux-state-cells = <1>;
+			};
 		};
 
 		sdhi0: mmc@15c00000  {
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 16/21] arm64: dts: renesas: r9a09g056: Add USB2.0 PHY VBUS internal regulator node
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (14 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 15/21] arm64: dts: renesas: r9a09g056: " Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 17/21] arm64: dts: renesas: r9a09g056n48-rzv2n-evk: Enable USB2 PHY0 VBUS support Tommaso Merciai
                   ` (4 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

USB2.0 PHY of the RZ/V2N SoC can drive VBUS line via the VBOUT bit of
the VBCTRL register.

Add VBUS regulator nodes (usb2_phy0_vbus_otg) under the usb2_phy0
node to describe this hw functionality.

This enables proper management of VBUS for USB2.0 OTG devices and ensures
compliance with hardware requirements.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - No changes

 arch/arm64/boot/dts/renesas/r9a09g056.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r9a09g056.dtsi b/arch/arm64/boot/dts/renesas/r9a09g056.dtsi
index 205fa37d04ef..89f08e27a0c3 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g056.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g056.dtsi
@@ -665,6 +665,11 @@ usb2_phy0: usb-phy@15800200 {
 			power-domains = <&cpg>;
 			mux-states = <&usb20phyrst_mux 1>;
 			status = "disabled";
+
+			usb2_phy0_vbus_otg: vbus-regulator {
+				regulator-name = "USB2PHY0-VBUS-OTG";
+				status = "disabled";
+			};
 		};
 
 		hsusb: usb@15820000 {
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 17/21] arm64: dts: renesas: r9a09g056n48-rzv2n-evk: Enable USB2 PHY0 VBUS support
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (15 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 16/21] arm64: dts: renesas: r9a09g056: Add USB2.0 PHY VBUS internal regulator node Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 18/21] arm64: dts: renesas: r9a09g057: Add USB2.0 PHY VBUS internal regulator node Tommaso Merciai
                   ` (3 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Enable the vbus-supply and status properties for USB2 PHY0 and its
VBUS OTG regulator in the r9a09g056n48-rzv2n-evk device tree.

Enabling them ensures proper VBUS handling and reliable USB OTG
operation on the channel.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - No changes

 arch/arm64/boot/dts/renesas/r9a09g056n48-rzv2n-evk.dts | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r9a09g056n48-rzv2n-evk.dts b/arch/arm64/boot/dts/renesas/r9a09g056n48-rzv2n-evk.dts
index 066e66b5d51a..54ed7cb2d73b 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g056n48-rzv2n-evk.dts
+++ b/arch/arm64/boot/dts/renesas/r9a09g056n48-rzv2n-evk.dts
@@ -389,6 +389,11 @@ &usb2_phy0 {
 	pinctrl-0 = <&usb20_pins>;
 	pinctrl-names = "default";
 
+	vbus-supply = <&usb2_phy0_vbus_otg>;
+	status = "okay";
+};
+
+&usb2_phy0_vbus_otg {
 	status = "okay";
 };
 
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 18/21] arm64: dts: renesas: r9a09g057: Add USB2.0 PHY VBUS internal regulator node
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (16 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 17/21] arm64: dts: renesas: r9a09g056n48-rzv2n-evk: Enable USB2 PHY0 VBUS support Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 19/21] arm64: dts: renesas: r9a09g057h44-rzv2h-evk: Enable USB2 PHY0 VBUS support Tommaso Merciai
                   ` (2 subsequent siblings)
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

USB2.0 PHY of the RZ/V2H(P) SoC can drive VBUS line via the VBOUT bit of
the VBCTRL register.

Add VBUS regulator nodes (usb2_phy0_vbus_otg) under the usb2_phy0
nodes to describe this hw functionality.

This enables proper management of VBUS for USB2.0 OTG devices and ensures
compliance with hardware requirements.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - No changes

 arch/arm64/boot/dts/renesas/r9a09g057.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r9a09g057.dtsi b/arch/arm64/boot/dts/renesas/r9a09g057.dtsi
index 6c6ef5967bc0..69d78ca6ca6f 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g057.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g057.dtsi
@@ -991,6 +991,11 @@ usb2_phy0: usb-phy@15800200 {
 			power-domains = <&cpg>;
 			mux-states = <&usb20phyrst_mux 1>;
 			status = "disabled";
+
+			usb2_phy0_vbus_otg: vbus-regulator {
+				regulator-name = "USB2PHY0-VBUS-OTG";
+				status = "disabled";
+			};
 		};
 
 		usb2_phy1: usb-phy@15810200 {
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 19/21] arm64: dts: renesas: r9a09g057h44-rzv2h-evk: Enable USB2 PHY0 VBUS support
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (17 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 18/21] arm64: dts: renesas: r9a09g057: Add USB2.0 PHY VBUS internal regulator node Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 20/21] arm64: dts: renesas: r9a09g047: Add USB2.0 support Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 21/21] arm64: dts: renesas: r9a09g047e57-smarc: Enable " Tommaso Merciai
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Enable the vbus-supply and status properties for USB2 PHY0 and its
VBUS OTG regulator in the r9a09g057h44-rzv2h-evk device tree.

Enabling them ensures proper VBUS handling and reliable USB OTG
operation on the channel.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - No changes

 arch/arm64/boot/dts/renesas/r9a09g057h44-rzv2h-evk.dts | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r9a09g057h44-rzv2h-evk.dts b/arch/arm64/boot/dts/renesas/r9a09g057h44-rzv2h-evk.dts
index 5c06bce3d5b4..69ca9f0381f3 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g057h44-rzv2h-evk.dts
+++ b/arch/arm64/boot/dts/renesas/r9a09g057h44-rzv2h-evk.dts
@@ -423,6 +423,11 @@ &usb2_phy0 {
 	pinctrl-0 = <&usb20_pins>;
 	pinctrl-names = "default";
 
+	vbus-supply = <&usb2_phy0_vbus_otg>;
+	status = "okay";
+};
+
+&usb2_phy0_vbus_otg {
 	status = "okay";
 };
 
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 20/21] arm64: dts: renesas: r9a09g047: Add USB2.0 support
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (18 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 19/21] arm64: dts: renesas: r9a09g057h44-rzv2h-evk: Enable USB2 PHY0 VBUS support Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  2025-11-10 12:08 ` [PATCH v3 21/21] arm64: dts: renesas: r9a09g047e57-smarc: Enable " Tommaso Merciai
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

The Renesas RZ/G3E ("R9A09G047") SoC supports 1x channel with OTG/DRD
and 1x channel with host interface.

Add the ECHI, OHCI, USB2.0 PHY and reset control nodes for USB2.0 channels
in R9A09G047 SoC DTSI.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - Manipulate the mux controller as an internal node.

v1->v2:
 - No changes

 arch/arm64/boot/dts/renesas/r9a09g047.dtsi | 131 +++++++++++++++++++++
 1 file changed, 131 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r9a09g047.dtsi b/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
index 7a469de3bb62..a35b0f4e2d81 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
@@ -853,6 +853,137 @@ gic: interrupt-controller@14900000 {
 			interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_LOW>;
 		};
 
+		ohci0: usb@15800000 {
+			compatible = "generic-ohci";
+			reg = <0 0x15800000 0 0x100>;
+			interrupts = <GIC_SPI 742 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&cpg CPG_MOD 0xb3>, <&cpg CPG_MOD 0xb6>;
+			resets = <&usb20phyrst>, <&cpg 0xac>;
+			phys = <&usb2_phy0 1>;
+			phy-names = "usb";
+			power-domains = <&cpg>;
+			status = "disabled";
+		};
+
+		ohci1: usb@15810000 {
+			compatible = "generic-ohci";
+			reg = <0 0x15810000 0 0x100>;
+			interrupts = <GIC_SPI 747 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&cpg CPG_MOD 0xb4>, <&cpg CPG_MOD 0xb7>;
+			resets = <&usb21phyrst>, <&cpg 0xad>;
+			phys = <&usb2_phy1 1>;
+			phy-names = "usb";
+			power-domains = <&cpg>;
+			status = "disabled";
+		};
+
+		ehci0: usb@15800100 {
+			compatible = "generic-ehci";
+			reg = <0 0x15800100 0 0x100>;
+			interrupts = <GIC_SPI 743 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&cpg CPG_MOD 0xb3>, <&cpg CPG_MOD 0xb6>;
+			resets = <&usb20phyrst>, <&cpg 0xac>;
+			phys = <&usb2_phy0 2>;
+			phy-names = "usb";
+			companion = <&ohci0>;
+			power-domains = <&cpg>;
+			status = "disabled";
+		};
+
+		ehci1: usb@15810100 {
+			compatible = "generic-ehci";
+			reg = <0 0x15810100 0 0x100>;
+			interrupts = <GIC_SPI 748 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&cpg CPG_MOD 0xb4>, <&cpg CPG_MOD 0xb7>;
+			resets = <&usb21phyrst>, <&cpg 0xad>;
+			phys = <&usb2_phy1 2>;
+			phy-names = "usb";
+			companion = <&ohci1>;
+			power-domains = <&cpg>;
+			status = "disabled";
+		};
+
+		usb2_phy0: usb-phy@15800200 {
+			compatible = "renesas,usb2-phy-r9a09g047",
+				     "renesas,usb2-phy-r9a09g057";
+			reg = <0 0x15800200 0 0x700>;
+			interrupts = <GIC_SPI 745 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&cpg CPG_MOD 0xb3>,
+				 <&cpg CPG_CORE R9A09G047_USB2_0_CLK_CORE0>;
+			clock-names = "fck", "usb_x1";
+			resets = <&usb20phyrst>;
+			#phy-cells = <1>;
+			power-domains = <&cpg>;
+			mux-states = <&usb20phyrst_mux 1>;
+			status = "disabled";
+
+			usb2_phy0_vbus_otg: vbus-regulator {
+				regulator-name = "USB2PHY0-VBUS-OTG";
+				status = "disabled";
+			};
+		};
+
+		usb2_phy1: usb-phy@15810200 {
+			compatible = "renesas,usb2-phy-r9a09g047",
+				     "renesas,usb2-phy-r9a09g057";
+			reg = <0 0x15810200 0 0x700>;
+			interrupts = <GIC_SPI 750 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&cpg CPG_MOD 0xb4>,
+				 <&cpg CPG_CORE R9A09G047_USB2_0_CLK_CORE1>;
+			clock-names = "fck", "usb_x1";
+			resets = <&usb21phyrst>;
+			#phy-cells = <1>;
+			power-domains = <&cpg>;
+			mux-states = <&usb21phyrst_mux 0>;
+			status = "disabled";
+		};
+
+		hsusb: usb@15820000 {
+			compatible = "renesas,usbhs-r9a09g047",
+				     "renesas,rzg2l-usbhs";
+			reg = <0 0x15820000 0 0x10000>;
+			interrupts = <GIC_SPI 751 IRQ_TYPE_EDGE_RISING>,
+				     <GIC_SPI 752 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 753 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 754 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&cpg CPG_MOD 0xb3>, <&cpg CPG_MOD 0xb5>;
+			resets = <&usb20phyrst>, <&cpg 0xae>;
+			phys = <&usb2_phy0 3>;
+			phy-names = "usb";
+			power-domains = <&cpg>;
+			status = "disabled";
+		};
+
+		usb20phyrst: reset-controller@15830000 {
+			compatible = "renesas,r9a09g047-usb2phy-reset",
+				     "renesas,r9a09g057-usb2phy-reset";
+			reg = <0 0x15830000 0 0x10000>;
+			clocks = <&cpg CPG_MOD 0xb6>;
+			resets = <&cpg 0xaf>;
+			power-domains = <&cpg>;
+			#reset-cells = <0>;
+			status = "disabled";
+
+			usb20phyrst_mux: mux-controller {
+				#mux-state-cells = <1>;
+			};
+		};
+
+		usb21phyrst: reset-controller@15840000 {
+			compatible = "renesas,r9a09g047-usb2phy-reset",
+				     "renesas,r9a09g057-usb2phy-reset";
+			reg = <0 0x15840000 0 0x10000>;
+			clocks = <&cpg CPG_MOD 0xb7>;
+			resets = <&cpg 0xaf>;
+			power-domains = <&cpg>;
+			#reset-cells = <0>;
+			status = "disabled";
+
+			usb21phyrst_mux: mux-controller {
+				#mux-state-cells = <1>;
+			};
+		};
+
 		sdhi0: mmc@15c00000  {
 			compatible = "renesas,sdhi-r9a09g047", "renesas,sdhi-r9a09g057";
 			reg = <0x0 0x15c00000 0 0x10000>;
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v3 21/21] arm64: dts: renesas: r9a09g047e57-smarc: Enable USB2.0 support
  2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
                   ` (19 preceding siblings ...)
  2025-11-10 12:08 ` [PATCH v3 20/21] arm64: dts: renesas: r9a09g047: Add USB2.0 support Tommaso Merciai
@ 2025-11-10 12:08 ` Tommaso Merciai
  20 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 12:08 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Enable USB2.0 support on the RZ/G3E EVK board, USB1B_1A_HOST and
USB5_4_HOST connectors support only host operation and USB0_OTG
supports host/peripheral operation.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
v2->v3:
 - No changes

v1->v2:
 - No changes

 .../boot/dts/renesas/r9a09g047e57-smarc.dts   | 49 +++++++++++++++++++
 .../boot/dts/renesas/renesas-smarc2.dtsi      | 23 +++++++++
 2 files changed, 72 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
index 08e814c03fa8..ca19e8628c80 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
+++ b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
@@ -164,6 +164,28 @@ sd1-data {
 				 <RZG3E_PORT_PINMUX(G, 5, 1)>; /* SD1DAT3 */
 		};
 	};
+
+	usb20_pins: usb20 {
+		ovc {
+			pinmux =  <RZG3E_PORT_PINMUX(0, 0, 12)>; /* OVC */
+			bias-pull-up;
+		};
+
+		vbus {
+			pinmux = <RZG3E_PORT_PINMUX(0, 1, 12)>; /* VBUS */
+		};
+	};
+
+	usb21_pins: usb21 {
+		ovc {
+			pinmux = <RZG3E_PORT_PINMUX(G, 6, 12)>; /* OVC */
+			bias-pull-up;
+		};
+
+		vbus {
+			pinmux = <RZG3E_PORT_PINMUX(K, 3, 12)>; /* VBUS */
+		};
+	};
 };
 
 &scif0 {
@@ -179,3 +201,30 @@ &sdhi1 {
 	vmmc-supply = <&reg_3p3v>;
 	vqmmc-supply = <&vqmmc_sd1_pvdd>;
 };
+
+&usb20phyrst {
+	status = "okay";
+};
+
+&usb21phyrst {
+	status = "okay";
+};
+
+&usb2_phy0 {
+	pinctrl-0 = <&usb20_pins>;
+	pinctrl-names = "default";
+
+	vbus-supply = <&usb2_phy0_vbus_otg>;
+	status = "okay";
+};
+
+&usb2_phy0_vbus_otg {
+	status = "okay";
+};
+
+&usb2_phy1 {
+	pinctrl-0 = <&usb21_pins>;
+	pinctrl-names = "default";
+
+	status = "okay";
+};
diff --git a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
index 58561da3007a..2daf437abb82 100644
--- a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
+++ b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
@@ -90,11 +90,34 @@ &canfd {
 	status = "okay";
 };
 
+&ehci0 {
+	dr_mode = "otg";
+	status = "okay";
+};
+
+&ehci1 {
+	status = "okay";
+};
+
+&hsusb {
+	dr_mode = "otg";
+	status = "okay";
+};
+
 &i2c0 {
 	status = "okay";
 	clock-frequency = <400000>;
 };
 
+&ohci0 {
+	dr_mode = "otg";
+	status = "okay";
+};
+
+&ohci1 {
+	status = "okay";
+};
+
 &scif0 {
 	status = "okay";
 };
-- 
2.43.0


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 08/21] dt-bindings: phy: renesas,usb2-phy: Document mux-states property
  2025-11-10 12:08 ` [PATCH v3 08/21] dt-bindings: phy: renesas,usb2-phy: Document mux-states property Tommaso Merciai
@ 2025-11-10 18:54   ` Conor Dooley
  0 siblings, 0 replies; 32+ messages in thread
From: Conor Dooley @ 2025-11-10 18:54 UTC (permalink / raw)
  To: Tommaso Merciai
  Cc: tomm.merciai, linux-renesas-soc, biju.das.jz, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel


[-- Attachment #1.1: Type: text/plain, Size: 1536 bytes --]

On Mon, Nov 10, 2025 at 01:08:08PM +0100, Tommaso Merciai wrote:
> Some Renesas SoCs, such as RZ/G3E, provide a USB2.0 OTG PHY with
> configurable VBUS control through a multiplexed hardware register.
> This register allows selecting the VBUS source via a mux control
> line exposed by the PHY.
> 
> To represent this hardware configuration, support the standard
> `mux-states` property in the Renesas USB2 PHY binding.
> This allows the DeviceTree to model the VBUS source selection as
> a mux, consistent with generic binding conventions.
> 
> Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> ---
> v2->v3:
>  - Improved commit body.
>  - Improved mux-states description.
> 
> v1->v2:
>  - New patch
> 
>  Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
> index 2cd0efa75f81..448da30757f2 100644
> --- a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
> +++ b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
> @@ -102,6 +102,11 @@ properties:
>  
>    dr_mode: true
>  
> +  mux-states:
> +    description:
> +      phandle to a mux controller node that select the source for USB VBUS.
> +    maxItems: 1

Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable

> +
>  if:
>    properties:
>      compatible:
> -- 
> 2.43.0
> 

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 112 bytes --]

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux
  2025-11-10 12:08 ` [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux Tommaso Merciai
@ 2025-11-10 18:56   ` Conor Dooley
  2025-11-10 22:43     ` Tommaso Merciai
  2025-11-17  7:00   ` Krzysztof Kozlowski
  1 sibling, 1 reply; 32+ messages in thread
From: Conor Dooley @ 2025-11-10 18:56 UTC (permalink / raw)
  To: Tommaso Merciai
  Cc: tomm.merciai, linux-renesas-soc, biju.das.jz, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel


[-- Attachment #1.1: Type: text/plain, Size: 1851 bytes --]

On Mon, Nov 10, 2025 at 01:08:04PM +0100, Tommaso Merciai wrote:
> Document the 'mux-controller' child node in the Renesas RZ/V2H(P)
> USB2PHY reset binding to support describing the USB VBUS_SEL
> multiplexer as a mux-controller.
> 
> This is required to properly configure the USB PHY VBUS source on
> RZ/V2H(P), RZ/G3E SoCs.
> 
> Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> ---
> v2->v3:
>  - Manipulate mux-controller as an internal node.

Why is it a child node, rather than just putting the cell in the parent
reset node?

>  - Improved commit body.
> 
> v1->v2:
>  - New patch
> 
>  .../bindings/reset/renesas,rzv2h-usb2phy-reset.yaml   | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> index c1b800a10b53..03da74ff2d08 100644
> --- a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> +++ b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> @@ -37,6 +37,12 @@ properties:
>    '#reset-cells':
>      const: 0
>  
> +  mux-controller:
> +    $ref: /schemas/mux/mux-controller.yaml#
> +    description: Mux controller for USB VBUS source selection.
> +    type: object
> +    unevaluatedProperties: false
> +
>  required:
>    - compatible
>    - reg
> @@ -44,6 +50,7 @@ required:
>    - resets
>    - power-domains
>    - '#reset-cells'
> +  - mux-controller
>  
>  additionalProperties: false
>  
> @@ -58,4 +65,8 @@ examples:
>          resets = <&cpg 0xaf>;
>          power-domains = <&cpg>;
>          #reset-cells = <0>;
> +
> +        mux-controller {
> +          #mux-state-cells = <1>;
> +        };
>      };
> -- 
> 2.43.0
> 

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 112 bytes --]

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux
  2025-11-10 18:56   ` Conor Dooley
@ 2025-11-10 22:43     ` Tommaso Merciai
  2025-11-11 17:49       ` Conor Dooley
  0 siblings, 1 reply; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-10 22:43 UTC (permalink / raw)
  To: Conor Dooley
  Cc: tomm.merciai, linux-renesas-soc, biju.das.jz, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Hi Conor,
Thanks for your comment!

On Mon, Nov 10, 2025 at 06:56:31PM +0000, Conor Dooley wrote:
> On Mon, Nov 10, 2025 at 01:08:04PM +0100, Tommaso Merciai wrote:
> > Document the 'mux-controller' child node in the Renesas RZ/V2H(P)
> > USB2PHY reset binding to support describing the USB VBUS_SEL
> > multiplexer as a mux-controller.
> > 
> > This is required to properly configure the USB PHY VBUS source on
> > RZ/V2H(P), RZ/G3E SoCs.
> > 
> > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> > ---
> > v2->v3:
> >  - Manipulate mux-controller as an internal node.
> 
> Why is it a child node, rather than just putting the cell in the parent
> reset node?

Getting "make dt_binding_check errors" [1] in v2
Adding #mux-state-cells = <1> into:

	usb20phyrst: reset-controller@15830000
	usb21phyrst: reset-controller@15840000

Nodes.

Please correct me if I'm wrong.

Thanks & Regards,
Tommaso


[1] https://patchwork.kernel.org/project/linux-renesas-soc/patch/961741af7d4ec945945164759fe0d78bb3cf4d9d.1762354366.git.tommaso.merciai.xr@bp.renesas.com/

> 
> >  - Improved commit body.
> > 
> > v1->v2:
> >  - New patch
> > 
> >  .../bindings/reset/renesas,rzv2h-usb2phy-reset.yaml   | 11 +++++++++++
> >  1 file changed, 11 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> > index c1b800a10b53..03da74ff2d08 100644
> > --- a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> > +++ b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> > @@ -37,6 +37,12 @@ properties:
> >    '#reset-cells':
> >      const: 0
> >  
> > +  mux-controller:
> > +    $ref: /schemas/mux/mux-controller.yaml#
> > +    description: Mux controller for USB VBUS source selection.
> > +    type: object
> > +    unevaluatedProperties: false
> > +
> >  required:
> >    - compatible
> >    - reg
> > @@ -44,6 +50,7 @@ required:
> >    - resets
> >    - power-domains
> >    - '#reset-cells'
> > +  - mux-controller
> >  
> >  additionalProperties: false
> >  
> > @@ -58,4 +65,8 @@ examples:
> >          resets = <&cpg 0xaf>;
> >          power-domains = <&cpg>;
> >          #reset-cells = <0>;
> > +
> > +        mux-controller {
> > +          #mux-state-cells = <1>;
> > +        };
> >      };
> > -- 
> > 2.43.0
> > 



-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux
  2025-11-10 22:43     ` Tommaso Merciai
@ 2025-11-11 17:49       ` Conor Dooley
  2025-11-12 16:37         ` Rob Herring
  0 siblings, 1 reply; 32+ messages in thread
From: Conor Dooley @ 2025-11-11 17:49 UTC (permalink / raw)
  To: Tommaso Merciai, robh
  Cc: tomm.merciai, linux-renesas-soc, biju.das.jz, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel


[-- Attachment #1.1: Type: text/plain, Size: 3347 bytes --]

Tommaso, Rob,

On Mon, Nov 10, 2025 at 11:43:37PM +0100, Tommaso Merciai wrote:
> Hi Conor,
> Thanks for your comment!
> 
> On Mon, Nov 10, 2025 at 06:56:31PM +0000, Conor Dooley wrote:
> > On Mon, Nov 10, 2025 at 01:08:04PM +0100, Tommaso Merciai wrote:
> > > Document the 'mux-controller' child node in the Renesas RZ/V2H(P)
> > > USB2PHY reset binding to support describing the USB VBUS_SEL
> > > multiplexer as a mux-controller.
> > > 
> > > This is required to properly configure the USB PHY VBUS source on
> > > RZ/V2H(P), RZ/G3E SoCs.
> > > 
> > > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> > > ---
> > > v2->v3:
> > >  - Manipulate mux-controller as an internal node.
> > 
> > Why is it a child node, rather than just putting the cell in the parent
> > reset node?
> 
> Getting "make dt_binding_check errors" [1] in v2
> Adding #mux-state-cells = <1> into:
> 
> 	usb20phyrst: reset-controller@15830000
> 	usb21phyrst: reset-controller@15840000
> 
> Nodes.
> 
> Please correct me if I'm wrong.

I think that that binding is not working as intended. Why require a
node-name pattern, when it matches on other things too:
select:
  anyOf:
    - properties:
        $nodename:
          pattern: '^mux-controller'
    - required:
        - '#mux-control-cells'
    - required:
        - '#mux-state-cells'
if the node name always contained mux-controller, the second two here
would not be needed. Looks to me like the intention was for it to allow
putting these control/state-cells properties into mfd type nodes.

I'd delete the node name property tbh. Rob, you converted this to
schema, what do you think?

Cheers,
Conor.
 
> [1] https://patchwork.kernel.org/project/linux-renesas-soc/patch/961741af7d4ec945945164759fe0d78bb3cf4d9d.1762354366.git.tommaso.merciai.xr@bp.renesas.com/
> 
> > 
> > >  - Improved commit body.
> > > 
> > > v1->v2:
> > >  - New patch
> > > 
> > >  .../bindings/reset/renesas,rzv2h-usb2phy-reset.yaml   | 11 +++++++++++
> > >  1 file changed, 11 insertions(+)
> > > 
> > > diff --git a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> > > index c1b800a10b53..03da74ff2d08 100644
> > > --- a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> > > +++ b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> > > @@ -37,6 +37,12 @@ properties:
> > >    '#reset-cells':
> > >      const: 0
> > >  
> > > +  mux-controller:
> > > +    $ref: /schemas/mux/mux-controller.yaml#
> > > +    description: Mux controller for USB VBUS source selection.
> > > +    type: object
> > > +    unevaluatedProperties: false
> > > +
> > >  required:
> > >    - compatible
> > >    - reg
> > > @@ -44,6 +50,7 @@ required:
> > >    - resets
> > >    - power-domains
> > >    - '#reset-cells'
> > > +  - mux-controller
> > >  
> > >  additionalProperties: false
> > >  
> > > @@ -58,4 +65,8 @@ examples:
> > >          resets = <&cpg 0xaf>;
> > >          power-domains = <&cpg>;
> > >          #reset-cells = <0>;
> > > +
> > > +        mux-controller {
> > > +          #mux-state-cells = <1>;
> > > +        };
> > >      };
> > > -- 
> > > 2.43.0
> > > 
> 
> 

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 112 bytes --]

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux
  2025-11-11 17:49       ` Conor Dooley
@ 2025-11-12 16:37         ` Rob Herring
  2025-11-12 18:48           ` Conor Dooley
  0 siblings, 1 reply; 32+ messages in thread
From: Rob Herring @ 2025-11-12 16:37 UTC (permalink / raw)
  To: Conor Dooley
  Cc: Tommaso Merciai, tomm.merciai, linux-renesas-soc, biju.das.jz,
	Vinod Koul, Kishon Vijay Abraham I, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

On Tue, Nov 11, 2025 at 05:49:24PM +0000, Conor Dooley wrote:
> Tommaso, Rob,
> 
> On Mon, Nov 10, 2025 at 11:43:37PM +0100, Tommaso Merciai wrote:
> > Hi Conor,
> > Thanks for your comment!
> > 
> > On Mon, Nov 10, 2025 at 06:56:31PM +0000, Conor Dooley wrote:
> > > On Mon, Nov 10, 2025 at 01:08:04PM +0100, Tommaso Merciai wrote:
> > > > Document the 'mux-controller' child node in the Renesas RZ/V2H(P)
> > > > USB2PHY reset binding to support describing the USB VBUS_SEL
> > > > multiplexer as a mux-controller.
> > > > 
> > > > This is required to properly configure the USB PHY VBUS source on
> > > > RZ/V2H(P), RZ/G3E SoCs.
> > > > 
> > > > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> > > > ---
> > > > v2->v3:
> > > >  - Manipulate mux-controller as an internal node.
> > > 
> > > Why is it a child node, rather than just putting the cell in the parent
> > > reset node?
> > 
> > Getting "make dt_binding_check errors" [1] in v2
> > Adding #mux-state-cells = <1> into:
> > 
> > 	usb20phyrst: reset-controller@15830000
> > 	usb21phyrst: reset-controller@15840000
> > 
> > Nodes.
> > 
> > Please correct me if I'm wrong.
> 
> I think that that binding is not working as intended. Why require a
> node-name pattern, when it matches on other things too:
> select:
>   anyOf:
>     - properties:
>         $nodename:
>           pattern: '^mux-controller'
>     - required:
>         - '#mux-control-cells'
>     - required:
>         - '#mux-state-cells'
> if the node name always contained mux-controller, the second two here
> would not be needed. Looks to me like the intention was for it to allow
> putting these control/state-cells properties into mfd type nodes.
> 
> I'd delete the node name property tbh. Rob, you converted this to
> schema, what do you think?

Yeah, I'd probably just comment it out and drop the select.

I'm not sure what to do here in general. Matching on node names was 
useful early on, but that becomes less useful as we have schemas for 
everything. I'd still like to document standard node names in schemas 
somehow, but obviously we can't require a certain name when a node is 
multiple providers. Ideally, every node name in the list in the DT spec 
would be in schemas and we could generate that list.

Rob

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux
  2025-11-12 16:37         ` Rob Herring
@ 2025-11-12 18:48           ` Conor Dooley
  0 siblings, 0 replies; 32+ messages in thread
From: Conor Dooley @ 2025-11-12 18:48 UTC (permalink / raw)
  To: Rob Herring
  Cc: Tommaso Merciai, tomm.merciai, linux-renesas-soc, biju.das.jz,
	Vinod Koul, Kishon Vijay Abraham I, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel


[-- Attachment #1.1: Type: text/plain, Size: 2927 bytes --]

On Wed, Nov 12, 2025 at 10:37:12AM -0600, Rob Herring wrote:
> On Tue, Nov 11, 2025 at 05:49:24PM +0000, Conor Dooley wrote:
> > Tommaso, Rob,
> > 
> > On Mon, Nov 10, 2025 at 11:43:37PM +0100, Tommaso Merciai wrote:
> > > Hi Conor,
> > > Thanks for your comment!
> > > 
> > > On Mon, Nov 10, 2025 at 06:56:31PM +0000, Conor Dooley wrote:
> > > > On Mon, Nov 10, 2025 at 01:08:04PM +0100, Tommaso Merciai wrote:
> > > > > Document the 'mux-controller' child node in the Renesas RZ/V2H(P)
> > > > > USB2PHY reset binding to support describing the USB VBUS_SEL
> > > > > multiplexer as a mux-controller.
> > > > > 
> > > > > This is required to properly configure the USB PHY VBUS source on
> > > > > RZ/V2H(P), RZ/G3E SoCs.
> > > > > 
> > > > > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> > > > > ---
> > > > > v2->v3:
> > > > >  - Manipulate mux-controller as an internal node.
> > > > 
> > > > Why is it a child node, rather than just putting the cell in the parent
> > > > reset node?
> > > 
> > > Getting "make dt_binding_check errors" [1] in v2
> > > Adding #mux-state-cells = <1> into:
> > > 
> > > 	usb20phyrst: reset-controller@15830000
> > > 	usb21phyrst: reset-controller@15840000
> > > 
> > > Nodes.
> > > 
> > > Please correct me if I'm wrong.
> > 
> > I think that that binding is not working as intended. Why require a
> > node-name pattern, when it matches on other things too:
> > select:
> >   anyOf:
> >     - properties:
> >         $nodename:
> >           pattern: '^mux-controller'
> >     - required:
> >         - '#mux-control-cells'
> >     - required:
> >         - '#mux-state-cells'
> > if the node name always contained mux-controller, the second two here
> > would not be needed. Looks to me like the intention was for it to allow
> > putting these control/state-cells properties into mfd type nodes.
> > 
> > I'd delete the node name property tbh. Rob, you converted this to
> > schema, what do you think?
> 
> Yeah, I'd probably just comment it out and drop the select.

Is dropping the select okay to do, or should just the nodename portion
go? I think there's a couple users that would need to be fixed up if the
whole thing gets removed. E.g. gpio-mux and reg-mux bot rely on the
schema being applied automagically AFAICT, and maybe there's some others.
Although, 99% of mux-controllers seem to use gpio-mux, reg-mux and
mmio-mux which are covered by those two files.

> I'm not sure what to do here in general. Matching on node names was 
> useful early on, but that becomes less useful as we have schemas for 
> everything. I'd still like to document standard node names in schemas 
> somehow, but obviously we can't require a certain name when a node is 
> multiple providers. Ideally, every node name in the list in the DT spec 
> would be in schemas and we could generate that list.
> 
> Rob

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 112 bytes --]

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 10/21] phy: renesas: rcar-gen3-usb2: Use mux-state for phyrst management
  2025-11-10 12:08 ` [PATCH v3 10/21] phy: renesas: rcar-gen3-usb2: Use mux-state for phyrst management Tommaso Merciai
@ 2025-11-13 19:27   ` Geert Uytterhoeven
  2025-11-14  8:21     ` Tommaso Merciai
  0 siblings, 1 reply; 32+ messages in thread
From: Geert Uytterhoeven @ 2025-11-13 19:27 UTC (permalink / raw)
  To: Tommaso Merciai
  Cc: tomm.merciai, linux-renesas-soc, biju.das.jz, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Hi Tommaso,

On Mon, 10 Nov 2025 at 13:10, Tommaso Merciai
<tommaso.merciai.xr@bp.renesas.com> wrote:
> Add support for selecting the phyrst mux-state using the Linux mux
> subsystem in the R-Car Gen3 USB2 PHY driver. This ensures correct hardware
> initialization and integration with systems utilizing the mux-state device
> tree property.
>
> A temporary wrapper for optional muxes is introduced until native support
> is available in the multiplexer subsystem.
>
> Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>

Thanks for your patch!

> --- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
> +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c

> @@ -948,11 +949,27 @@ static int rcar_gen3_phy_usb2_vbus_regulator_register(struct rcar_gen3_chan *cha
>         return rcar_gen3_phy_usb2_vbus_regulator_get_exclusive_enable(channel, enable);
>  }
>
> +/* Temporary wrapper until the multiplexer subsystem supports optional muxes */
> +static inline struct mux_state *
> +devm_mux_state_get_optional(struct device *dev, const char *mux_name)
> +{
> +       if (!of_property_present(dev->of_node, "mux-states"))
> +               return NULL;
> +
> +       return devm_mux_state_get(dev, mux_name);
> +}
> +
> +static void rcar_gen3_phy_mux_state_deselect(void *data)
> +{
> +       mux_state_deselect(data);
> +}

If CONFIG_MULTIPLEXER is not set (e.g. shmobile_defconfig):

arm-linux-gnueabihf-ld: drivers/phy/renesas/phy-rcar-gen3-usb2.o: in
function `rcar_gen3_phy_mux_state_deselect':
phy-rcar-gen3-usb2.c:(.text+0x37c): undefined reference to `mux_state_deselect'
arm-linux-gnueabihf-ld: drivers/phy/renesas/phy-rcar-gen3-usb2.o: in
function `rcar_gen3_phy_usb2_probe':
phy-rcar-gen3-usb2.c:(.text+0x7d0): undefined reference to `devm_mux_state_get'
arm-linux-gnueabihf-ld: phy-rcar-gen3-usb2.c:(.text+0x7fc): undefined
reference to `mux_state_select_delay'

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 10/21] phy: renesas: rcar-gen3-usb2: Use mux-state for phyrst management
  2025-11-13 19:27   ` Geert Uytterhoeven
@ 2025-11-14  8:21     ` Tommaso Merciai
  0 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-14  8:21 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: tomm.merciai, linux-renesas-soc, biju.das.jz, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Hi Geert,
Thank you for your review!


On Thu, Nov 13, 2025 at 08:27:43PM +0100, Geert Uytterhoeven wrote:
> Hi Tommaso,
> 
> On Mon, 10 Nov 2025 at 13:10, Tommaso Merciai
> <tommaso.merciai.xr@bp.renesas.com> wrote:
> > Add support for selecting the phyrst mux-state using the Linux mux
> > subsystem in the R-Car Gen3 USB2 PHY driver. This ensures correct hardware
> > initialization and integration with systems utilizing the mux-state device
> > tree property.
> >
> > A temporary wrapper for optional muxes is introduced until native support
> > is available in the multiplexer subsystem.
> >
> > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> 
> Thanks for your patch!
> 
> > --- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
> > +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
> 
> > @@ -948,11 +949,27 @@ static int rcar_gen3_phy_usb2_vbus_regulator_register(struct rcar_gen3_chan *cha
> >         return rcar_gen3_phy_usb2_vbus_regulator_get_exclusive_enable(channel, enable);
> >  }
> >
> > +/* Temporary wrapper until the multiplexer subsystem supports optional muxes */
> > +static inline struct mux_state *
> > +devm_mux_state_get_optional(struct device *dev, const char *mux_name)
> > +{
> > +       if (!of_property_present(dev->of_node, "mux-states"))
> > +               return NULL;
> > +
> > +       return devm_mux_state_get(dev, mux_name);
> > +}
> > +
> > +static void rcar_gen3_phy_mux_state_deselect(void *data)
> > +{
> > +       mux_state_deselect(data);
> > +}
> 
> If CONFIG_MULTIPLEXER is not set (e.g. shmobile_defconfig):
> 
> arm-linux-gnueabihf-ld: drivers/phy/renesas/phy-rcar-gen3-usb2.o: in
> function `rcar_gen3_phy_mux_state_deselect':
> phy-rcar-gen3-usb2.c:(.text+0x37c): undefined reference to `mux_state_deselect'
> arm-linux-gnueabihf-ld: drivers/phy/renesas/phy-rcar-gen3-usb2.o: in
> function `rcar_gen3_phy_usb2_probe':
> phy-rcar-gen3-usb2.c:(.text+0x7d0): undefined reference to `devm_mux_state_get'
> arm-linux-gnueabihf-ld: phy-rcar-gen3-usb2.c:(.text+0x7fc): undefined
> reference to `mux_state_select_delay'

Ouch thanks!
I miss to add:

	select MULTIPLEXER

Into drivers/phy/renesas/Kconfig
Sorry.

This fix shmobile_defconfig build on my side.
I will add this in v4.

Thanks & Regards,
Tommaso

> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> -- 
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux
  2025-11-10 12:08 ` [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux Tommaso Merciai
  2025-11-10 18:56   ` Conor Dooley
@ 2025-11-17  7:00   ` Krzysztof Kozlowski
  2025-11-17 14:44     ` Tommaso Merciai
  1 sibling, 1 reply; 32+ messages in thread
From: Krzysztof Kozlowski @ 2025-11-17  7:00 UTC (permalink / raw)
  To: Tommaso Merciai
  Cc: tomm.merciai, linux-renesas-soc, biju.das.jz, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

On Mon, Nov 10, 2025 at 01:08:04PM +0100, Tommaso Merciai wrote:
> Document the 'mux-controller' child node in the Renesas RZ/V2H(P)
> USB2PHY reset binding to support describing the USB VBUS_SEL
> multiplexer as a mux-controller.
> 
> This is required to properly configure the USB PHY VBUS source on
> RZ/V2H(P), RZ/G3E SoCs.

And where did you explain why this cannot be folded into parent node? If
you do not provide context why reviewer's advice cannot be fulfilled,
then you will get the same comment.

> 
> Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> ---
> v2->v3:
>  - Manipulate mux-controller as an internal node.
>  - Improved commit body.
> 
> v1->v2:
>  - New patch
> 
>  .../bindings/reset/renesas,rzv2h-usb2phy-reset.yaml   | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> index c1b800a10b53..03da74ff2d08 100644
> --- a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> +++ b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> @@ -37,6 +37,12 @@ properties:
>    '#reset-cells':
>      const: 0
>  
> +  mux-controller:
> +    $ref: /schemas/mux/mux-controller.yaml#
> +    description: Mux controller for USB VBUS source selection.
> +    type: object
> +    unevaluatedProperties: false
> +
>  required:
>    - compatible
>    - reg
> @@ -44,6 +50,7 @@ required:
>    - resets
>    - power-domains
>    - '#reset-cells'
> +  - mux-controller
>  
>  additionalProperties: false
>  
> @@ -58,4 +65,8 @@ examples:
>          resets = <&cpg 0xaf>;
>          power-domains = <&cpg>;
>          #reset-cells = <0>;
> +
> +        mux-controller {
> +          #mux-state-cells = <1>;

Do not mix up indentation.

Best regards,
Krzysztof


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux
  2025-11-17  7:00   ` Krzysztof Kozlowski
@ 2025-11-17 14:44     ` Tommaso Merciai
  0 siblings, 0 replies; 32+ messages in thread
From: Tommaso Merciai @ 2025-11-17 14:44 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: tomm.merciai, linux-renesas-soc, biju.das.jz, Vinod Koul,
	Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Fabrizio Castro, Lad Prabhakar, Philipp Zabel,
	Peter Rosin, Yoshihiro Shimoda, Geert Uytterhoeven, Magnus Damm,
	Arnd Bergmann, Greg Kroah-Hartman, linux-phy, devicetree,
	linux-kernel

Hi Krzysztof,
Thanks for your review!


On Mon, Nov 17, 2025 at 08:00:27AM +0100, Krzysztof Kozlowski wrote:
> On Mon, Nov 10, 2025 at 01:08:04PM +0100, Tommaso Merciai wrote:
> > Document the 'mux-controller' child node in the Renesas RZ/V2H(P)
> > USB2PHY reset binding to support describing the USB VBUS_SEL
> > multiplexer as a mux-controller.
> > 
> > This is required to properly configure the USB PHY VBUS source on
> > RZ/V2H(P), RZ/G3E SoCs.
> 
> And where did you explain why this cannot be folded into parent node? If
> you do not provide context why reviewer's advice cannot be fulfilled,
> then you will get the same comment.

Ouch, thanks.

The mux-controller cannot be folded into the parent USB2PHY node because
the VBUS source selector is not part of the USB2PHY block itself.

I will add that in v4.

> 
> > 
> > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> > ---
> > v2->v3:
> >  - Manipulate mux-controller as an internal node.
> >  - Improved commit body.
> > 
> > v1->v2:
> >  - New patch
> > 
> >  .../bindings/reset/renesas,rzv2h-usb2phy-reset.yaml   | 11 +++++++++++
> >  1 file changed, 11 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> > index c1b800a10b53..03da74ff2d08 100644
> > --- a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> > +++ b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
> > @@ -37,6 +37,12 @@ properties:
> >    '#reset-cells':
> >      const: 0
> >  
> > +  mux-controller:
> > +    $ref: /schemas/mux/mux-controller.yaml#
> > +    description: Mux controller for USB VBUS source selection.
> > +    type: object
> > +    unevaluatedProperties: false
> > +
> >  required:
> >    - compatible
> >    - reg
> > @@ -44,6 +50,7 @@ required:
> >    - resets
> >    - power-domains
> >    - '#reset-cells'
> > +  - mux-controller
> >  
> >  additionalProperties: false
> >  
> > @@ -58,4 +65,8 @@ examples:
> >          resets = <&cpg 0xaf>;
> >          power-domains = <&cpg>;
> >          #reset-cells = <0>;
> > +
> > +        mux-controller {
> > +          #mux-state-cells = <1>;
> 
> Do not mix up indentation.

Ack, thank you.


> 
> Best regards,
> Krzysztof
> 

Regards,
Tommaso




-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

^ permalink raw reply	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2025-11-17 14:44 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-10 12:08 [PATCH v3 00/21] Add USB2.0 support for RZ/G3E Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 01/21] phy: renesas: rcar-gen3-usb2: Use devm_pm_runtime_enable() Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 02/21] phy: renesas: rcar-gen3-usb2: Factor out VBUS control logic Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 03/21] reset: rzv2h-usb2phy: Keep PHY clock enabled for entire device lifetime Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 04/21] dt-bindings: reset: renesas,rzv2h-usb2phy: Document VBUS_SEL mux Tommaso Merciai
2025-11-10 18:56   ` Conor Dooley
2025-11-10 22:43     ` Tommaso Merciai
2025-11-11 17:49       ` Conor Dooley
2025-11-12 16:37         ` Rob Herring
2025-11-12 18:48           ` Conor Dooley
2025-11-17  7:00   ` Krzysztof Kozlowski
2025-11-17 14:44     ` Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 05/21] mux: Add driver for Renesas RZ/V2H USB " Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 06/21] reset: rzv2h-usb2phy: Add support for VBUS mux controller registration Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 07/21] dt-bindings: phy: renesas,usb2-phy: Document USB VBUS regulator Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 08/21] dt-bindings: phy: renesas,usb2-phy: Document mux-states property Tommaso Merciai
2025-11-10 18:54   ` Conor Dooley
2025-11-10 12:08 ` [PATCH v3 09/21] phy: renesas: rcar-gen3-usb2: Add regulator for OTG VBUS control Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 10/21] phy: renesas: rcar-gen3-usb2: Use mux-state for phyrst management Tommaso Merciai
2025-11-13 19:27   ` Geert Uytterhoeven
2025-11-14  8:21     ` Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 11/21] dt-bindings: usb: renesas,usbhs: Add RZ/G3E SoC support Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 12/21] dt-bindings: phy: renesas,usb2-phy: Document RZ/G3E SoC Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 13/21] dt-bindings: reset: Document RZ/G3E USB2PHY reset Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 14/21] arm64: dts: renesas: r9a09g057: Add USB2.0 VBUS_SEL mux-controller support Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 15/21] arm64: dts: renesas: r9a09g056: " Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 16/21] arm64: dts: renesas: r9a09g056: Add USB2.0 PHY VBUS internal regulator node Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 17/21] arm64: dts: renesas: r9a09g056n48-rzv2n-evk: Enable USB2 PHY0 VBUS support Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 18/21] arm64: dts: renesas: r9a09g057: Add USB2.0 PHY VBUS internal regulator node Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 19/21] arm64: dts: renesas: r9a09g057h44-rzv2h-evk: Enable USB2 PHY0 VBUS support Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 20/21] arm64: dts: renesas: r9a09g047: Add USB2.0 support Tommaso Merciai
2025-11-10 12:08 ` [PATCH v3 21/21] arm64: dts: renesas: r9a09g047e57-smarc: Enable " Tommaso Merciai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).