[PATCH 00/11] usb: gadget: Introduce handle_interrupts ops to USB_GADGET_GENERIC uclass

Introduce .ops for USB_GADGET_GENERIC uclass. The first new ops is .handle_interrupts which must be implemented by DM capable USB gadget controller drivers and must implement interrupt handling similar to dm_usb_gadget_handle_interrupts(). For DM USB gadget drivers this is a replacement for dm_usb_gadget_handle_interrupts(). Convert the DM USB gadget drivers to this new ops instead.
DEPENDS: https://patchwork.ozlabs.org/project/uboot/list/?series=410150
Marek Vasut (11): usb: gadget: Introduce handle_interrupts ops to USB_GADGET_GENERIC uclass usb: gadget: cdns3: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: dwc2: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: dwc3: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: max3420: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: mtu3: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: omap2430: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: musb: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: ux500: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: sandbox: Drop dm_usb_gadget_handle_interrupts() usb: gadget: Mark dm_usb_gadget_handle_interrupts as non-weak for DM_USB_GADGET
drivers/usb/cdns3/core.c | 24 ++++++++++++++++++++++++ drivers/usb/cdns3/gadget-export.h | 2 ++ drivers/usb/cdns3/gadget.c | 11 +---------- drivers/usb/dwc3/dwc3-generic.c | 23 ++++++++++++++--------- drivers/usb/dwc3/dwc3-layerscape.c | 21 +++++++++++++-------- drivers/usb/gadget/dwc2_udc_otg.c | 20 +++++++++++++++----- drivers/usb/gadget/max3420_udc.c | 19 ++++++++++++------- drivers/usb/gadget/udc/udc-uclass.c | 24 ++++++++++++++++++++++++ drivers/usb/host/usb-sandbox.c | 7 +------ drivers/usb/mtu3/mtu3_plat.c | 23 ++++++++++++++--------- drivers/usb/musb-new/omap2430.c | 26 ++++++++++++++++---------- drivers/usb/musb-new/ti-musb.c | 23 ++++++++++++++--------- drivers/usb/musb-new/ux500.c | 22 ++++++++++++++-------- include/linux/usb/gadget.h | 8 ++++++++ 14 files changed, 172 insertions(+), 81 deletions(-)
--- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de

