We have experienced a fatal usb error that occurs both on our own custom board, using a modified mainline Linux 3.10, and on the imx28-evk, using the BSP L2.6.35_1.1.0_130130_source.tar.gz.
On our custom board, we have seen it sometimes during loading of the usb driver, and consistently when changing the speed while the usb is in use. On the imx28-evk, in happens consistently when changing speed, and we can not rule out if it happens during load as well.
To recreate it, attach an USB-to-serial adapter and run the following two commands:
cat /dev/ttyUSB0 &
echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
fsl-ehci fsl-ehci.0: fatal error
fsl-ehci fsl-ehci.0: force halt; handshake c88fe144 00004000 00004000 -> -110
fsl-ehci fsl-ehci.0: HC died; cleaning up
usb 2-1: USB disconnect, address 3
pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
pl2303 2-1:1.0: device disconnected
On mainline 3.10:
ci_hdrc ci_hdrc.1: fatal error
ci_hdrc ci_hdrc.1: fatal command 0010024 (park)=0 ithresh=1 Async period=512 HALT
ci_hdrc ci_hdrc.1: fatal status 8090 Async FATAL
ci_hdrc ci_hdrc.1: HC died; cleaning up
From what I can tell, the error is caused by bit 4 in HW_USBCTRL_USBSTS, SEI being set to 1 ( Linux/drivers/usb/host/ehci-hcd.c - Linux Cross Reference - Free Electrons ). Printing out the register (0x80090144) from the function, shows that the bit is set.
According to the Reference Manual, "This bit is not used in this implementation and will always be set to 0."
Has anyone else experienced this, and is the Reference Manual correct, or does a situation exist that will cause the bit to be set?