[PATCH] usb: dwc3-generic: Fix build errors when USB_DWC3_GADGET is disabled

Jonas Karlman jonas at kwiboo.se
Mon Feb 26 01:02:04 CET 2024


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 <jonas at 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 .



More information about the U-Boot mailing list