Currently U-Boot xHCI driver does not work on Intel BayTrail SoC based boards that have USB 3.0 ports. Trying to do a 'usb start' simply hangs the board. This series fixes a bunch of xHCI driver issues to make it work on Intel's platform.
Issues identified in the U-Boot xHCI driver are really spec violations, but apparently other xHCI IPs found on ARM SoCs (mainly Synopsis IP?) are quite tolerant with these spec violations, or IOW those IPs don't respect the xHCI spec. While it comes to Intel platform, it just breaks. Note xHCI interrupt transfer is still not supported in this series, as it has been there since the original commit of xHCI support for years. Tested on Intel MinnowMax board with the following USB devices: - Dell USB 1.1 keyboard - Dell USB 2.0 mouse - Netac USB 2.0 flash disk - JetFlash USB 3.0 flash disk - GenesysLogic 4-port USB 3.0 hub, with an integrated Realtek USB ethernet chipset connected to one of its downstream port Testing were performed on both ports (2.0 port and 3.0 port), and both ports are connected to xHCI (configure MinnowMax to enable xHCI). Testing results: - DELL USB 1.1 keyboard and 2.0 mouse can be enumerated on both ports - USB 2.0 and 3.0 flash disks work fine (enumerated, read/write) on both ports - GenesysLogic USB 3.0 hub can be enumerated on 2.0 port as a 2.0 hub, and the integrated Realtek USB ethernet chipset enumerated as well. USB 2.0 and 3.0 flash disks connected via the hub can be enumerated, but DELL USB 1.1 keyboard and 2.0 mouse cannot. - GenesysLogic USB 3.0 hub can be enumerated on 3.0 port as a 3.0 hub, but the integrated Realtek USB ethernet chipset cannot be enumerated. None of devices connected via the hub can be enumerated. U-Boot xHCI driver just throws BUG_ON() on the event TRB handling. This indicates that USB 3.0 hub support in U-Boot is seriously broken. So far this series tries to fix some of the issues identified, but the USB 3.0 hub is still not working. This will be left as future work. The USB 3.0 hub work includes: port status translation, USB 3.0 newly added "Set Hub Depth" request support, xHCI codes update to fill in hub description fields in the input slot context when issuing commands to xHC, etc. This series is available at u-boot-x86/xhci-working for testing. Changes in v2: - Change to use uint and also 'normal' variable name packet_size. - Update description to use "PCI-based" - Remove CONFIG_USB_XHCI_PCI from config_whitelist.txt - Drop two x86 patches that were already applied to u-boot-x86 Bin Meng (18): usb: xhci: Remove incorrect comments for struct xhci_container_ctx usb: xhci: Correct command TRB 4th dword initialization usb: xhci: Initialize scratchpad buffer array and scratchpad buffers usb: xhci: Add input slot context in xhci_set_configuration() usb: hub: Update handling connect status/change in usb_scan_port() usb: hub: Send correct wValue to get hub descriptor of a USB 3.0 hub usb: hub: Revise wLength for 'get port status' request usb: hub: Change USB hub descriptor to match USB 3.0 hubs usb: hub: Add 3.0 hub port status mask of 2.0 hub usb: xhci: Change MAX_HC_PORTS to 255 usb: xhci: Get rid of CONFIG_SYS_USB_XHCI_MAX_ROOT_PORTS configs: Remove CONFIG_SYS_USB_XHCI_MAX_ROOT_PORTS in all boards usb: ehci: Get rid of CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS configs: Remove CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS in all boards usb: cmd: Print actual packet size for super speed devices usb: xhci: Convert CONFIG_USB_XHCI_PCI to Kconfig x86: minnowmax: Add a environment variable for USB power-on delay x86: minnowmax: Enable USB xHCI support arch/arm/include/asm/ehci-omap.h | 4 -- arch/x86/dts/minnowmax.dts | 3 ++ cmd/usb.c | 7 ++- common/usb_hub.c | 41 +++++++++++------ configs/minnowmax_defconfig | 1 + drivers/usb/emul/sandbox_hub.c | 7 ++- drivers/usb/host/Kconfig | 6 +++ drivers/usb/host/ehci-hcd.c | 14 +++--- drivers/usb/host/ehci.h | 7 ++- drivers/usb/host/xhci-mem.c | 87 ++++++++++++++++++++++++++++++++++++ drivers/usb/host/xhci-ring.c | 11 ++++- drivers/usb/host/xhci.c | 17 ++++--- drivers/usb/host/xhci.h | 23 +++++----- include/configs/MPC8572DS.h | 1 - include/configs/am43xx_evm.h | 1 - include/configs/am57xx_evm.h | 1 - include/configs/cl-som-am57x.h | 1 - include/configs/cm_t43.h | 1 - include/configs/cm_t54.h | 1 - include/configs/corvus.h | 3 -- include/configs/dra7xx_evm.h | 1 - include/configs/ds414.h | 1 - include/configs/duovero.h | 2 - include/configs/exynos5-common.h | 3 -- include/configs/ls1012afrdm.h | 1 - include/configs/ls1012aqds.h | 1 - include/configs/ls1012ardb.h | 1 - include/configs/ls1021aiot.h | 1 - include/configs/ls1021aqds.h | 1 - include/configs/ls1021atwr.h | 1 - include/configs/ls1043aqds.h | 1 - include/configs/ls1043ardb.h | 1 - include/configs/ls1046aqds.h | 1 - include/configs/ls1046ardb.h | 1 - include/configs/ls2080aqds.h | 1 - include/configs/ls2080ardb.h | 1 - include/configs/ma5d4evk.h | 1 - include/configs/mcx.h | 1 - include/configs/minnowmax.h | 3 +- include/configs/mvebu_armada-37xx.h | 9 +--- include/configs/mvebu_armada-8k.h | 9 +--- include/configs/mx35pdk.h | 1 - include/configs/odroid.h | 1 - include/configs/omap3_beagle.h | 1 - include/configs/omap3_overo.h | 1 - include/configs/omap4_panda.h | 2 - include/configs/omap5_uevm.h | 1 - include/configs/picosam9g45.h | 3 -- include/configs/rk3328_common.h | 2 - include/configs/rk3399_common.h | 3 -- include/configs/sama5d2_ptc.h | 4 -- include/configs/snapper9g45.h | 3 -- include/configs/sunxi-common.h | 1 - include/configs/tam3517-common.h | 1 - include/configs/tao3530.h | 1 - include/configs/tegra114-common.h | 1 - include/configs/tegra124-common.h | 1 - include/configs/tegra20-common.h | 1 - include/configs/tegra210-common.h | 1 - include/configs/tegra30-common.h | 1 - include/configs/ti_armv7_keystone2.h | 1 - include/configs/uniphier.h | 3 -- include/configs/vinco.h | 6 --- include/configs/x86-common.h | 1 - include/configs/xilinx_zynqmp.h | 2 - include/usb.h | 18 ++++++-- include/usb_defs.h | 8 +++- scripts/config_whitelist.txt | 3 -- 68 files changed, 205 insertions(+), 146 deletions(-) -- 2.9.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot