[U-Boot] [PATCH v2 1/1] tegra: usb: Fix device enumeration problem of USB1
Stephen Warren
swarren at wwwdotorg.org
Tue Jun 19 19:13:11 CEST 2012
On 06/19/2012 02:47 AM, Jim Lin wrote:
> A known hardware issue of USB1 port where bit 1 (connect status
> change) of PORTSC register will be set after issuing Port Reset
> (like "usb reset" in u-boot command line).
> This will be treated as an error and stops later device enumeration.
>
> Therefore we add a definition in header file and a callback function
> to clear that bit after Port Reset in order to proceed later device
> enumeration.
>
> CONFIG_USB_EHCI_SUBMIT_ROOT_POST_CALLBACK
This style of fix (adding an optional callback from the USB core) seems
like the idea to me. Thanks.
However, I'm a little worried that it implements the bug workaround at a
different time to the Linux kernel. The kernel does:
* Assert reset to the port
* Poll the port for enable (any time delays are here)
* Clear the CSC bit
So, the CSC bit is cleared a long time after the port is reset.
However, this U-Boot patch does:
* Assert reset to the port
* Clear the CSC bit
* Wait a long time; 200mS
* Check the port is enabled
So, the CSC bit is cleared immediately after the port is reset.
Is this U-Boot fix still guaranteed to solve the problem? In your
testing, how many times did you test without this fix, and what was the
failure percentage. How many times did you test with the fix, and what
was the failure percentage?
I think it'd be safer to execute the callback from inside
hub_port_reset() right before the call to usb_get_port_status(). That
would make the time when CSC gets cleared much more equivalent between
the Linux kernel and U-Boot. The implementation of the callback function
could probably be a lot simpler to (e.g. doesn't need to check which
feature is being set etc.)
More information about the U-Boot
mailing list