public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH v3 0/2] Changes since v2: Added missing Signed-off-by tags.
@ 2026-04-16 15:38 Michele Bisogno
  2026-04-16 15:38 ` [PATCH v3 1/2] regulator: rzg2l: implement connectivity notification Michele Bisogno
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Michele Bisogno @ 2026-04-16 15:38 UTC (permalink / raw)
  To: u-boot
  Cc: marek.vasut+renesas, paul, jh80.chung, peng.fan, lukma,
	mkorpershoek, trini, Michele Bisogno

Changes since v2: Added missing Signed-off-by tags.

Technical Justification:
While the Linux driver for RZ/G2L relies on DMA, this U-Boot implementation
focuses on the PIO path. The refactoring in fifo.c to use byte-level access
(ioread8/iowrite8) is necessary to handle trailing bytes and alignment
requirements specific to the RZ/G2L bus.

Additionally, explicit reset deassertion is added to the probe sequence,
and a re-entrancy fix (usb_del_gadget_udc) is included to prevent crashes
during repeated executions of gadget commands like 'ums'.

Michele Bisogno (2):
  regulator: rzg2l: implement connectivity notification
  usb: gadget: renesas: add support for RZ/G2L SoC

 .../power/regulator/rzg2l-usbphy-regulator.c  | 10 ++++++--
 drivers/usb/gadget/rcar/common.c              | 15 ++++++++++++
 drivers/usb/gadget/rcar/fifo.c                | 23 +++++++++++--------
 3 files changed, 36 insertions(+), 12 deletions(-)

-- 
2.34.1


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

* [PATCH v3 1/2] regulator: rzg2l: implement connectivity notification
  2026-04-16 15:38 [PATCH v3 0/2] Changes since v2: Added missing Signed-off-by tags Michele Bisogno
@ 2026-04-16 15:38 ` Michele Bisogno
  2026-04-16 18:03   ` Marek Vasut
  2026-04-16 15:38 ` [PATCH v3 2/2] usb: gadget: renesas: add support for RZ/G2L SoC Michele Bisogno
  2026-04-16 18:13 ` [PATCH v3 0/2] Changes since v2: Added missing Signed-off-by tags Marek Vasut
  2 siblings, 1 reply; 6+ messages in thread
From: Michele Bisogno @ 2026-04-16 15:38 UTC (permalink / raw)
  To: u-boot
  Cc: marek.vasut+renesas, paul, jh80.chung, peng.fan, lukma,
	mkorpershoek, trini, Michele Bisogno

Implement CON_CTRL manual connectivity notification.
By setting SEL_CONNECT and CONNECT_1, the UTM+ core is notified of
connection status in peripheral mode.

Signed-off-by: Michele Bisogno <micbis.openwrt@gmail.com>
---
 drivers/power/regulator/rzg2l-usbphy-regulator.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/power/regulator/rzg2l-usbphy-regulator.c b/drivers/power/regulator/rzg2l-usbphy-regulator.c
index 0354555d0b5..03f8dec4f08 100644
--- a/drivers/power/regulator/rzg2l-usbphy-regulator.c
+++ b/drivers/power/regulator/rzg2l-usbphy-regulator.c
@@ -9,16 +9,22 @@
 #include <renesas/rzg2l-usbphy.h>
 
 #define VBENCTL			0x03c
+#define CON_CTRL		0x020
 #define VBENCTL_VBUS_SEL	BIT(0)
+#define SEL_CONNECT		BIT(4)
+#define CONNECT_1		BIT(0)
 
 static int rzg2l_usbphy_regulator_set_enable(struct udevice *dev, bool enable)
 {
 	struct rzg2l_usbphy_ctrl_priv *priv = dev_get_priv(dev->parent);
 
-	if (enable)
+	if (enable) {
 		clrbits_le32(priv->regs + VBENCTL, VBENCTL_VBUS_SEL);
-	else
+		setbits_le32(priv->regs + CON_CTRL, SEL_CONNECT | CONNECT_1);
+	} else {
 		setbits_le32(priv->regs + VBENCTL, VBENCTL_VBUS_SEL);
+		clrbits_le32(priv->regs + CON_CTRL, SEL_CONNECT | CONNECT_1);
+	}
 
 	return 0;
 }
-- 
2.34.1


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

* [PATCH v3 2/2] usb: gadget: renesas: add support for RZ/G2L SoC
  2026-04-16 15:38 [PATCH v3 0/2] Changes since v2: Added missing Signed-off-by tags Michele Bisogno
  2026-04-16 15:38 ` [PATCH v3 1/2] regulator: rzg2l: implement connectivity notification Michele Bisogno
