Re: [PATCH v1 1/6] usb: dwc3: core: only provide legacy gadget IRQ handler when USB_DWC3_GADGET

Tom Rini <[email protected]>
Newsgroups org.u-boot-project.lists.u-boot
Message-ID <20260826161102.GO523975@bill-the-cat>
On Wed, Aug 26, 2026 at 09:15:01AM +0200, 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.

So the NXP downstream tree has a DM_USB_GADGET driver that needs to be
upstreamed, to solve this? We're quite a ways past where enhancing the
non-DM side things is the normal workflow.

-- 
Tom
signature.asc (application/pgp-signature, 228 B)
-----BEGIN PGP SIGNATURE-----

iHUEABYKAB0WIQTzzqh0PWDgGS+bTHor4qD1Cr/kCgUCao8QDAAKCRAr4qD1Cr/k
CoUFAP9S8+xhUqTYm/mFedP7lCmO2X520eQLmB94bi5oQ7rb0QEA+S7ZnnExqRiU
GGheKVfIv2UzalrzXatku1m48ftcagQ=
=ZQbH
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.