Introduce .ops for USB_GADGET_GENERIC uclass. The first new ops is .handle_interrupts which must be implemented by DM capable USB gadget controller drivers and must implement interrupt handling similar to dm_usb_gadget_handle_interrupts(). This patch currently provides weak dm_usb_gadget_handle_interrupts() implementation which is overriden by the drivers, but this will be removed once conversion to handle_interrupts callback is complete.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/gadget/udc/udc-uclass.c | 24 ++++++++++++++++++++++++ include/linux/usb/gadget.h | 8 ++++++++ 2 files changed, 32 insertions(+)
diff --git a/drivers/usb/gadget/udc/udc-uclass.c b/drivers/usb/gadget/udc/udc-uclass.c index 5dc23a55bb5..2320039fe3b 100644 --- a/drivers/usb/gadget/udc/udc-uclass.c +++ b/drivers/usb/gadget/udc/udc-uclass.c @@ -12,6 +12,25 @@ #include <linux/usb/gadget.h>
#if CONFIG_IS_ENABLED(DM_USB_GADGET) +static inline const struct usb_gadget_generic_ops * +usb_gadget_generic_dev_ops(struct udevice *dev) +{ + return (const struct usb_gadget_generic_ops *)dev->driver->ops; +} + +__weak int dm_usb_gadget_handle_interrupts(struct udevice *dev) +{ + const struct usb_gadget_generic_ops *ops; + + ops = usb_gadget_generic_dev_ops(dev); + if (!ops) + return -EFAULT; + if (!ops->handle_interrupts) + return -ENOSYS; + + return ops->handle_interrupts(dev); +} + int udc_device_get_by_index(int index, struct udevice **udev) { struct udevice *dev = NULL; @@ -54,6 +73,11 @@ int udc_device_put(struct udevice *udev) { return board_usb_cleanup(legacy_index, USB_INIT_DEVICE); } + +__weak int dm_usb_gadget_handle_interrupts(struct udevice *dev) +{ + return 0; +} #endif
#if CONFIG_IS_ENABLED(DM) diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 36572be89e6..cf2161603d6 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -970,6 +970,14 @@ extern void usb_ep_autoconfig_reset(struct usb_gadget *);
extern int dm_usb_gadget_handle_interrupts(struct udevice *);
+/** + * struct usb_gadget_generic_ops - The functions that a gadget driver must implement. + * @handle_interrupts: Handle UDC interrupts. + */ +struct usb_gadget_generic_ops { + int (*handle_interrupts)(struct udevice *udevice); +}; + /** * udc_device_get_by_index() - Get UDC udevice by index * @index: UDC device index

Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Introduce .ops for USB_GADGET_GENERIC uclass. The first new ops is .handle_interrupts which must be implemented by DM capable USB gadget controller drivers and must implement interrupt handling similar to dm_usb_gadget_handle_interrupts(). This patch currently provides weak dm_usb_gadget_handle_interrupts() implementation which is overriden by the drivers, but this will be removed once conversion to handle_interrupts callback is complete.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/gadget/udc/udc-uclass.c | 24 ++++++++++++++++++++++++ include/linux/usb/gadget.h | 8 ++++++++ 2 files changed, 32 insertions(+)
diff --git a/drivers/usb/gadget/udc/udc-uclass.c b/drivers/usb/gadget/udc/udc-uclass.c index 5dc23a55bb5..2320039fe3b 100644 --- a/drivers/usb/gadget/udc/udc-uclass.c +++ b/drivers/usb/gadget/udc/udc-uclass.c @@ -12,6 +12,25 @@ #include <linux/usb/gadget.h>
#if CONFIG_IS_ENABLED(DM_USB_GADGET) +static inline const struct usb_gadget_generic_ops * +usb_gadget_generic_dev_ops(struct udevice *dev) +{
- return (const struct usb_gadget_generic_ops *)dev->driver->ops;
+}
+__weak int dm_usb_gadget_handle_interrupts(struct udevice *dev) +{
- const struct usb_gadget_generic_ops *ops;
- ops = usb_gadget_generic_dev_ops(dev);
- if (!ops)
return -EFAULT;
- if (!ops->handle_interrupts)
return -ENOSYS;
- return ops->handle_interrupts(dev);
+}
int udc_device_get_by_index(int index, struct udevice **udev) { struct udevice *dev = NULL; @@ -54,6 +73,11 @@ int udc_device_put(struct udevice *udev) { return board_usb_cleanup(legacy_index, USB_INIT_DEVICE); }
+__weak int dm_usb_gadget_handle_interrupts(struct udevice *dev) +{
- return 0;
+} #endif
#if CONFIG_IS_ENABLED(DM) diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 36572be89e6..cf2161603d6 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -970,6 +970,14 @@ extern void usb_ep_autoconfig_reset(struct usb_gadget *);
extern int dm_usb_gadget_handle_interrupts(struct udevice *);
+/**
- struct usb_gadget_generic_ops - The functions that a gadget driver must implement.
- @handle_interrupts: Handle UDC interrupts.
- */
+struct usb_gadget_generic_ops {
- int (*handle_interrupts)(struct udevice *udevice);
+};
/**
- udc_device_get_by_index() - Get UDC udevice by index
- @index: UDC device index
-- 2.43.0

Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Keep the dm_usb_gadget_handle_interrupts() in this driver for non-DM case for now, until this driver gets fully converted to DM USB gadget.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/cdns3/core.c | 24 ++++++++++++++++++++++++ drivers/usb/cdns3/gadget-export.h | 2 ++ drivers/usb/cdns3/gadget.c | 11 +---------- 3 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c index b4e931646b8..cbe06a9e7b6 100644 --- a/drivers/usb/cdns3/core.c +++ b/drivers/usb/cdns3/core.c @@ -20,6 +20,7 @@ #include <linux/bug.h> #include <linux/kernel.h> #include <linux/io.h> +#include <linux/usb/gadget.h> #include <usb.h> #include <usb/xhci.h>
@@ -462,15 +463,38 @@ static int cdns3_gadget_remove(struct udevice *dev) return cdns3_remove(cdns); }
+static int cdns3_gadget_handle_interrupts(struct udevice *dev) +{ + struct cdns3 *cdns = dev_get_priv(dev); + + cdns3_gadget_uboot_handle_interrupt(cdns); + + return 0; +} + +static const struct usb_gadget_generic_ops cdns3_gadget_ops = { + .handle_interrupts = cdns3_gadget_handle_interrupts, +}; + U_BOOT_DRIVER(cdns_usb3_peripheral) = { .name = "cdns-usb3-peripheral", .id = UCLASS_USB_GADGET_GENERIC, .of_match = cdns3_ids, + .ops = &cdns3_gadget_ops, .probe = cdns3_gadget_probe, .remove = cdns3_gadget_remove, .priv_auto = sizeof(struct cdns3_gadget_priv), .flags = DM_FLAG_ALLOC_PRIV_DMA, }; +#else +int dm_usb_gadget_handle_interrupts(struct udevice *dev) +{ + struct cdns3 *cdns = dev_get_priv(dev); + + cdns3_gadget_uboot_handle_interrupt(cdns); + + return 0; +} #endif
#if defined(CONFIG_SPL_USB_HOST) || \ diff --git a/drivers/usb/cdns3/gadget-export.h b/drivers/usb/cdns3/gadget-export.h index 577469eee96..b3fd7c53039 100644 --- a/drivers/usb/cdns3/gadget-export.h +++ b/drivers/usb/cdns3/gadget-export.h @@ -25,4 +25,6 @@ static inline void cdns3_gadget_exit(struct cdns3 *cdns) { }
#endif
+void cdns3_gadget_uboot_handle_interrupt(struct cdns3 *cdns); + #endif /* __LINUX_CDNS3_GADGET_EXPORT */ diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c index d11175dc5b6..32b2c412068 100644 --- a/drivers/usb/cdns3/gadget.c +++ b/drivers/usb/cdns3/gadget.c @@ -2755,19 +2755,10 @@ int cdns3_gadget_init(struct cdns3 *cdns) * * Handles ep0 and gadget interrupt */ -static void cdns3_gadget_uboot_handle_interrupt(struct cdns3 *cdns) +void cdns3_gadget_uboot_handle_interrupt(struct cdns3 *cdns) { int ret = cdns3_device_irq_handler(0, cdns);
if (ret == IRQ_WAKE_THREAD) cdns3_device_thread_irq_handler(0, cdns); } - -int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{ - struct cdns3 *cdns = dev_get_priv(dev); - - cdns3_gadget_uboot_handle_interrupt(cdns); - - return 0; -}

Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Keep the dm_usb_gadget_handle_interrupts() in this driver for non-DM case for now, until this driver gets fully converted to DM USB gadget.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/cdns3/core.c | 24 ++++++++++++++++++++++++ drivers/usb/cdns3/gadget-export.h | 2 ++ drivers/usb/cdns3/gadget.c | 11 +---------- 3 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c index b4e931646b8..cbe06a9e7b6 100644 --- a/drivers/usb/cdns3/core.c +++ b/drivers/usb/cdns3/core.c @@ -20,6 +20,7 @@ #include <linux/bug.h> #include <linux/kernel.h> #include <linux/io.h> +#include <linux/usb/gadget.h> #include <usb.h> #include <usb/xhci.h>
@@ -462,15 +463,38 @@ static int cdns3_gadget_remove(struct udevice *dev) return cdns3_remove(cdns); }
+static int cdns3_gadget_handle_interrupts(struct udevice *dev) +{
- struct cdns3 *cdns = dev_get_priv(dev);
- cdns3_gadget_uboot_handle_interrupt(cdns);
- return 0;
+}
+static const struct usb_gadget_generic_ops cdns3_gadget_ops = {
- .handle_interrupts = cdns3_gadget_handle_interrupts,
+};
U_BOOT_DRIVER(cdns_usb3_peripheral) = { .name = "cdns-usb3-peripheral", .id = UCLASS_USB_GADGET_GENERIC, .of_match = cdns3_ids,
- .ops = &cdns3_gadget_ops, .probe = cdns3_gadget_probe, .remove = cdns3_gadget_remove, .priv_auto = sizeof(struct cdns3_gadget_priv), .flags = DM_FLAG_ALLOC_PRIV_DMA,
}; +#else +int dm_usb_gadget_handle_interrupts(struct udevice *dev) +{
- struct cdns3 *cdns = dev_get_priv(dev);
- cdns3_gadget_uboot_handle_interrupt(cdns);
- return 0;
+} #endif
#if defined(CONFIG_SPL_USB_HOST) || \ diff --git a/drivers/usb/cdns3/gadget-export.h b/drivers/usb/cdns3/gadget-export.h index 577469eee96..b3fd7c53039 100644 --- a/drivers/usb/cdns3/gadget-export.h +++ b/drivers/usb/cdns3/gadget-export.h @@ -25,4 +25,6 @@ static inline void cdns3_gadget_exit(struct cdns3 *cdns) { }
#endif
+void cdns3_gadget_uboot_handle_interrupt(struct cdns3 *cdns);
#endif /* __LINUX_CDNS3_GADGET_EXPORT */ diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c index d11175dc5b6..32b2c412068 100644 --- a/drivers/usb/cdns3/gadget.c +++ b/drivers/usb/cdns3/gadget.c @@ -2755,19 +2755,10 @@ int cdns3_gadget_init(struct cdns3 *cdns)
- Handles ep0 and gadget interrupt
*/ -static void cdns3_gadget_uboot_handle_interrupt(struct cdns3 *cdns) +void cdns3_gadget_uboot_handle_interrupt(struct cdns3 *cdns) { int ret = cdns3_device_irq_handler(0, cdns);
if (ret == IRQ_WAKE_THREAD) cdns3_device_thread_irq_handler(0, cdns); }
-int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{
- struct cdns3 *cdns = dev_get_priv(dev);
- cdns3_gadget_uboot_handle_interrupt(cdns);
- return 0;
-}
2.43.0

Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/gadget/dwc2_udc_otg.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c index 6bd395a6235..7e9dd6f4268 100644 --- a/drivers/usb/gadget/dwc2_udc_otg.c +++ b/drivers/usb/gadget/dwc2_udc_otg.c @@ -941,11 +941,6 @@ int dwc2_udc_handle_interrupt(void) return 0; }
-int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{ - return dwc2_udc_handle_interrupt(); -} - #if CONFIG_IS_ENABLED(DM_USB_GADGET) struct dwc2_priv_data { struct clk_bulk clks; @@ -1173,6 +1168,15 @@ static int dwc2_udc_otg_remove(struct udevice *dev) return dm_scan_fdt_dev(dev); }
+static int dwc2_gadget_handle_interrupts(struct udevice *dev) +{ + return dwc2_udc_handle_interrupt(); +} + +static const struct usb_gadget_generic_ops dwc2_gadget_ops = { + .handle_interrupts = dwc2_gadget_handle_interrupts, +}; + static const struct udevice_id dwc2_udc_otg_ids[] = { { .compatible = "snps,dwc2" }, { .compatible = "brcm,bcm2835-usb" }, @@ -1185,6 +1189,7 @@ U_BOOT_DRIVER(dwc2_udc_otg) = { .name = "dwc2-udc-otg", .id = UCLASS_USB_GADGET_GENERIC, .of_match = dwc2_udc_otg_ids, + .ops = &dwc2_gadget_ops, .of_to_plat = dwc2_udc_otg_of_to_plat, .probe = dwc2_udc_otg_probe, .remove = dwc2_udc_otg_remove, @@ -1200,4 +1205,9 @@ int dwc2_udc_B_session_valid(struct udevice *dev)
return readl(&usbotg_reg->gotgctl) & B_SESSION_VALID; } +#else +int dm_usb_gadget_handle_interrupts(struct udevice *dev) +{ + return dwc2_udc_handle_interrupt(); +} #endif /* CONFIG_IS_ENABLED(DM_USB_GADGET) */

Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/gadget/dwc2_udc_otg.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c index 6bd395a6235..7e9dd6f4268 100644 --- a/drivers/usb/gadget/dwc2_udc_otg.c +++ b/drivers/usb/gadget/dwc2_udc_otg.c @@ -941,11 +941,6 @@ int dwc2_udc_handle_interrupt(void) return 0; }
-int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{
- return dwc2_udc_handle_interrupt();
-}
#if CONFIG_IS_ENABLED(DM_USB_GADGET) struct dwc2_priv_data { struct clk_bulk clks; @@ -1173,6 +1168,15 @@ static int dwc2_udc_otg_remove(struct udevice *dev) return dm_scan_fdt_dev(dev); }
+static int dwc2_gadget_handle_interrupts(struct udevice *dev) +{
- return dwc2_udc_handle_interrupt();
+}
+static const struct usb_gadget_generic_ops dwc2_gadget_ops = {
- .handle_interrupts = dwc2_gadget_handle_interrupts,
+};
static const struct udevice_id dwc2_udc_otg_ids[] = { { .compatible = "snps,dwc2" }, { .compatible = "brcm,bcm2835-usb" }, @@ -1185,6 +1189,7 @@ U_BOOT_DRIVER(dwc2_udc_otg) = { .name = "dwc2-udc-otg", .id = UCLASS_USB_GADGET_GENERIC, .of_match = dwc2_udc_otg_ids,
- .ops = &dwc2_gadget_ops, .of_to_plat = dwc2_udc_otg_of_to_plat, .probe = dwc2_udc_otg_probe, .remove = dwc2_udc_otg_remove,
@@ -1200,4 +1205,9 @@ int dwc2_udc_B_session_valid(struct udevice *dev)
return readl(&usbotg_reg->gotgctl) & B_SESSION_VALID; } +#else +int dm_usb_gadget_handle_interrupts(struct udevice *dev) +{
- return dwc2_udc_handle_interrupt();
+}
#endif /* CONFIG_IS_ENABLED(DM_USB_GADGET) */
2.43.0

Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/dwc3/dwc3-generic.c | 23 ++++++++++++++--------- drivers/usb/dwc3/dwc3-layerscape.c | 21 +++++++++++++-------- 2 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c index 8db678eb85d..731ede2fead 100644 --- a/drivers/usb/dwc3/dwc3-generic.c +++ b/drivers/usb/dwc3/dwc3-generic.c @@ -194,34 +194,39 @@ static int dwc3_generic_of_to_plat(struct udevice *dev) }
#if CONFIG_IS_ENABLED(DM_USB_GADGET) -int dm_usb_gadget_handle_interrupts(struct udevice *dev) +static int dwc3_generic_peripheral_probe(struct udevice *dev) { struct dwc3_generic_priv *priv = dev_get_priv(dev); - struct dwc3 *dwc3 = &priv->dwc3;
- dwc3_gadget_uboot_handle_interrupt(dwc3); - - return 0; + return dwc3_generic_probe(dev, priv); }
-static int dwc3_generic_peripheral_probe(struct udevice *dev) +static int dwc3_generic_peripheral_remove(struct udevice *dev) { struct dwc3_generic_priv *priv = dev_get_priv(dev);
- return dwc3_generic_probe(dev, priv); + return dwc3_generic_remove(dev, priv); }
-static int dwc3_generic_peripheral_remove(struct udevice *dev) +static int dwc3_gadget_handle_interrupts(struct udevice *dev) { struct dwc3_generic_priv *priv = dev_get_priv(dev); + struct dwc3 *dwc3 = &priv->dwc3;
- return dwc3_generic_remove(dev, priv); + dwc3_gadget_uboot_handle_interrupt(dwc3); + + return 0; }
+static const struct usb_gadget_generic_ops dwc3_gadget_ops = { + .handle_interrupts = dwc3_gadget_handle_interrupts, +}; + U_BOOT_DRIVER(dwc3_generic_peripheral) = { .name = "dwc3-generic-peripheral", .id = UCLASS_USB_GADGET_GENERIC, .of_to_plat = dwc3_generic_of_to_plat, + .ops = &dwc3_gadget_ops, .probe = dwc3_generic_peripheral_probe, .remove = dwc3_generic_peripheral_remove, .priv_auto = sizeof(struct dwc3_generic_priv), diff --git a/drivers/usb/dwc3/dwc3-layerscape.c b/drivers/usb/dwc3/dwc3-layerscape.c index ff83bf71e89..108b44c67eb 100644 --- a/drivers/usb/dwc3/dwc3-layerscape.c +++ b/drivers/usb/dwc3/dwc3-layerscape.c @@ -99,33 +99,38 @@ static int dwc3_layerscape_of_to_plat(struct udevice *dev) }
#if CONFIG_IS_ENABLED(DM_USB_GADGET) -int dm_usb_gadget_handle_interrupts(struct udevice *dev) +static int dwc3_layerscape_peripheral_probe(struct udevice *dev) { struct dwc3_layerscape_priv *priv = dev_get_priv(dev);
- dwc3_gadget_uboot_handle_interrupt(&priv->dwc3); - - return 0; + return dwc3_layerscape_probe(dev, priv); }
-static int dwc3_layerscape_peripheral_probe(struct udevice *dev) +static int dwc3_layerscape_peripheral_remove(struct udevice *dev) { struct dwc3_layerscape_priv *priv = dev_get_priv(dev);
- return dwc3_layerscape_probe(dev, priv); + return dwc3_layerscape_remove(dev, priv); }
-static int dwc3_layerscape_peripheral_remove(struct udevice *dev) +static int dwc3_layerscape_gadget_handle_interrupts(struct udevice *dev) { struct dwc3_layerscape_priv *priv = dev_get_priv(dev);
- return dwc3_layerscape_remove(dev, priv); + dwc3_gadget_uboot_handle_interrupt(&priv->dwc3); + + return 0; }
+static const struct usb_gadget_generic_ops dwc3_layerscape_gadget_ops = { + .handle_interrupts = dwc3_layerscape_gadget_handle_interrupts, +}; + U_BOOT_DRIVER(dwc3_layerscape_peripheral) = { .name = "dwc3-layerscape-peripheral", .id = UCLASS_USB_GADGET_GENERIC, .of_to_plat = dwc3_layerscape_of_to_plat, + .ops = &dwc3_layerscape_gadget_ops, .probe = dwc3_layerscape_peripheral_probe, .remove = dwc3_layerscape_peripheral_remove, .priv_auto = sizeof(struct dwc3_layerscape_priv),

Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/dwc3/dwc3-generic.c | 23 ++++++++++++++--------- drivers/usb/dwc3/dwc3-layerscape.c | 21 +++++++++++++-------- 2 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c index 8db678eb85d..731ede2fead 100644 --- a/drivers/usb/dwc3/dwc3-generic.c +++ b/drivers/usb/dwc3/dwc3-generic.c @@ -194,34 +194,39 @@ static int dwc3_generic_of_to_plat(struct udevice *dev) }
#if CONFIG_IS_ENABLED(DM_USB_GADGET) -int dm_usb_gadget_handle_interrupts(struct udevice *dev) +static int dwc3_generic_peripheral_probe(struct udevice *dev) { struct dwc3_generic_priv *priv = dev_get_priv(dev);
struct dwc3 *dwc3 = &priv->dwc3;
dwc3_gadget_uboot_handle_interrupt(dwc3);
return 0;
- return dwc3_generic_probe(dev, priv);
}
-static int dwc3_generic_peripheral_probe(struct udevice *dev) +static int dwc3_generic_peripheral_remove(struct udevice *dev) { struct dwc3_generic_priv *priv = dev_get_priv(dev);
- return dwc3_generic_probe(dev, priv);
- return dwc3_generic_remove(dev, priv);
}
-static int dwc3_generic_peripheral_remove(struct udevice *dev) +static int dwc3_gadget_handle_interrupts(struct udevice *dev) { struct dwc3_generic_priv *priv = dev_get_priv(dev);
- struct dwc3 *dwc3 = &priv->dwc3;
- return dwc3_generic_remove(dev, priv);
- dwc3_gadget_uboot_handle_interrupt(dwc3);
- return 0;
}
+static const struct usb_gadget_generic_ops dwc3_gadget_ops = {
- .handle_interrupts = dwc3_gadget_handle_interrupts,
+};
U_BOOT_DRIVER(dwc3_generic_peripheral) = { .name = "dwc3-generic-peripheral", .id = UCLASS_USB_GADGET_GENERIC, .of_to_plat = dwc3_generic_of_to_plat,
- .ops = &dwc3_gadget_ops, .probe = dwc3_generic_peripheral_probe, .remove = dwc3_generic_peripheral_remove, .priv_auto = sizeof(struct dwc3_generic_priv),
diff --git a/drivers/usb/dwc3/dwc3-layerscape.c b/drivers/usb/dwc3/dwc3-layerscape.c index ff83bf71e89..108b44c67eb 100644 --- a/drivers/usb/dwc3/dwc3-layerscape.c +++ b/drivers/usb/dwc3/dwc3-layerscape.c @@ -99,33 +99,38 @@ static int dwc3_layerscape_of_to_plat(struct udevice *dev) }
#if CONFIG_IS_ENABLED(DM_USB_GADGET) -int dm_usb_gadget_handle_interrupts(struct udevice *dev) +static int dwc3_layerscape_peripheral_probe(struct udevice *dev) { struct dwc3_layerscape_priv *priv = dev_get_priv(dev);
- dwc3_gadget_uboot_handle_interrupt(&priv->dwc3);
- return 0;
- return dwc3_layerscape_probe(dev, priv);
}
-static int dwc3_layerscape_peripheral_probe(struct udevice *dev) +static int dwc3_layerscape_peripheral_remove(struct udevice *dev) { struct dwc3_layerscape_priv *priv = dev_get_priv(dev);
- return dwc3_layerscape_probe(dev, priv);
- return dwc3_layerscape_remove(dev, priv);
}
-static int dwc3_layerscape_peripheral_remove(struct udevice *dev) +static int dwc3_layerscape_gadget_handle_interrupts(struct udevice *dev) { struct dwc3_layerscape_priv *priv = dev_get_priv(dev);
- return dwc3_layerscape_remove(dev, priv);
- dwc3_gadget_uboot_handle_interrupt(&priv->dwc3);
- return 0;
}
+static const struct usb_gadget_generic_ops dwc3_layerscape_gadget_ops = {
- .handle_interrupts = dwc3_layerscape_gadget_handle_interrupts,
+};
U_BOOT_DRIVER(dwc3_layerscape_peripheral) = { .name = "dwc3-layerscape-peripheral", .id = UCLASS_USB_GADGET_GENERIC, .of_to_plat = dwc3_layerscape_of_to_plat,
- .ops = &dwc3_layerscape_gadget_ops, .probe = dwc3_layerscape_peripheral_probe, .remove = dwc3_layerscape_peripheral_remove, .priv_auto = sizeof(struct dwc3_layerscape_priv),
-- 2.43.0

Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/gadget/max3420_udc.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/gadget/max3420_udc.c b/drivers/usb/gadget/max3420_udc.c index 5a227c0ffd9..557a1f0644e 100644 --- a/drivers/usb/gadget/max3420_udc.c +++ b/drivers/usb/gadget/max3420_udc.c @@ -808,13 +808,6 @@ static void max3420_setup_spi(struct max3420_udc *udc) spi_wr8(udc, MAX3420_REG_PINCTL, bFDUPSPI); }
-int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{ - struct max3420_udc *udc = dev_get_priv(dev); - - return max3420_irq(udc); -} - static int max3420_udc_probe(struct udevice *dev) { struct max3420_udc *udc = dev_get_priv(dev); @@ -859,6 +852,17 @@ static int max3420_udc_remove(struct udevice *dev) return 0; }
+static int max3420_gadget_handle_interrupts(struct udevice *dev) +{ + struct max3420_udc *udc = dev_get_priv(dev); + + return max3420_irq(udc); +} + +static const struct usb_gadget_generic_ops max3420_gadget_ops = { + .handle_interrupts = max3420_gadget_handle_interrupts, +}; + static const struct udevice_id max3420_ids[] = { { .compatible = "maxim,max3421-udc" }, { } @@ -868,6 +872,7 @@ U_BOOT_DRIVER(max3420_generic_udc) = { .name = "max3420-udc", .id = UCLASS_USB_GADGET_GENERIC, .of_match = max3420_ids, + .ops = &max3420_gadget_ops, .probe = max3420_udc_probe, .remove = max3420_udc_remove, .priv_auto = sizeof(struct max3420_udc),

Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/gadget/max3420_udc.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/gadget/max3420_udc.c b/drivers/usb/gadget/max3420_udc.c index 5a227c0ffd9..557a1f0644e 100644 --- a/drivers/usb/gadget/max3420_udc.c +++ b/drivers/usb/gadget/max3420_udc.c @@ -808,13 +808,6 @@ static void max3420_setup_spi(struct max3420_udc *udc) spi_wr8(udc, MAX3420_REG_PINCTL, bFDUPSPI); }
-int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{
- struct max3420_udc *udc = dev_get_priv(dev);
- return max3420_irq(udc);
-}
static int max3420_udc_probe(struct udevice *dev) { struct max3420_udc *udc = dev_get_priv(dev); @@ -859,6 +852,17 @@ static int max3420_udc_remove(struct udevice *dev) return 0; }
+static int max3420_gadget_handle_interrupts(struct udevice *dev) +{
- struct max3420_udc *udc = dev_get_priv(dev);
- return max3420_irq(udc);
+}
+static const struct usb_gadget_generic_ops max3420_gadget_ops = {
- .handle_interrupts = max3420_gadget_handle_interrupts,
+};
static const struct udevice_id max3420_ids[] = { { .compatible = "maxim,max3421-udc" }, { } @@ -868,6 +872,7 @@ U_BOOT_DRIVER(max3420_generic_udc) = { .name = "max3420-udc", .id = UCLASS_USB_GADGET_GENERIC, .of_match = max3420_ids,
- .ops = &max3420_gadget_ops, .probe = max3420_udc_probe, .remove = max3420_udc_remove, .priv_auto = sizeof(struct max3420_udc),
-- 2.43.0

Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/mtu3/mtu3_plat.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/mtu3/mtu3_plat.c b/drivers/usb/mtu3/mtu3_plat.c index ca86b58dfcd..f8e14eabfb2 100644 --- a/drivers/usb/mtu3/mtu3_plat.c +++ b/drivers/usb/mtu3/mtu3_plat.c @@ -223,15 +223,6 @@ static const struct udevice_id ssusb_of_match[] = { };
#if CONFIG_IS_ENABLED(DM_USB_GADGET) -int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{ - struct mtu3 *mtu = dev_get_priv(dev); - - mtu3_irq(0, mtu); - - return 0; -} - static int mtu3_gadget_probe(struct udevice *dev) { struct ssusb_mtk *ssusb = dev_to_ssusb(dev->parent); @@ -250,10 +241,24 @@ static int mtu3_gadget_remove(struct udevice *dev) return 0; }
+static int mtu3_gadget_handle_interrupts(struct udevice *dev) +{ + struct mtu3 *mtu = dev_get_priv(dev); + + mtu3_irq(0, mtu); + + return 0; +} + +static const struct usb_gadget_generic_ops mtu3_gadget_ops = { + .handle_interrupts = mtu3_gadget_handle_interrupts, +}; + U_BOOT_DRIVER(mtu3_peripheral) = { .name = "mtu3-peripheral", .id = UCLASS_USB_GADGET_GENERIC, .of_match = ssusb_of_match, + .ops = &mtu3_gadget_ops, .probe = mtu3_gadget_probe, .remove = mtu3_gadget_remove, .priv_auto = sizeof(struct mtu3),

Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/mtu3/mtu3_plat.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/mtu3/mtu3_plat.c b/drivers/usb/mtu3/mtu3_plat.c index ca86b58dfcd..f8e14eabfb2 100644 --- a/drivers/usb/mtu3/mtu3_plat.c +++ b/drivers/usb/mtu3/mtu3_plat.c @@ -223,15 +223,6 @@ static const struct udevice_id ssusb_of_match[] = { };
#if CONFIG_IS_ENABLED(DM_USB_GADGET) -int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{
- struct mtu3 *mtu = dev_get_priv(dev);
- mtu3_irq(0, mtu);
- return 0;
-}
static int mtu3_gadget_probe(struct udevice *dev) { struct ssusb_mtk *ssusb = dev_to_ssusb(dev->parent); @@ -250,10 +241,24 @@ static int mtu3_gadget_remove(struct udevice *dev) return 0; }
+static int mtu3_gadget_handle_interrupts(struct udevice *dev) +{
- struct mtu3 *mtu = dev_get_priv(dev);
- mtu3_irq(0, mtu);
- return 0;
+}
+static const struct usb_gadget_generic_ops mtu3_gadget_ops = {
- .handle_interrupts = mtu3_gadget_handle_interrupts,
+};
U_BOOT_DRIVER(mtu3_peripheral) = { .name = "mtu3-peripheral", .id = UCLASS_USB_GADGET_GENERIC, .of_match = ssusb_of_match,
- .ops = &mtu3_gadget_ops, .probe = mtu3_gadget_probe, .remove = mtu3_gadget_remove, .priv_auto = sizeof(struct mtu3),
-- 2.43.0

Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/musb-new/omap2430.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c index c8dd73050b2..96771c28cef 100644 --- a/drivers/usb/musb-new/omap2430.c +++ b/drivers/usb/musb-new/omap2430.c @@ -46,16 +46,6 @@ static inline void omap2430_low_level_init(struct musb *musb) musb_writel(musb->mregs, OTG_FORCESTDBY, l); }
-#ifdef CONFIG_DM_USB_GADGET -int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{ - struct musb_host_data *host = dev_get_priv(dev); - - host->host->isr(0, host->host); - return 0; -} -#endif - static int omap2430_musb_init(struct musb *musb) { u32 l; @@ -273,6 +263,21 @@ static int omap2430_musb_remove(struct udevice *dev) return 0; }
+#ifndef CONFIG_USB_MUSB_HOST +static int omap2340_gadget_handle_interrupts(struct udevice *dev) +{ + struct musb_host_data *host = dev_get_priv(dev); + + host->host->isr(0, host->host); + + return 0; +} + +static const struct usb_gadget_generic_ops omap2340_gadget_ops = { + .handle_interrupts = omap2340_gadget_handle_interrupts, +}; +#endif + static const struct udevice_id omap2430_musb_ids[] = { { .compatible = "ti,omap3-musb" }, { .compatible = "ti,omap4-musb" }, @@ -285,6 +290,7 @@ U_BOOT_DRIVER(omap2430_musb) = { .id = UCLASS_USB, #else .id = UCLASS_USB_GADGET_GENERIC, + .ops = &omap2340_gadget_ops, #endif .of_match = omap2430_musb_ids, .of_to_plat = omap2430_musb_of_to_plat,

Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/musb-new/ti-musb.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/musb-new/ti-musb.c b/drivers/usb/musb-new/ti-musb.c index 76e8b88369e..ec1baa9337d 100644 --- a/drivers/usb/musb-new/ti-musb.c +++ b/drivers/usb/musb-new/ti-musb.c @@ -233,15 +233,6 @@ static int ti_musb_peripheral_of_to_plat(struct udevice *dev) } #endif
-int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{ - struct ti_musb_peripheral *priv = dev_get_priv(dev); - - priv->periph->isr(0, priv->periph); - - return 0; -} - static int ti_musb_peripheral_probe(struct udevice *dev) { struct ti_musb_peripheral *priv = dev_get_priv(dev); @@ -269,12 +260,26 @@ static int ti_musb_peripheral_remove(struct udevice *dev) return 0; }
+static int ti_musb_gadget_handle_interrupts(struct udevice *dev) +{ + struct ti_musb_peripheral *priv = dev_get_priv(dev); + + priv->periph->isr(0, priv->periph); + + return 0; +} + +static const struct usb_gadget_generic_ops ti_musb_gadget_ops = { + .handle_interrupts = ti_musb_gadget_handle_interrupts, +}; + U_BOOT_DRIVER(ti_musb_peripheral) = { .name = "ti-musb-peripheral", .id = UCLASS_USB_GADGET_GENERIC, #if CONFIG_IS_ENABLED(OF_CONTROL) .of_to_plat = ti_musb_peripheral_of_to_plat, #endif + .ops = &ti_musb_gadget_ops, .probe = ti_musb_peripheral_probe, .remove = ti_musb_peripheral_remove, .ops = &musb_usb_ops,

Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/musb-new/ti-musb.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/musb-new/ti-musb.c b/drivers/usb/musb-new/ti-musb.c index 76e8b88369e..ec1baa9337d 100644 --- a/drivers/usb/musb-new/ti-musb.c +++ b/drivers/usb/musb-new/ti-musb.c @@ -233,15 +233,6 @@ static int ti_musb_peripheral_of_to_plat(struct udevice *dev) } #endif
-int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{
- struct ti_musb_peripheral *priv = dev_get_priv(dev);
- priv->periph->isr(0, priv->periph);
- return 0;
-}
static int ti_musb_peripheral_probe(struct udevice *dev) { struct ti_musb_peripheral *priv = dev_get_priv(dev); @@ -269,12 +260,26 @@ static int ti_musb_peripheral_remove(struct udevice *dev) return 0; }
+static int ti_musb_gadget_handle_interrupts(struct udevice *dev) +{
- struct ti_musb_peripheral *priv = dev_get_priv(dev);
- priv->periph->isr(0, priv->periph);
- return 0;
+}
+static const struct usb_gadget_generic_ops ti_musb_gadget_ops = {
- .handle_interrupts = ti_musb_gadget_handle_interrupts,
+};
U_BOOT_DRIVER(ti_musb_peripheral) = { .name = "ti-musb-peripheral", .id = UCLASS_USB_GADGET_GENERIC, #if CONFIG_IS_ENABLED(OF_CONTROL) .of_to_plat = ti_musb_peripheral_of_to_plat, #endif
- .ops = &ti_musb_gadget_ops, .probe = ti_musb_peripheral_probe, .remove = ti_musb_peripheral_remove, .ops = &musb_usb_ops,
-- 2.43.0

Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/musb-new/ux500.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/drivers/usb/musb-new/ux500.c b/drivers/usb/musb-new/ux500.c index 6b4ef3c8578..89dd75b7d05 100644 --- a/drivers/usb/musb-new/ux500.c +++ b/drivers/usb/musb-new/ux500.c @@ -91,14 +91,6 @@ static const struct musb_platform_ops ux500_musb_ops = { .disable = ux500_musb_disable, };
-int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{ - struct ux500_glue *glue = dev_get_priv(dev); - - glue->mdata.host->isr(0, glue->mdata.host); - return 0; -} - static int ux500_musb_probe(struct udevice *dev) { #ifdef CONFIG_USB_MUSB_HOST @@ -155,6 +147,19 @@ static int ux500_musb_remove(struct udevice *dev) return 0; }
+static int ux500_gadget_handle_interrupts(struct udevice *dev) +{ + struct ux500_glue *glue = dev_get_priv(dev); + + glue->mdata.host->isr(0, glue->mdata.host); + + return 0; +} + +static const struct usb_gadget_generic_ops ux500_gadget_ops = { + .handle_interrupts = ux500_gadget_handle_interrupts, +}; + static const struct udevice_id ux500_musb_ids[] = { { .compatible = "stericsson,db8500-musb" }, { } @@ -168,6 +173,7 @@ U_BOOT_DRIVER(ux500_musb) = { .id = UCLASS_USB_GADGET_GENERIC, #endif .of_match = ux500_musb_ids, + .ops = &ux500_gadget_ops, .probe = ux500_musb_probe, .remove = ux500_musb_remove, #ifdef CONFIG_USB_MUSB_HOST

Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Implement .handle_interrupts callback as a replacement for deprecated dm_usb_gadget_handle_interrupts() function. The new callback allows for each DM capable USB gadget controller driver to define its own IRQ handling implementation without colliding with other controller drivers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
nitpick below (up to you if you want to fix it)
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/musb-new/ux500.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/drivers/usb/musb-new/ux500.c b/drivers/usb/musb-new/ux500.c index 6b4ef3c8578..89dd75b7d05 100644 --- a/drivers/usb/musb-new/ux500.c +++ b/drivers/usb/musb-new/ux500.c @@ -91,14 +91,6 @@ static const struct musb_platform_ops ux500_musb_ops = { .disable = ux500_musb_disable, };
-int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{
- struct ux500_glue *glue = dev_get_priv(dev);
- glue->mdata.host->isr(0, glue->mdata.host);
- return 0;
-}
static int ux500_musb_probe(struct udevice *dev) { #ifdef CONFIG_USB_MUSB_HOST @@ -155,6 +147,19 @@ static int ux500_musb_remove(struct udevice *dev) return 0; }
+static int ux500_gadget_handle_interrupts(struct udevice *dev) +{
- struct ux500_glue *glue = dev_get_priv(dev);
- glue->mdata.host->isr(0, glue->mdata.host);
- return 0;
+}
+static const struct usb_gadget_generic_ops ux500_gadget_ops = {
- .handle_interrupts = ux500_gadget_handle_interrupts,
+};
static const struct udevice_id ux500_musb_ids[] = { { .compatible = "stericsson,db8500-musb" }, { } @@ -168,6 +173,7 @@ U_BOOT_DRIVER(ux500_musb) = { .id = UCLASS_USB_GADGET_GENERIC, #endif .of_match = ux500_musb_ids,
- .ops = &ux500_gadget_ops,
In case of CONFIG_USB_MUSB_HOST=y, ops gets redefined below. Can we move this assignment below ``` .id = UCLASS_USB_GADGET_GENERIC, ``` ?
.probe = ux500_musb_probe, .remove = ux500_musb_remove,
#ifdef CONFIG_USB_MUSB_HOST
2.43.0

Drop dm_usb_gadget_handle_interrupts() in favor of empty default implementation of the same in drivers/usb/gadget/udc/udc-uclass.c .
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/host/usb-sandbox.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/usb/host/usb-sandbox.c b/drivers/usb/host/usb-sandbox.c index e26f0b292ed..f687fe2c430 100644 --- a/drivers/usb/host/usb-sandbox.c +++ b/drivers/usb/host/usb-sandbox.c @@ -123,12 +123,7 @@ static int sandbox_submit_int(struct udevice *bus, struct usb_device *udev, return ret; }
-#if CONFIG_IS_ENABLED(DM_USB_GADGET) -int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{ - return 0; -} -#else +#if !CONFIG_IS_ENABLED(DM_USB_GADGET) int usb_gadget_register_driver(struct usb_gadget_driver *driver) { struct sandbox_udc *dev = this_controller;

Hi Marek,
Thank you for the patch.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Drop dm_usb_gadget_handle_interrupts() in favor of empty default implementation of the same in drivers/usb/gadget/udc/udc-uclass.c .
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/host/usb-sandbox.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/usb/host/usb-sandbox.c b/drivers/usb/host/usb-sandbox.c index e26f0b292ed..f687fe2c430 100644 --- a/drivers/usb/host/usb-sandbox.c +++ b/drivers/usb/host/usb-sandbox.c @@ -123,12 +123,7 @@ static int sandbox_submit_int(struct udevice *bus, struct usb_device *udev, return ret; }
-#if CONFIG_IS_ENABLED(DM_USB_GADGET) -int dm_usb_gadget_handle_interrupts(struct udevice *dev) -{
- return 0;
-} -#else +#if !CONFIG_IS_ENABLED(DM_USB_GADGET) int usb_gadget_register_driver(struct usb_gadget_driver *driver) { struct sandbox_udc *dev = this_controller; -- 2.43.0

The dm_usb_gadget_handle_interrupts() is not implemented by any USB gadget controller drivers which do enable DM_USB_GADGET anymore. Set the symbol as non-weak.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/usb/gadget/udc/udc-uclass.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/gadget/udc/udc-uclass.c b/drivers/usb/gadget/udc/udc-uclass.c index 2320039fe3b..fbe62bbce47 100644 --- a/drivers/usb/gadget/udc/udc-uclass.c +++ b/drivers/usb/gadget/udc/udc-uclass.c @@ -18,7 +18,7 @@ usb_gadget_generic_dev_ops(struct udevice *dev) return (const struct usb_gadget_generic_ops *)dev->driver->ops; }
-__weak int dm_usb_gadget_handle_interrupts(struct udevice *dev) +int dm_usb_gadget_handle_interrupts(struct udevice *dev) { const struct usb_gadget_generic_ops *ops;

Hi Marek,
Thank you for the patch
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
The dm_usb_gadget_handle_interrupts() is not implemented by any USB gadget controller drivers which do enable DM_USB_GADGET anymore. Set the symbol as non-weak.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
drivers/usb/gadget/udc/udc-uclass.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/gadget/udc/udc-uclass.c b/drivers/usb/gadget/udc/udc-uclass.c index 2320039fe3b..fbe62bbce47 100644 --- a/drivers/usb/gadget/udc/udc-uclass.c +++ b/drivers/usb/gadget/udc/udc-uclass.c @@ -18,7 +18,7 @@ usb_gadget_generic_dev_ops(struct udevice *dev) return (const struct usb_gadget_generic_ops *)dev->driver->ops; }
-__weak int dm_usb_gadget_handle_interrupts(struct udevice *dev) +int dm_usb_gadget_handle_interrupts(struct udevice *dev) { const struct usb_gadget_generic_ops *ops;
-- 2.43.0

Hi Marek!
On Fri, 2024-06-14 at 02:51 +0200, Marek Vasut wrote:
Introduce .ops for USB_GADGET_GENERIC uclass. The first new ops is .handle_interrupts which must be implemented by DM capable USB gadget controller drivers and must implement interrupt handling similar to dm_usb_gadget_handle_interrupts(). For DM USB gadget drivers this is a replacement for dm_usb_gadget_handle_interrupts(). Convert the DM USB gadget drivers to this new ops instead.
DEPENDS: https://patchwork.ozlabs.org/project/uboot/list/?series=410150
I've applied both the dependency and this series and tested on AM62x, which I believe would cover patches 1,4,11 (32-bit SPL, 64-bit SPL + U-Boot proper, booted over USB DFU):
Marek Vasut (11): usb: gadget: Introduce handle_interrupts ops to USB_GADGET_GENERIC uclass usb: gadget: dwc3: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: Mark dm_usb_gadget_handle_interrupts as non-weak for DM_USB_GADGET
For these, Tested-by: Alexander Sverdlin alexander.sverdlin@siemens.com

On 6/14/24 12:24 PM, Sverdlin, Alexander wrote:
Hi Marek!
Hi,
On Fri, 2024-06-14 at 02:51 +0200, Marek Vasut wrote:
Introduce .ops for USB_GADGET_GENERIC uclass. The first new ops is .handle_interrupts which must be implemented by DM capable USB gadget controller drivers and must implement interrupt handling similar to dm_usb_gadget_handle_interrupts(). For DM USB gadget drivers this is a replacement for dm_usb_gadget_handle_interrupts(). Convert the DM USB gadget drivers to this new ops instead.
DEPENDS: https://patchwork.ozlabs.org/project/uboot/list/?series=410150
I've applied both the dependency and this series and tested on AM62x, which I believe would cover patches 1,4,11 (32-bit SPL, 64-bit SPL + U-Boot proper, booted over USB DFU):
I appreciate the testing, thanks !

Hi Marek,
Thank you for the series.
On ven., juin 14, 2024 at 02:51, Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Introduce .ops for USB_GADGET_GENERIC uclass. The first new ops is .handle_interrupts which must be implemented by DM capable USB gadget controller drivers and must implement interrupt handling similar to dm_usb_gadget_handle_interrupts(). For DM USB gadget drivers this is a replacement for dm_usb_gadget_handle_interrupts(). Convert the DM USB gadget drivers to this new ops instead.
DEPENDS: https://patchwork.ozlabs.org/project/uboot/list/?series=410150
Marek Vasut (11): usb: gadget: Introduce handle_interrupts ops to USB_GADGET_GENERIC uclass usb: gadget: cdns3: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: dwc2: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: dwc3: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: max3420: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: mtu3: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: omap2430: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: musb: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: ux500: Convert interrupt handling to usb_gadget_generic_ops usb: gadget: sandbox: Drop dm_usb_gadget_handle_interrupts() usb: gadget: Mark dm_usb_gadget_handle_interrupts as non-weak for DM_USB_GADGET
drivers/usb/cdns3/core.c | 24 ++++++++++++++++++++++++ drivers/usb/cdns3/gadget-export.h | 2 ++ drivers/usb/cdns3/gadget.c | 11 +---------- drivers/usb/dwc3/dwc3-generic.c | 23 ++++++++++++++--------- drivers/usb/dwc3/dwc3-layerscape.c | 21 +++++++++++++-------- drivers/usb/gadget/dwc2_udc_otg.c | 20 +++++++++++++++----- drivers/usb/gadget/max3420_udc.c | 19 ++++++++++++------- drivers/usb/gadget/udc/udc-uclass.c | 24 ++++++++++++++++++++++++ drivers/usb/host/usb-sandbox.c | 7 +------ drivers/usb/mtu3/mtu3_plat.c | 23 ++++++++++++++--------- drivers/usb/musb-new/omap2430.c | 26 ++++++++++++++++---------- drivers/usb/musb-new/ti-musb.c | 23 ++++++++++++++--------- drivers/usb/musb-new/ux500.c | 22 ++++++++++++++-------- include/linux/usb/gadget.h | 8 ++++++++ 14 files changed, 172 insertions(+), 81 deletions(-)
Tested on Khadas vim3 using fastboot, ums and usb storage scanning.
Tested-by: Mattijs Korpershoek mkorpershoek@baylibre.com # vim3
Cc: Alexander Sverdlin alexander.sverdlin@siemens.com Cc: Felipe Balbi felipe.balbi@linux.intel.com Cc: Lukasz Majewski lukma@denx.de Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Simon Glass sjg@chromium.org Cc: Thinh Nguyen Thinh.Nguyen@synopsys.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de
-- 2.43.0

Hi,
On Fri, 14 Jun 2024 02:51:15 +0200, Marek Vasut wrote:
Introduce .ops for USB_GADGET_GENERIC uclass. The first new ops is .handle_interrupts which must be implemented by DM capable USB gadget controller drivers and must implement interrupt handling similar to dm_usb_gadget_handle_interrupts(). For DM USB gadget drivers this is a replacement for dm_usb_gadget_handle_interrupts(). Convert the DM USB gadget drivers to this new ops instead.
[...]
Thanks, Applied to https://source.denx.de/u-boot/custodians/u-boot-dfu (u-boot-dfu)
[01/11] usb: gadget: Introduce handle_interrupts ops to USB_GADGET_GENERIC uclass https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/d36ef5cbedd08e9... [02/11] usb: gadget: cdns3: Convert interrupt handling to usb_gadget_generic_ops https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/356542d6dd72f66... [03/11] usb: gadget: dwc2: Convert interrupt handling to usb_gadget_generic_ops https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/2329109fbd7e48c... [04/11] usb: gadget: dwc3: Convert interrupt handling to usb_gadget_generic_ops https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/75f94ed82ff0a8c... [05/11] usb: gadget: max3420: Convert interrupt handling to usb_gadget_generic_ops https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/a75753327399d82... [06/11] usb: gadget: mtu3: Convert interrupt handling to usb_gadget_generic_ops https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/2c2d7c2bab0ec6e... [07/11] usb: gadget: omap2430: Convert interrupt handling to usb_gadget_generic_ops https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/521bc756cb5fea0... [08/11] usb: gadget: musb: Convert interrupt handling to usb_gadget_generic_ops https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/281eaf1ed83a09b... [09/11] usb: gadget: ux500: Convert interrupt handling to usb_gadget_generic_ops https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/ac4bf5d48a9e85e... [10/11] usb: gadget: sandbox: Drop dm_usb_gadget_handle_interrupts() https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/ed8e638de1ef0ab... [11/11] usb: gadget: Mark dm_usb_gadget_handle_interrupts as non-weak for DM_USB_GADGET https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/9e2c14804e4aaef...
-- Mattijs
participants (4)
-
Marek Vasut
-
Marek Vasut
-
Mattijs Korpershoek
-
Sverdlin, Alexander