@ 2026-04-16 15:38 ` Michele Bisogno
  2026-04-16 18:11   ` Marek Vasut
  2026-04-16 18:13 ` [PATCH v3 0/2] Changes since v2: Added missing Signed-off-by tags Marek Vasut
  2 siblings, 1 reply; 6+ messages in thread
From: Michele Bisogno @ 2026-04-16 15:38 UTC (permalink / raw)
  To: u-boot
  Cc: marek.vasut+renesas, paul, jh80.chung, peng.fan, lukma,
	mkorpershoek, trini, Michele Bisogno

common: Add "renesas,rzg2l-usbhs" compatible and support
reset deassertion. Fix a re-entrancy bug by calling usb_del_gadget_udc()
in the remove callback to prevent stale UDC list entries.
fifo: Refactor PIO push/pop logic to handle trailing bytes
using iowrite8/ioread8. This ensures correct data alignment on
RZ/G2L and simplifies the data transfer loop.

Signed-off-by: Michele Bisogno <micbis.openwrt@gmail.com>
---
 drivers/usb/gadget/rcar/common.c | 15 +++++++++++++++
 drivers/usb/gadget/rcar/fifo.c   | 23 +++++++++++++----------
 2 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/gadget/rcar/common.c b/drivers/usb/gadget/rcar/common.c
index 2ba022a3f2c..1f266ae5ac9 100644
--- a/drivers/usb/gadget/rcar/common.c
+++ b/drivers/usb/gadget/rcar/common.c
@@ -16,6 +16,7 @@
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 #include <usb.h>
+#include <reset.h>
 
 #include "common.h"
 
@@ -397,6 +398,7 @@ static int usbhs_udc_otg_probe(struct udevice *dev)
 	struct usbhs_priv_otg_data *priv = dev_get_priv(dev);
 	struct usb_gadget *gadget;
 	struct clk_bulk clk_bulk;
+	struct reset_ctl_bulk reset_bulk;
 	int ret = -EINVAL;
 
 	priv->base = dev_read_addr_ptr(dev);
@@ -411,6 +413,14 @@ static int usbhs_udc_otg_probe(struct udevice *dev)
 	if (ret)
 		return ret;
 
+	ret = reset_get_bulk(dev, &reset_bulk);
+	if (ret)
+		return ret;
+
+	ret = reset_deassert_bulk(&reset_bulk);
+	if (ret)
+		return ret;
+
 	clrsetbits_le32(priv->base + UGCTRL2, UGCTRL2_USB0SEL_MASK, UGCTRL2_USB0SEL_EHCI);
 	clrsetbits_le16(priv->base + LPSTS, LPSTS_SUSPM, LPSTS_SUSPM);
 
@@ -447,7 +457,11 @@ err_clk:
 static int usbhs_udc_otg_remove(struct udevice *dev)
 {
 	struct usbhs_priv_otg_data *priv = dev_get_priv(dev);
+	struct usb_gadget *gadget;
 
+	gadget = usbhsg_get_gadget(&priv->usbhs_priv);
+	if (gadget)
+		usb_del_gadget_udc(gadget);
 	usbhs_rcar3_power_ctrl(&priv->usbhs_priv, false);
 	usbhs_mod_remove(&priv->usbhs_priv);
 	usbhs_fifo_remove(&priv->usbhs_priv);
@@ -460,6 +474,7 @@ static int usbhs_udc_otg_remove(struct udevice *dev)
 
 static const struct udevice_id usbhs_udc_otg_ids[] = {
 	{ .compatible = "renesas,rcar-gen3-usbhs" },
+	{ .compatible = "renesas,rzg2l-usbhs"},
 	{},
 };
 
diff --git a/drivers/usb/gadget/rcar/fifo.c b/drivers/usb/gadget/rcar/fifo.c
index 6016b2987d5..b5340b4d860 100644
--- a/drivers/usb/gadget/rcar/fifo.c
+++ b/drivers/usb/gadget/rcar/fifo.c
@@ -535,18 +535,21 @@ static int usbhsf_pio_try_push(struct usbhs_pkt *pkt, int *is_done)
 	 * 32-bit access only
 	 */
 	if (len >= 4 && !((unsigned long)buf & 0x03)) {
-		iowrite32_rep(addr, buf, len / 4);
-		len %= 4;
-		buf += total_len - len;
+		int words = len / 4;
+
+		iowrite32_rep(addr, buf, words);
+		buf += (words * 4);
+		len -= (words * 4);
 	}
 
 	/* the rest operation */
-	if (usbhs_get_dparam(priv, cfifo_byte_addr)) {
-		for (i = 0; i < len; i++)
-			iowrite8(buf[i], addr + (i & 0x03));
-	} else {
-		for (i = 0; i < len; i++)
-			iowrite8(buf[i], addr + (0x03 - (i & 0x03)));
+	if (len > 0) {
+		if (len == 2 && !((unsigned long)buf & 0x01)) {
+			iowrite16(*(u16 *)buf, addr);
+		} else {
+			for (i = 0; i < len; i++)
+				iowrite8(buf[i], addr);
+		}
 	}
 
 	/*
@@ -716,7 +719,7 @@ static int usbhsf_pio_try_pop(struct usbhs_pkt *pkt, int *is_done)
 		if (!(i & 0x03))
 			data = ioread32(addr);
 
-		buf[i] = (data >> ((i & 0x03) * 8)) & 0xff;
+		buf[i] = ioread8(addr);
 	}
 
 usbhs_fifo_read_end:
-- 
2.34.1


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

* Re: [PATCH v3 1/2] regulator: rzg2l: implement connectivity notification
  2026-04-16 15:38 ` [PATCH v3 1/2] regulator: rzg2l: implement connectivity notification Michele Bisogno
