linux/arch
Vitaly Bordug 796bcae736 USB: powerpc: Workaround for the PPC440EPX USBH_23 errata [take 3]
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.

There used to be recommendation to use only hi-speed or full-speed
devices with specific conditions, when respective module was unloaded.
Later, it was observed that ohci suspend is enough to keep things
going, and it was turned into workaround, as explained below.

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.

The is a software workaround that uses
Initial version of the software workaround was posted to
linux-usb-devel:

http://www.mail-archive.com/linux-usb-devel@lists.sourceforge.net/msg54019.html

and later available from amcc.com:
http://www.amcc.com/Embedded/Downloads/download.html?cat=1&family=15&ins=2

The patch below is generally based on the latter, but reworked to
powerpc/of_device USB drivers, and uses a few devicetree inquiries to
get rid of (some) hardcoded defines.

Signed-off-by: Vitaly Bordug <vitb@kernel.crashing.org>
Signed-off-by: Stefan Roese <sr@denx.de>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-01-07 09:59:52 -08:00
..
alpha alpha: introduce asm/swab.h 2009-01-06 18:10:27 -08:00
arm arm: introduce asm/swab.h 2009-01-06 18:10:28 -08:00
avr32 avr32: introduce asm/swab.h 2009-01-06 18:10:26 -08:00
blackfin blackfin: introduce asm/swab.h 2009-01-06 18:10:28 -08:00
cris Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6 2009-01-06 17:04:29 -08:00
frv take init_fs to saner place 2008-12-31 18:07:42 -05:00
h8300 h8300: introduce asm/swab.h 2009-01-06 18:10:28 -08:00
ia64 ia64: introduce asm/swab.h 2009-01-06 18:10:28 -08:00
m32r Merge branch 'cpus4096-for-linus-3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-01-03 12:04:39 -08:00
m68k m68k: fix recursive dependency in Kconfig 2009-01-02 20:43:20 +01:00
m68knommu m68knommu: introduce asm/swab.h 2009-01-06 18:10:28 -08:00
mips mips: introduce asm/swab.h 2009-01-06 18:10:27 -08:00
mn10300 take init_fs to saner place 2008-12-31 18:07:42 -05:00
parisc atomic_t: unify all arch definitions 2009-01-06 15:59:10 -08:00
powerpc USB: powerpc: Workaround for the PPC440EPX USBH_23 errata [take 3] 2009-01-07 09:59:52 -08:00
s390 s390: introduce asm/swab.h 2009-01-06 18:10:27 -08:00
sh sh: introduce asm/swab.h 2009-01-06 18:10:27 -08:00
sparc sparc: introduce asm/swab.h 2009-01-06 18:10:27 -08:00
um mm: invoke oom-killer from page fault 2009-01-06 15:58:58 -08:00
x86 x86: introduce asm/swab.h 2009-01-06 18:10:27 -08:00
xtensa take init_fs to saner place 2008-12-31 18:07:42 -05:00
.gitignore
Kconfig oprofile: select RING_BUFFER 2008-12-12 09:46:31 +01:00