We are experiencing a complete lock up of the EHCI controller in the i.MX28.
When this happens, the USB bus is completely dead and he D+ and D- signals end up in the J state.
More details about the circumstances in which the EHCI locks up:
- It happens with different usb-to-ethernet dongles (with different drivers)
- We can only reproduce this with FTP for some reason. iperf does not trigger it, even with similar packet sizes and throughput.
- It only happens when the client pc downloads, uploads work fine. (the bulk of the data is OUT)
- The AHB transfers use the default INCR mode, not INCR8 or INCR16 (errata 2858 & ENGR119650)
- Putting a hub between the device and host controller has no effect, the problem still happens, it also happens on both host controllers.
- Varying the amount of outstanding URBs doesn't have any impact.
- We've backported the linux ehci driver from linux 3.6 to 2.6.35 since a lot of ehci fixes look like the might be related but the issue still occurs.
- a usb analyzer always shows the same thing: transfers of 1292 bytes split into 2x 512 and 1x 268. When it goes wrong, the last transfer is 1x 512 and only the first 256 bytes of the second 512 bytes. (with an ellisys usb explorer).
Any help/pointers to avoid, fix or further investigate this issue are greatly appreciated!
The attached file contains the contents of /sys/kernel/debug/usb/ehci/fsl-ehci.0 before, during and after the transfer. It also contains a dump of all the USBCTRL registers.
Original Attachment has been moved to: usb-debug.tgz