Re: [PATCH v1 1/6] usb: dwc3: core: only provide legacy gadget IRQ handler when USB_DWC3_GADGET
Marek Vasut <[email protected]>
| Newsgroups | org.u-boot-project.lists.u-boot |
|---|---|
| Message-ID | <[email protected]> |
On 8/26/26 9:15 AM, Stefan Eichenberger wrote: > On Tue, Aug 25, 2026 at 01:33:27AM +0200, Marek Vasut wrote: >> On 8/24/26 8:29 PM, Stefan Eichenberger wrote: >>> From: Stefan Eichenberger <[email protected]> >>> >>> Building a board with USB_DWC3=y (DWC3 used purely as an XHCI host >>> controller), USB_DWC3_GADGET unset, and DM_USB_GADGET disabled (e.g. >>> to use CONFIG_CI_UDC for a separate ChipIdea gadget/OTG controller) >>> fails to link: >>> >>> drivers/usb/gadget/ci_udc.o: in function `dm_usb_gadget_handle_interrupts': >>> drivers/usb/gadget/ci_udc.c:983: multiple definition of `dm_usb_gadget_handle_interrupts'; >>> drivers/usb/dwc3/core.o:drivers/usb/dwc3/core.c:1034: first defined here >>> drivers/usb/dwc3/core.o: in function `dm_usb_gadget_handle_interrupts': >>> drivers/usb/dwc3/core.c:1044: undefined reference to `dwc3_gadget_uboot_handle_interrupt' >>> >>> Add "&& CONFIG_IS_ENABLED(USB_DWC3_GADGET)" to the guard so this code >>> is only compiled when the DWC3 gadget driver it depends on is actually >>> present, matching the Makefile dependency. Boards that combine DWC3 >>> (host) with a separate legacy gadget driver like CI_UDC, with >>> DM_USB_GADGET disabled, now link correctly. Boards that already use >>> DWC3 in gadget mode without DM_USB_GADGET are unaffected since >>> USB_DWC3_GADGET is set for them. >>> >>> Fixes: 4d1589808970 ("usb: udc: dwc3: Fold board dm_usb_gadget_handle_interrupts() into DWC3 gadget") >>> Signed-off-by: Stefan Eichenberger <[email protected]> >>> --- >>> drivers/usb/dwc3/core.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c >>> index be198041f08..9bff5149c5f 100644 >>> --- a/drivers/usb/dwc3/core.c >>> +++ b/drivers/usb/dwc3/core.c >>> @@ -1016,7 +1016,7 @@ MODULE_AUTHOR("Felipe Balbi <[email protected]>"); >>> MODULE_LICENSE("GPL v2"); >>> MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver"); >>> -#if !CONFIG_IS_ENABLED(DM_USB_GADGET) >>> +#if !CONFIG_IS_ENABLED(DM_USB_GADGET) && CONFIG_IS_ENABLED(USB_DWC3_GADGET) >>> __weak int dwc3_uboot_interrupt_status(struct udevice *dev) >> Simply enable DM_USB_GADGET , then the drivers/usb/gadget/udc/udc-uclass.c >> dm_usb_gadget_handle_interrupts() is used which correctly invokes the >> per-controller IRQ handler. DWC3_GADGET should likely depend on >> DM_USB_GADGET. > > Unfortunately, CI_UDC is not a DM driver yet and it depends on > !DM_USB_GADGET that's why I can't enable DM_USB_GADGET in that specific > case. I think NXP is working on changing that driver to DM (at least > they did that in their BSP). So my hope was to have this as intermediate > solution. Also in our case we use the DWC3 controller in host mode only, > so we don't need DWC3_GADGET at all. Let's convert the CI to DM and be done with it, esp. if there is existing code which does it.