On 2024-02-26 02:47, Tom Rini wrote: > On Mon, Feb 26, 2024 at 01:02:04AM +0100, Jonas Karlman wrote: >> 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. > > Note that *DM_* symbols can be confusing. At this point, in SPL > SPL_DM_USB and SPL_DM_USB_GADGET are encouraged but not required for > host/gadget drivers. In full U-Boot, DM_USB is required for all host > drivers and really should be enabled in all cases for DM_USB_GADGET. We > can't enforce that at the Kconfig level because of, iirc, some of the > armv7 part gadget drivers (more than one). But for newer and still very > active chips, we should be using DM_USB_GADGET unconditionally in full > U-Boot.
The issue is that with DM_USB_GADGET we can only have one driver providing the dm_usb_gadget_handle_interrupts() function. On RK3328 boards there is a dwc2 otg port, a dwc2 host port and a dwc3 host port. Currently all these ports work without DM_USB_GADGET because a board_usb_init() call dwc2_udc_probe(). CONFIG_USB_DWC2=y CONFIG_USB_DWC3=y # CONFIG_USB_DWC3_GADGET is not set CONFIG_USB_DWC3_GENERIC=y CONFIG_USB_GADGET=y CONFIG_USB_GADGET_DWC2_OTG=y # CONFIG_DM_USB_GADGET is not set I want to migrate to use DM_USB_GADGET with DWC2_OTG instead of using board_usb_init(), this is currently not possible because of the build errors reported in this patch. Regards, Jonas > > So perhaps part of the issue is that dwc2/dwc3 need some hopefully now > legacy code removed.