[U-Boot] [RFC PATCH 0/2] OMAP4/5: Add alternative method for HSIC USB devices reset

This patch introduces an alternative method for resetting HSIC-attached USB devices on OMAP4/5, needed for working around the fail to connect with some types. The solution implemented by Dan Murphy for the OMAP5432 uEVM (reset via a callback in the board file, invoked from within usb_hub.c) does work for that board, but is proven to fail for a custom OMAP5430 design. Moreover, the uEVM should not be taken for a OMAP5 "golden standard" due to a hardware limitation: power switches for the two downstream ports of the USB3503A hub (such switches must be controlled by the hub) have been omitted, and VBUS is always present on the sockets whenever DC input power is applied to the board. This could be one of the possible reasons for U-Boot not being able to detect some particular flash drives (that otherwise work correctly on other OMAP4/5 boards), as well as for some known Linux issues.
The proposed patch provides an option for individual reset of HSIC-connected USB devices, with configurable reset hold and delay times, all enabled by defines in the board header only. This option is activated if at least one CONFIG_OMAP_HSIC_PORTx_RESET_GPIO has been defined - then a weak dummy function in ehci-hcd.c (in the USB_PORT_FEAT_POWER feature set by ehci_submit_root()) shall be overridden by a callback in ehci-omap.c that shall do the actual device reset for the specified ports. No changes to the board .c file are required. If desired, Dan's method may be preserved and shall co-exist for other ports if an overriding function is present in the board file.
The patch also fixes HSIC operation on all OMAP5-ES1.0 USB ports.
It has to be noted that this patch proposes a strict differentiation between PHYs and HSIC devices, which seems reasonable - a HSIC-connected device is actually a permanently attached USB slave, while a PHY is just a hardware extension of the host port, and handling them in the same manner is not appropriate.
Tested on the OMAP5432 uEVM, as well as on a custom OMAP5430 board (with two HSIC devices - USB4640 combo hub and LAN9730 Ethernet) and on a custom OMAP4 board (with one USB4640 HSIC hub; tested with OMAP4460 and 4470).
Lubomir Popov (2): ARM: OMAP4/5: Add alternative method for HSIC USB devices reset ARM: omap5_uevm: Example usage of alternative HSIC USB device reset
board/ti/omap5_uevm/evm.c | 2 + drivers/usb/host/ehci-hcd.c | 15 ++++ drivers/usb/host/ehci-omap.c | 174 +++++++++++++++++++++++++++++++++++++----- include/configs/omap5_uevm.h | 13 +++- 4 files changed, 182 insertions(+), 22 deletions(-)
participants (1)
-
Lubomir Popov