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

Marius Dinu marius at psihoexpert.ro
Mon Mar 16 15:27:06 CET 2026


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.

  => usb start
  starting USB...
  drivers/core/ofnode.c:540-    ofnode_read_prop() ofnode_read_prop: assigned-clock-rates: <not found>
  drivers/core/of_access.c:556-   of_read_u32_index() of_read_u32_index: #clock-cells: 0x1 (1)
  drivers/core/of_access.c:556-   of_read_u32_index() of_read_u32_index: #clock-cells: 0x1 (1)
  drivers/core/uclass.c:546-uclass_get_device_by_ofnode() Looking for clock-controller at ff760000
  drivers/core/uclass.c:397-uclass_find_device_by_ofnode() Looking for clock-controller at ff760000
  drivers/core/uclass.c:406-uclass_find_device_by_ofnode()       - checking oscillator
  drivers/core/uclass.c:406-uclass_find_device_by_ofnode()       - checking clock-controller at ff760000
  drivers/core/uclass.c:416-uclass_find_device_by_ofnode()    - result for clock-controller at ff760000: clock-controller at ff760000 (ret=0)
  drivers/core/uclass.c:549-uclass_get_device_by_ofnode()    - result for clock-controller at ff760000: clock-controller at ff760000 (ret=0)
  drivers/core/ofnode.c:417-ofnode_read_u32_index() ofnode_read_u32_index: vbus-supply: of_read_u32_index: vbus-supply: (not found)
  drivers/core/of_access.c:556-   of_read_u32_index() of_read_u32_index: #phy-cells: 0x0 (0)
  drivers/core/uclass.c:546-uclass_get_device_by_ofnode() Looking for usb-phy at 334
  drivers/core/uclass.c:397-uclass_find_device_by_ofnode() Looking for usb-phy at 334
  drivers/core/uclass.c:416-uclass_find_device_by_ofnode()    - result for usb-phy at 334: (none) (ret=-19)
  drivers/core/uclass.c:549-uclass_get_device_by_ofnode()    - result for usb-phy at 334: (none) (ret=-19)
  drivers/core/uclass.c:546-uclass_get_device_by_ofnode() Looking for usbphy
  drivers/core/uclass.c:397-uclass_find_device_by_ofnode() Looking for usbphy
  drivers/core/uclass.c:416-uclass_find_device_by_ofnode()    - result for usbphy: (none) (ret=-19)
  drivers/core/uclass.c:549-uclass_get_device_by_ofnode()    - result for usbphy: (none) (ret=-19)
  Bus usb at ff500000: Port not available.
and it repeats for usb at ff540000 and usb at ff580000.

There is no usbphy or usb-phy detected/bound in log when u-boot walks the
devicetree nodes, but the device tree has "usbphy" node
compatible="rockchip,rk3288-usb-phy" with 3 sub-nodes: usb-phy at 320,
usb-phy at 334, usb-phy at 348.
Driver with that compatible string: rockchip_usb2_phy.c.
CONFIG_ROCKCHIP_USB2_PHY is enabled, but "dm compat" lists only these:

  rockchip_usb2phy      rockchip,rk3308-usb2phy
                        rockchip,rk3328-usb2phy
                        rockchip,rk3399-usb2phy
                        rockchip,rk3528-usb2phy
                        rockchip,rk3568-usb2phy
                        rockchip,rk3576-usb2phy
                        rockchip,rk3588-usb2phy

Those compat strings come from phy-rockchip-inno-usb2.c. (I also had that
enabled while debugging.) There are no compat strings from
rockchip_usb2_phy.c.

