[PATCH] USB: dwc2: allow usb start even if usbphy is not found

Marius Dinu m95d+git at psihoexpert.ro
Tue Mar 17 10:20:45 CET 2026


On Mon, 2026-03-16 22.41.08 ++0100, Jonas Karlman wrote:
> Hi Marius,
> 
> On 3/16/2026 4:12 PM, Marius Dinu wrote:
> > On Mon, 2026-03-16 11.04.13 ++0100, Jonas Karlman wrote:
> >> Hi Marius,
> >>
> >> On 3/16/2026 10:26 AM, Marius Dinu wrote:
> >>> RK3288 uses rockchip_usb2_phy, but that driver doesn't register iself
> >>> as a usbphy driver and "usb start" fails with this error:
> >>>
> >>>   drivers/usb/host/dwc2.c:1254- dwc2_setup_phy() dwc2_usb usb at ff580000:
> >>>   Failed to get USB PHY: -19.
> >>>
> >>> Until a proper fix is made for rockchip_usb2_phy, this patch allows
> >>> usb start to continue even if usbphy is not found.
> >>>
> >>> Tested on Asus TinkerBoard.
> >>
> >> I am not seeing this issue on my TinkerBoard, what U-Boot version are
> >> you testing and have you made any config changes compared to
> >> tinker-rk3288_defconfig?
> > 
> > I'm using the github master branch pulled today + lots and lots of changes
> > in config. I didn't make a diff, but I expect it to be very very far from
> > tinker-rk3288_defconfig.
> > 
> >>
> >>   => usb start
> >>   starting USB...
> >>   USB DWC2
> >>   USB DWC2
> >>   Bus usb at ff540000: 2 USB Device(s) found
> >>   Bus usb at ff580000: 1 USB Device(s) found
> >>          scanning usb for storage devices... 0 Storage Device(s) found
> >>
> >>   => dm tree -e usb
> >>    Class     Seq    Probed  Driver                Name
> >>   -----------------------------------------------------------
> >>    usb           0  [ + ]   dwc2_usb              usb at ff540000
> >>    usb_hub       0  [ + ]   usb_hub               `-- usb_hub
> >>    usb_hub       1  [ + ]   usb_hub                   `-- usb_hub
> >>    usb           1  [ + ]   dwc2_usb              usb at ff580000
> >>    usb_hub       2  [ + ]   usb_hub               `-- usb_hub
> >>
> >> Have something changed recently that broke this?
> > 
> > Yes! but not exactly recently...
> > It broke since commit e17a4bf198510693967644c331ab621fc41ea8b5.
> > Here's a log on my system without my proposed fix. This is a log that I
> > saved while I was investigating the failed USB, about a year ago, I think.
> > But I checked and it still fails with today's git master, I just don't have
> > the time to enable all the debug options again. It's still ret -19 error.
> 
> I did a new runtime test on a Tinker Board R2.0 using master with
> tinker-rk3288_defconfig and I am not able to reproduce any issue. Maybe
> your config changes introduce a condition that causes an issue? Please
> share your savedefconfig.
> 
>
>
> I have re-run some tests with different Kconfig options related to
> GADGET and DWC2 and are not able to reproduce your issue.
> 
> As mentioned above, please share your config changes compared to tinker
> defconfig, maybe you have some Kconfig option enabled that make DWC2
> work differently?
> 
> 
>   U-Boot SPL 2026.04-rc4-00007-g010855c5005e (Mar 16 2026 - 21:33:53 +0000)
>   Trying to boot from RAM
>   ## Checking hash(es) for config conf-1 ... OK
>   ## Checking hash(es) for Image firmware-1 ... crc32+ OK
>   ## Checking hash(es) for Image fdt-1 ... crc32+ OK
>   spl_perform_arch_fixups: could not map BootROM boot device to ofpath
>   
>   
>   U-Boot 2026.04-rc4-00007-g010855c5005e (Mar 16 2026 - 21:33:53 +0000)
>   
>   SoC: Rockchip rk3288
>   Reset cause: POR
>   Model: Rockchip RK3288 Asus Tinker Board
>   DRAM:  2 GiB
>   PMIC:  RK808
>   Core:  221 devices, 27 uclasses, devicetree: separate
>   MMC:   mmc at ff0c0000: 1, mmc at ff0d0000: 2
>   Loading Environment from MMC... Card did not respond to voltage select! : -110
>   *** Warning - No block device, using default environment
>   
>   In:    serial,usbkbd
>   Out:   serial,vidconsole
>   Err:   serial,vidconsole
>   Net:   eth0: ethernet at ff290000
>   
>   Hit any key to stop autoboot: 0
>   => usb start
>   starting USB...
>   USB DWC2
>   USB DWC2
>   Bus usb at ff540000: 2 USB Device(s) found
>   Bus usb at ff580000: 1 USB Device(s) found
>          scanning usb for storage devices... 0 Storage Device(s) found
>   => usb tree
>   USB device tree:
>     1  Hub (480 Mb/s, 0mA)
>     |   U-Boot Root Hub
>     |
>     +-2  Hub (480 Mb/s, 100mA)
>           USB2.0 Hub
>   
>     1  Hub (480 Mb/s, 0mA)
>         U-Boot Root Hub
>   
>   => dm tree -e usb
>    Class     Seq    Probed  Driver                Name
>   -----------------------------------------------------------
>    usb           0  [ + ]   dwc2_usb              usb at ff540000
>    usb_hub       0  [ + ]   usb_hub               `-- usb_hub
>    usb_hub       1  [ + ]   usb_hub                   `-- usb_hub
>    usb           1  [ + ]   dwc2_usb              usb at ff580000
>    usb_hub       2  [ + ]   usb_hub               `-- usb_hub
>    pinconfig   130  [   ]   pinconfig             usb
>    pinconfig   131  [   ]   pinconfig             |-- host-vbus-drv
>    pinconfig   132  [   ]   pinconfig             `-- pwr-3g
>   =>
> 
> Regards,
> Jonas

I tested the tinkerboard defconfig. It does work. As far as I can tell, it
doesn't try to load the phy driver at all. The only significant difference
is that I didn't enable OTG/gadget in my config - it's just the usb-host
driver.

So the bug is still there, it's just that the OTG driver doesn't search for
a phy driver.

Marius


> 
> > 
> > Marius
> > 
> > PS: There is a duplicate of this email sent from the wrong address. Sorry.
> > 
> >>
> >> Anyway if something needs fixing it is probably rockchip_usb2_phy.
> >>
> >> Regards,
> >> Jonas
> >>
> >>>
> >>> Signed-off-by: Marius Dinu <m95d+git at psihoexpert.ro>
> >>> ---
> >>>  drivers/usb/host/dwc2.c | 5 ++---
> >>>  1 file changed, 2 insertions(+), 3 deletions(-)
> >>>
> >>> diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c
> >>> index 16f21fa9083..74d71f23d88 100644
> >>> --- a/drivers/usb/host/dwc2.c
> >>> +++ b/drivers/usb/host/dwc2.c
> >>> @@ -1329,7 +1329,7 @@ static int dwc2_usb_probe(struct udevice *dev)
> >>>  
> >>>  	ret = dwc2_setup_phy(dev);
> >>>  	if (ret)
> >>> -		return ret;
> >>> +		dev_dbg(dev, "Failed to setup PHY: %d. Continuing anyway...\n", ret);
> >>>  
> >>>  	return dwc2_init_common(dev, priv);
> >>>  }
> >>> @@ -1345,8 +1345,7 @@ static int dwc2_usb_remove(struct udevice *dev)
> >>>  
> >>>  	ret = dwc2_shutdown_phy(dev);
> >>>  	if (ret) {
> >>> -		dev_dbg(dev, "Failed to shutdown USB PHY: %d.\n", ret);
> >>> -		return ret;
> >>> +		dev_dbg(dev, "Failed to shutdown USB PHY: %d. Continuing anyway...\n", ret);
> >>>  	}
> >>>  
> >>>  	dwc2_uninit_common(priv->regs);
> >>
> > 
> 



More information about the U-Boot mailing list