On 2024-02-25 23:01, Marek Vasut wrote: > On 2/25/24 4:27 PM, Jonas Karlman wrote: >> Build fail with the following error when DM_USB_GADGET is enabled and >> USB_DWC3_GADGET is disabled: >> >> dwc3/dwc3-generic.o: in function `dm_usb_gadget_handle_interrupts': >> dwc3/dwc3-generic.c:201:(.text.dm_usb_gadget_handle_interrupts+0x10): >> undefined reference to `dwc3_gadget_uboot_handle_interrupt' >> >> Build also fail with the following error when USB_GADGET_DWC2_OTG + >> DM_USB_GADGET is enabled and USB_DWC3_GADGET is disabled: >> >> gadget/dwc2_udc_otg.o: in function `dm_usb_gadget_handle_interrupts': >> gadget/dwc2_udc_otg.c:947: multiple definition of >> `dm_usb_gadget_handle_interrupts'; >> dwc3/dwc3-generic.o:dwc3/dwc3-generic.c:197: first defined here >> >> Fix this by checking for USB_DWC3_GADGET in addition to DM_USB_GADGET. >> >> Signed-off-by: Jonas Karlman <jo...@kwiboo.se> >> --- >> drivers/usb/dwc3/dwc3-generic.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/usb/dwc3/dwc3-generic.c >> b/drivers/usb/dwc3/dwc3-generic.c >> index 6fb2de8a5ace..891d01957619 100644 >> --- a/drivers/usb/dwc3/dwc3-generic.c >> +++ b/drivers/usb/dwc3/dwc3-generic.c >> @@ -192,7 +192,7 @@ static int dwc3_generic_of_to_plat(struct udevice *dev) >> return 0; >> } >> >> -#if CONFIG_IS_ENABLED(DM_USB_GADGET) >> +#if IS_ENABLED(CONFIG_USB_DWC3_GADGET) && CONFIG_IS_ENABLED(DM_USB_GADGET) > > Maybe just make USB_DWC3_GADGET depend on (or select?) DM_USB_GADGET , > since I think the DWC3 code doesn't work without DM anyway .
Do you mean in addition to this? I do not think that alone is something that will address my intention to be able to disable the gadget part of the dwc3-generic driver. Before this patch it was possible to enable disable host or gadget by using USB_HOST/SPL_USB_HOST and DM_USB_GADGET/SPL_DM_USB_GADGET options. However, Rockchip RK3328 boards have dwc2 otg and dwc3 host, trying to use DM_USB_GADGET for dwc2 and USB_HOST for dwc3 is currently not possible and result in the build errors reported, i.e. multiple definition of dm_usb_gadget_handle_interrupts() and undefined reference to dwc3_gadget_uboot_handle_interrupt(). After this patch I can use dm dwc2 gadget and dwc3 host without issue. Regards, Jonas > >> int dm_usb_gadget_handle_interrupts(struct udevice *dev) >> { >> struct dwc3_generic_priv *priv = dev_get_priv(dev); >> @@ -435,7 +435,7 @@ static int dwc3_glue_bind_common(struct udevice *parent, >> ofnode node) >> if (!dr_mode) >> dr_mode = usb_get_dr_mode(node); >> >> - if (CONFIG_IS_ENABLED(DM_USB_GADGET) && >> + if (IS_ENABLED(CONFIG_USB_DWC3_GADGET) && >> CONFIG_IS_ENABLED(DM_USB_GADGET) && >> (dr_mode == USB_DR_MODE_PERIPHERAL || dr_mode == USB_DR_MODE_OTG)) { >> debug("%s: dr_mode: OTG or Peripheral\n", __func__); >> driver = "dwc3-generic-peripheral"; > > +CC Mattijs .