@ 2026-04-16 18:03   ` Marek Vasut
  0 siblings, 0 replies; 6+ messages in thread
From: Marek Vasut @ 2026-04-16 18:03 UTC (permalink / raw)
  To: Michele Bisogno, u-boot, Biju Das, Geert Uytterhoeven
  Cc: paul, jh80.chung, peng.fan, lukma, mkorpershoek, trini

On 4/16/26 5:38 PM, Michele Bisogno wrote:
> Implement CON_CTRL manual connectivity notification.
> By setting SEL_CONNECT and CONNECT_1, the UTM+ core is notified of
> connection status in peripheral mode.
> 
> Signed-off-by: Michele Bisogno <micbis.openwrt@gmail.com>
> ---
>   drivers/power/regulator/rzg2l-usbphy-regulator.c | 10 ++++++++--
>   1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/power/regulator/rzg2l-usbphy-regulator.c b/drivers/power/regulator/rzg2l-usbphy-regulator.c
> index 0354555d0b5..03f8dec4f08 100644
> --- a/drivers/power/regulator/rzg2l-usbphy-regulator.c
> +++ b/drivers/power/regulator/rzg2l-usbphy-regulator.c
> @@ -9,16 +9,22 @@
>   #include <renesas/rzg2l-usbphy.h>
>   
>   #define VBENCTL			0x03c
> +#define CON_CTRL		0x020
>   #define VBENCTL_VBUS_SEL	BIT(0)
> +#define SEL_CONNECT		BIT(4)
> +#define CONNECT_1		BIT(0)
>   
>   static int rzg2l_usbphy_regulator_set_enable(struct udevice *dev, bool enable)
>   {
>   	struct rzg2l_usbphy_ctrl_priv *priv = dev_get_priv(dev->parent);
>   
> -	if (enable)
> +	if (enable) {
>   		clrbits_le32(priv->regs + VBENCTL, VBENCTL_VBUS_SEL);
> -	else
> +		setbits_le32(priv->regs + CON_CTRL, SEL_CONNECT | CONNECT_1);
> +	} else {
>   		setbits_le32(priv->regs + VBENCTL, VBENCTL_VBUS_SEL);
> +		clrbits_le32(priv->regs + CON_CTRL, SEL_CONNECT | CONNECT_1);
> +	}
>   
>   	return 0;
>   }

Why does Linux not need a change like this to 
drivers/reset/reset-rzg2l-usbphy-ctrl.c ?

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

* Re: [PATCH v3 2/2] usb: gadget: renesas: add support for RZ/G2L SoC
  2026-04-16 15:38 ` [PATCH v3 2/2] usb: gadget: renesas: add support for RZ/G2L SoC Michele Bisogno
