Skip to content
  • Vitaly Bordug's avatar
    USB: powerpc: Workaround for the PPC440EPX USBH_23 errata [take 3] · 796bcae7
    Vitaly Bordug authored
    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: default avatarVitaly Bordug <vitb@kernel.crashing.org>
    Signed-off-by: default avatarStefan Roese <sr@denx.de>
    Cc: David Brownell <dbrownell@users.sourceforge.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    796bcae7