u-boot/drivers/usb
Fabrice Gasnier 5b43bc97ee usb: check for companion controller in uclass
EHCI is usually used with companion controller (like OHCI) as companion
controller. This information on the companion is missing currently in
companion drivers.
So, if the usb-uclass isn't aware, it may scan busses in any order: OHCI
first, then EHCI.
This is seen on STM32MP1 where DT probing makes the probe order to occur
by increasing address (OHCI address < EHCI address).

When a low speed or full-speed device is plugged in, it's not detected as
EHCI should first detect it, and give ownership (handover) to OHCI.

Current situation on STM32MP1 (with a low speed device plugged-in)
STM32MP> usb start
starting USB...
Bus usb@5800c000: USB OHCI 1.0
Bus usb@5800d000: USB EHCI 1.00
scanning bus usb@5800c000 for devices... 1 USB Device(s) found
scanning bus usb@5800d000 for devices... 1 USB Device(s) found
   scanning usb for storage devices... 0 Storage Device(s) found

The "companion" property in the device tree allow to retrieve companion
controller information, from the EHCI node. This allow marking the
companion driver as such.

With this patch (same low speed device plugged in):
STM32MP> usb start
starting USB...
Bus usb@5800c000: USB OHCI 1.0
Bus usb@5800d000: USB EHCI 1.00
scanning bus usb@5800d000 for devices... 1 USB Device(s) found
scanning bus usb@5800c000 for devices... 2 USB Device(s) found
   scanning usb for storage devices... 0 Storage Device(s) found
STM32MP> usb tree
USB device tree:
1  Hub (12 Mb/s, 0mA)
|   U-Boot Root Hub
|
+-2  Human Interface (1.5 Mb/s, 100mA)
   HP HP USB 1000dpi Laser Mouse

1  Hub (480 Mb/s, 0mA)
 u-boot EHCI Host Controller

This also optimize bus scan when a High speed device is plugged in, as
the usb-uclass skips OHCI in this case:

STM32MP> usb reset
resetting USB...
Bus usb@5800c000: USB OHCI 1.0
Bus usb@5800d000: USB EHCI 1.00
scanning bus usb@5800d000 for devices... 2 USB Device(s) found
   scanning usb for storage devices... 1 Storage Device(s) found
STM32MP> usb tree
USB device tree:
1  Hub (480 Mb/s, 0mA)
|  u-boot EHCI Host Controller
|
+-2  Mass Storage (480 Mb/s, 200mA)
   SanDisk Cruzer Blade 03003432021922011407

Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Reviewed-by: Marek Vasut <marex@denx.de>
2023-09-04 18:25:20 +02:00
..
cdns3 usb: cdns3: gadget: Configure speed in udc_start 2023-07-21 02:05:10 +02:00
common usb: add isp1760 family driver 2022-07-12 21:59:54 +02:00
dwc3 usb: dwc3-generic: Restrict single ctrl node for RK3328 2023-07-31 20:33:18 +08:00
emul sandbox: fix sandbox_hub_submit_control_msg() 2023-04-28 11:30:17 -06:00
eth usb: eth: lan78xx: Fix logic in lan78xx_read_otp() to avoid a warning 2023-06-20 13:02:59 -04:00
gadget Kconfigs: Correct default of "0" on hex type entries 2023-08-09 09:21:42 -04:00
host usb: check for companion controller in uclass 2023-09-04 18:25:20 +02:00
isp1760 usb: add isp1760 family driver 2022-07-12 21:59:54 +02:00
mtu3 usb: mtu3: flush cache for the first GPD when allocate GPD ring 2021-11-03 08:47:57 +01:00
musb usb: musb: Rename CONFIG_USB_MUSB_TIMEOUT to MUSB_TIMEOUT 2023-01-20 12:27:06 -05:00
musb-new sunxi: Kconfig: rework PHY_USB_SUN4I selection 2023-07-21 00:26:36 +01:00
phy rockchip: usb: phy: add rk3066/rk3188 support 2022-06-29 11:28:15 +08:00
ulpi global: Finish CONFIG -> CFG migration 2023-01-20 12:27:24 -05:00
Kconfig usb: Move SPL_USB_STORAGE Kconfig symbol to drivers/usb/ 2023-05-17 01:51:39 +02:00