It's because phy-rockchip-inno-usb2.c has this:

  U_BOOT_DRIVER(rockchip_usb2phy){
    .name = rockchip_usb2phy"

while rockchip_usb2_phy.c does not. So the usb driver finds no compatible
phy driver loaded and fails. Before the commit, it would load anyway.

I didn't use any AI in this investigation!

Here is a log with my patch:
  => usb start
  starting USB...
  drivers/core/ofnode.c:525-    ofnode_read_bool() ofnode_read_bool: disable-over-current: false
  drivers/core/ofnode.c:525-    ofnode_read_bool() ofnode_read_bool: hnp-srp-disable: false
  drivers/core/ofnode.c:540-    ofnode_read_prop() ofnode_read_prop: assigned-clock-rates: <not found>
  drivers/core/of_access.c:556-   of_read_u32_index() of_read_u32_index: #clock-cells: 0x1 (1)
  drivers/core/of_access.c:556-   of_read_u32_index() of_read_u32_index: #clock-cells: 0x1 (1)
  drivers/core/uclass.c:546-uclass_get_device_by_ofnode() Looking for clock-controller at ff760000
  drivers/core/uclass.c:397-uclass_find_device_by_ofnode() Looking for clock-controller at ff760000
  drivers/core/uclass.c:406-uclass_find_device_by_ofnode()       - checking oscillator
  drivers/core/uclass.c:406-uclass_find_device_by_ofnode()       - checking clock-controller at ff760000
  drivers/core/uclass.c:416-uclass_find_device_by_ofnode()    - result for clock-controller at ff760000: clock-controller at ff760000 (ret=0)
  drivers/core/uclass.c:549-uclass_get_device_by_ofnode()    - result for clock-controller at ff760000: clock-controller at ff760000 (ret=0)
  drivers/core/of_access.c:556-   of_read_u32_index() of_read_u32_index: #phy-cells: 0x0 (0)
  drivers/core/uclass.c:546-uclass_get_device_by_ofnode() Looking for usb-phy at 348
  drivers/core/uclass.c:397-uclass_find_device_by_ofnode() Looking for usb-phy at 348
  drivers/core/uclass.c:416-uclass_find_device_by_ofnode()    - result for usb-phy at 348: (none) (ret=-19)
  drivers/core/uclass.c:549-uclass_get_device_by_ofnode()    - result for usb-phy at 348: (none) (ret=-19)
  drivers/core/uclass.c:546-uclass_get_device_by_ofnode() Looking for usbphy
  drivers/core/uclass.c:397-uclass_find_device_by_ofnode() Looking for usbphy
  drivers/core/uclass.c:416-uclass_find_device_by_ofnode()    - result for usbphy: (none) (ret=-19)
  drivers/core/uclass.c:549-uclass_get_device_by_ofnode()    - result for usbphy: (none) (ret=-19)
  drivers/usb/host/dwc2.c:1254-      dwc2_setup_phy() dwc2_usb usb at ff540000: Failed to get USB PHY: -19.
  drivers/usb/host/dwc2.c:1332-      dwc2_usb_probe() dwc2_usb usb at ff540000: Failed to setup PHY: -19. Continuing anyway...
  drivers/usb/host/dwc2.c:1061-          dwc2_reset() dwc2_usb usb at ff540000: Can't get reset: -2
  drivers/usb/host/dwc2.c:1095-    dwc2_init_common() dwc2_usb usb at ff540000: Core Release: 3.10a
  drivers/core/ofnode.c:540-    ofnode_read_prop() ofnode_read_prop: dr_mode: host
  drivers/usb/common/dwc2_core.c:67-  dwc2_flush_tx_fifo() Flush Tx FIFO 16
  drivers/usb/common/dwc2_core.c:102-  dwc2_flush_rx_fifo() Flush Rx FIFO
  drivers/core/ofnode.c:417-ofnode_read_u32_index() ofnode_read_u32_index: vbus-supply: of_read_u32_index: vbus-supply: (not found)
  USB DWC2
  drivers/core/ofnode.c:417-ofnode_read_u32_index() ofnode_read_u32_index: companion: of_read_u32_index: companion: (not found)
  drivers/core/ofnode.c:525-    ofnode_read_bool() ofnode_read_bool: disable-over-current: false
  drivers/core/ofnode.c:525-    ofnode_read_bool() ofnode_read_bool: hnp-srp-disable: false
  drivers/core/ofnode.c:540-    ofnode_read_prop() ofnode_read_prop: assigned-clock-rates: <not found>
  drivers/core/of_access.c:556-   of_read_u32_index() of_read_u32_index: #clock-cells: 0x1 (1)
  drivers/core/of_access.c:556-   of_read_u32_index() of_read_u32_index: #clock-cells: 0x1 (1)
  drivers/core/uclass.c:546-uclass_get_device_by_ofnode() Looking for clock-controller at ff760000
  drivers/core/uclass.c:397-uclass_find_device_by_ofnode() Looking for clock-controller at ff760000
  drivers/core/uclass.c:406-uclass_find_device_by_ofnode()       - checking oscillator
  drivers/core/uclass.c:406-uclass_find_device_by_ofnode()       - checking clock-controller at ff760000
  drivers/core/uclass.c:416-uclass_find_device_by_ofnode()    - result for clock-controller at ff760000: clock-controller at ff760000 (ret=0)
  drivers/core/uclass.c:549-uclass_get_device_by_ofnode()    - result for clock-controller at ff760000: clock-controller at ff760000 (ret=0)
  drivers/core/of_access.c:556-   of_read_u32_index() of_read_u32_index: #phy-cells: 0x0 (0)
  drivers/core/uclass.c:546-uclass_get_device_by_ofnode() Looking for usb-phy at 320
  drivers/core/uclass.c:397-uclass_find_device_by_ofnode() Looking for usb-phy at 320
  drivers/core/uclass.c:416-uclass_find_device_by_ofnode()    - result for usb-phy at 320: (none) (ret=-19)
  drivers/core/uclass.c:549-uclass_get_device_by_ofnode()    - result for usb-phy at 320: (none) (ret=-19)
  drivers/core/uclass.c:546-uclass_get_device_by_ofnode() Looking for usbphy
  drivers/core/uclass.c:397-uclass_find_device_by_ofnode() Looking for usbphy
  drivers/core/uclass.c:416-uclass_find_device_by_ofnode()    - result for usbphy: (none) (ret=-19)
  drivers/core/uclass.c:549-uclass_get_device_by_ofnode()    - result for usbphy: (none) (ret=-19)
  drivers/usb/host/dwc2.c:1254-      dwc2_setup_phy() dwc2_usb usb at ff580000: Failed to get USB PHY: -19.
  drivers/usb/host/dwc2.c:1332-      dwc2_usb_probe() dwc2_usb usb at ff580000: Failed to setup PHY: -19. Continuing anyway...
  drivers/usb/host/dwc2.c:1061-          dwc2_reset() dwc2_usb usb at ff580000: Can't get reset: -2
  drivers/usb/host/dwc2.c:1095-    dwc2_init_common() dwc2_usb usb at ff580000: Core Release: 3.10a
  drivers/core/ofnode.c:540-    ofnode_read_prop() ofnode_read_prop: dr_mode: otg
  drivers/usb/common/dwc2_core.c:67-  dwc2_flush_tx_fifo() Flush Tx FIFO 16
  drivers/usb/common/dwc2_core.c:102-  dwc2_flush_rx_fifo() Flush Rx FIFO
  drivers/usb/host/dwc2.c:230-dwc_otg_core_host_init() dwc2_usb usb at ff580000: dwc_otg_core_host_init: Timeout!
  drivers/usb/host/dwc2.c:230-dwc_otg_core_host_init() dwc2_usb usb at ff580000: dwc_otg_core_host_init: Timeout!
  drivers/usb/host/dwc2.c:230-dwc_otg_core_host_init() dwc2_usb usb at ff580000: dwc_otg_core_host_init: Timeout!
  drivers/usb/host/dwc2.c:230-dwc_otg_core_host_init() dwc2_usb usb at ff580000: dwc_otg_core_host_init: Timeout!
  drivers/usb/host/dwc2.c:230-dwc_otg_core_host_init() dwc2_usb usb at ff580000: dwc_otg_core_host_init: Timeout!
  drivers/usb/host/dwc2.c:230-dwc_otg_core_host_init() dwc2_usb usb at ff580000: dwc_otg_core_host_init: Timeout!
  drivers/usb/host/dwc2.c:230-dwc_otg_core_host_init() dwc2_usb usb at ff580000: dwc_otg_core_host_init: Timeout!
  drivers/usb/host/dwc2.c:230-dwc_otg_core_host_init() dwc2_usb usb at ff580000: dwc_otg_core_host_init: Timeout!
CONFIG_USB_GADGET is not enabled in my config.
  drivers/core/ofnode.c:417-ofnode_read_u32_index() ofnode_read_u32_index: vbus-supply: of_read_u32_index: vbus-supply: (not found)
  USB DWC2
  drivers/core/ofnode.c:417-ofnode_read_u32_index() ofnode_read_u32_index: companion: of_read_u32_index: companion: (not found)
  drivers/core/ofnode.c:417-ofnode_read_u32_index() ofnode_read_u32_index: usb,device-class: of_read_u32_index: usb,device-class: (not found)
  drivers/core/ofnode.c:417-ofnode_read_u32_index() ofnode_read_u32_index: usb,interface-class: of_read_u32_index: usb,interface-class: (not found)
  drivers/core/device.c:185-  device_bind_common() Bound device usb_hub to usb at ff540000
  drivers/core/ofnode.c:540-    ofnode_read_prop() ofnode_read_prop: assigned-clock-rates: <not found>
  drivers/core/device.c:185-  device_bind_common() Bound device usb_hub to usb_hub
  drivers/core/device.c:185-  device_bind_common() Bound device usb_mass_storage to usb_hub
  drivers/core/device.c:185-  device_bind_common() Bound device usb_mass_storage.lun0 to usb_mass_storage
long delay here
  drivers/core/device.c:185-  device_bind_common() Bound device usb_mass_storage.lun0.bootdev to usb_mass_storage
even longer delay here
  drivers/core/ofnode.c:417-ofnode_read_u32_index() ofnode_read_u32_index: usb,device-class: of_read_u32_index: usb,device-class: (not found)
  drivers/core/ofnode.c:417-ofnode_read_u32_index() ofnode_read_u32_index: usb,interface-class: of_read_u32_index: usb,interface-class: (not found)
  drivers/core/device.c:185-  device_bind_common() Bound device usb_hub to usb at ff580000
  drivers/core/ofnode.c:540-    ofnode_read_prop() ofnode_read_prop: assigned-clock-rates: <not found>
  Bus usb at ff540000: 3 USB Device(s) found
  Bus usb at ff580000: 1 USB Device(s) found
         scanning usb for storage devices... 1 Storage Device(s) found

Takes 30s to complete, but it works!
IIRC, that how much it took before the commit that broke it.

Marius

> 
> 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