@ 2026-04-16 18:11   ` Marek Vasut
  0 siblings, 0 replies; 6+ messages in thread
From: Marek Vasut @ 2026-04-16 18:11 UTC (permalink / raw)
  To: Michele Bisogno, u-boot, Biju Das, Geert Uytterhoeven
  Cc: paul, jh80.chung, peng.fan, lukma, mkorpershoek, trini

On 4/16/26 5:38 PM, Michele Bisogno wrote:
> common: Add "renesas,rzg2l-usbhs" compatible and support
> reset deassertion. Fix a re-entrancy bug by calling usb_del_gadget_udc()
> in the remove callback to prevent stale UDC list entries.
> fifo: Refactor PIO push/pop logic to handle trailing bytes
> using iowrite8/ioread8. This ensures correct data alignment on
> RZ/G2L and simplifies the data transfer loop.

This looks like two separate changes.

> Signed-off-by: Michele Bisogno <micbis.openwrt@gmail.com>
> ---
>   drivers/usb/gadget/rcar/common.c | 15 +++++++++++++++
>   drivers/usb/gadget/rcar/fifo.c   | 23 +++++++++++++----------
>   2 files changed, 28 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/usb/gadget/rcar/common.c b/drivers/usb/gadget/rcar/common.c
> index 2ba022a3f2c..1f266ae5ac9 100644
> --- a/drivers/usb/gadget/rcar/common.c
> +++ b/drivers/usb/gadget/rcar/common.c
> @@ -16,6 +16,7 @@
>   #include <linux/usb/ch9.h>
>   #include <linux/usb/gadget.h>
>   #include <usb.h>
> +#include <reset.h>
>   
>   #include "common.h"
>   
> @@ -397,6 +398,7 @@ static int usbhs_udc_otg_probe(struct udevice *dev)
>   	struct usbhs_priv_otg_data *priv = dev_get_priv(dev);
>   	struct usb_gadget *gadget;
>   	struct clk_bulk clk_bulk;
> +	struct reset_ctl_bulk reset_bulk;
>   	int ret = -EINVAL;
>   
>   	priv->base = dev_read_addr_ptr(dev);
> @@ -411,6 +413,14 @@ static int usbhs_udc_otg_probe(struct udevice *dev)
>   	if (ret)
>   		return ret;
>   
> +	ret = reset_get_bulk(dev, &reset_bulk);
> +	if (ret)
> +		return ret;
> +
> +	ret = reset_deassert_bulk(&reset_bulk);
> +	if (ret)
> +		return ret;

This reset handling should be a separate patch.

>   	clrsetbits_le32(priv->base + UGCTRL2, UGCTRL2_USB0SEL_MASK, UGCTRL2_USB0SEL_EHCI);
>   	clrsetbits_le16(priv->base + LPSTS, LPSTS_SUSPM, LPSTS_SUSPM);
>   
> @@ -447,7 +457,11 @@ err_clk:
>   static int usbhs_udc_otg_remove(struct udevice *dev)
>   {
>   	struct usbhs_priv_otg_data *priv = dev_get_priv(dev);
> +	struct usb_gadget *gadget;
>   
> +	gadget = usbhsg_get_gadget(&priv->usbhs_priv);
> +	if (gadget)
> +		usb_del_gadget_udc(gadget);

This also looks like a separate fix for some other issue ?

Also, reset_assert/put_bulk() is missing here ?

>   	usbhs_rcar3_power_ctrl(&priv->usbhs_priv, false);
>   	usbhs_mod_remove(&priv->usbhs_priv);
>   	usbhs_fifo_remove(&priv->usbhs_priv);
> @@ -460,6 +474,7 @@ static int usbhs_udc_otg_remove(struct udevice *dev)
>   
>   static const struct udevice_id usbhs_udc_otg_ids[] = {
>   	{ .compatible = "renesas,rcar-gen3-usbhs" },
> +	{ .compatible = "renesas,rzg2l-usbhs"},

Separate patch please, this should be last, after all the fixes.

>   	{},
>   };
>   
> diff --git a/drivers/usb/gadget/rcar/fifo.c b/drivers/usb/gadget/rcar/fifo.c
> index 6016b2987d5..b5340b4d860 100644
> --- a/drivers/usb/gadget/rcar/fifo.c

This whole FIFO part should also be a separate patch, and it should also 
be implemented for the Linux kernel, otherwise the two code bases will 
diverge. Please submit a matching patch to Linux.

> +++ b/drivers/usb/gadget/rcar/fifo.c
> @@ -535,18 +535,21 @@ static int usbhsf_pio_try_push(struct usbhs_pkt *pkt, int *is_done)
>   	 * 32-bit access only
>   	 */
>   	if (len >= 4 && !((unsigned long)buf & 0x03)) {
> -		iowrite32_rep(addr, buf, len / 4);
> -		len %= 4;
> -		buf += total_len - len;
> +		int words = len / 4;
> +
> +		iowrite32_rep(addr, buf, words);
> +		buf += (words * 4);
> +		len -= (words * 4);
>   	}
>   
>   	/* the rest operation */
> -	if (usbhs_get_dparam(priv, cfifo_byte_addr)) {
> -		for (i = 0; i < len; i++)
> -			iowrite8(buf[i], addr + (i & 0x03));
> -	} else {
> -		for (i = 0; i < len; i++)
> -			iowrite8(buf[i], addr + (0x03 - (i & 0x03)));
> +	if (len > 0) {
> +		if (len == 2 && !((unsigned long)buf & 0x01)) {
> +			iowrite16(*(u16 *)buf, addr);
> +		} else {
> +			for (i = 0; i < len; i++)
> +				iowrite8(buf[i], addr);
> +		}
>   	}
>   
>   	/*
> @@ -716,7 +719,7 @@ static int usbhsf_pio_try_pop(struct usbhs_pkt *pkt, int *is_done)
>   		if (!(i & 0x03))
>   			data = ioread32(addr);
>   
> -		buf[i] = (data >> ((i & 0x03) * 8)) & 0xff;
> +		buf[i] = ioread8(addr);
>   	}
>   
>   usbhs_fifo_read_end:

[...]

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

* Re: [PATCH v3 0/2] Changes since v2: Added missing Signed-off-by tags.
  2026-04-16 15:38 [PATCH v3 0/2] Changes since v2: Added missing Signed-off-by tags Michele Bisogno
  2026-04-16 15:38 ` [PATCH v3 1/2] regulator: rzg2l: implement connectivity notification Michele Bisogno
  2026-04-16 15:38 ` [PATCH v3 2/2] usb: gadget: renesas: add support for RZ/G2L SoC Michele Bisogno
@ 2026-04-16 18:13 ` Marek Vasut
  2 siblings, 0 replies; 6+ messages in thread
