[RFC][USB] powerpc: Workaround for the PPC440EPX USBH_23 errrata
Vitaly Bordug <vitb <at> kernel.crashing.org>
2008-08-18 22:10:40 GMT
A published errata for ppc440epx states, that when running Linux with both
EHCI and OHCI modules loaded, the EHCI module experiences a fatal error
when a high-speed device is connected to the USB2.0, and functions normally
if OHCI module is not loaded.
Quote from original descriprion:
The 440EPx USB 2.0 Host controller is an EHCI compliant controller. In USB
2.0 Host controllers, each EHCI controller has one or more companion
controllers, which may be OHCI or UHCI. An USB 2.0 Host controller will
contain one or more ports. For each port, only one of the controllers is
connected at any one time. In the 440EPx, there is only one OHCI companion controller,
and only one USB 2.0 Host port.
All ports on an USB 2.0 controller default to the companion controller. If
you load only an ohci driver, it will have control of the ports and any
deviceplugged in will operate, although high speed devices will be forced to
operate at full speed. When an ehci driver is loaded, it explicitly takes control
of the ports. If there is a device connected, and / or every time there is a
new device connected, the ehci driver determines if the device is high speed or
not. If it is high speed, the driver retains control of the port. If it
is not, the driver explicitly gives the companion controller control of the
port.
There is a software workaround that uses a trick to detect if full-speed interface
is enabled from the hi-speed driver(and vice versa), and use suspend control for ohci
to enable/disable it appropriately.
Initial version of the software workaround was posted to linux-usb-devel:
http://www.mail-archive.com/linux-usb-devel <at> lists.sourceforge.net/msg54019.html
(Continue reading)