From: Marek Vasut @ 2026-04-16 18:13 UTC (permalink / raw)
  To: Michele Bisogno, u-boot, Biju Das, Geert Uytterhoeven
  Cc: paul, jh80.chung, peng.fan, lukma, mkorpershoek, trini

On 4/16/26 5:38 PM, Michele Bisogno wrote:
> Changes since v2: Added missing Signed-off-by tags.

The subject should describe what this series does, it shouldn't be a 
changelog.

> Technical Justification:
> While the Linux driver for RZ/G2L relies on DMA, this U-Boot implementation
> focuses on the PIO path. The refactoring in fifo.c to use byte-level access
> (ioread8/iowrite8) is necessary to handle trailing bytes and alignment
> requirements specific to the RZ/G2L bus.

Can you please clarify exactly what kind of problem are you hitting with 
the current code and how is it triggered ? Details please.

> Additionally, explicit reset deassertion is added to the probe sequence,
> and a re-entrancy fix (usb_del_gadget_udc) is included to prevent crashes
> during repeated executions of gadget commands like 'ums'.
> 
> Michele Bisogno (2):
>    regulator: rzg2l: implement connectivity notification
>    usb: gadget: renesas: add support for RZ/G2L SoC
> 
>   .../power/regulator/rzg2l-usbphy-regulator.c  | 10 ++++++--
>   drivers/usb/gadget/rcar/common.c              | 15 ++++++++++++
>   drivers/usb/gadget/rcar/fifo.c                | 23 +++++++++++--------
>   3 files changed, 36 insertions(+), 12 deletions(-)
[...]

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

end of thread, other threads:[~2026-04-17 12:45 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-16 15:38 [PATCH v3 0/2] Changes since v2: Added missing Signed-off-by tags Michele Bisogno
2026-04-16 15:38 ` [PATCH v3 1/2] regulator: rzg2l: implement connectivity notification Michele Bisogno
2026-04-16 18:03   ` Marek Vasut
2026-04-16 15:38 ` [PATCH v3 2/2] usb: gadget: renesas: add support for RZ/G2L SoC Michele Bisogno
2026-04-16 18:11   ` Marek Vasut
2026-04-16 18:13 ` [PATCH v3 0/2] Changes since v2: Added missing Signed-off-by tags Marek Vasut

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox