1. 16 3月, 2013 1 次提交
  2. 05 3月, 2013 2 次提交
    • A
      USB: EHCI: don't check DMA values in QH overlays · feca7746
      Alan Stern 提交于
      This patch (as1661) fixes a rather obscure bug in ehci-hcd.  In a
      couple of places, the driver compares the DMA address stored in a QH's
      overlay region with the address of a particular qTD, in order to see
      whether that qTD is the one currently being processed by the hardware.
      (If it is then the status in the QH's overlay region is more
      up-to-date than the status in the qTD, and if it isn't then the
      overlay's value needs to be adjusted when the QH is added back to the
      active schedule.)
      
      However, DMA address in the overlay region isn't always valid.  It
      sometimes will contain a stale value, which may happen by coincidence
      to be equal to a qTD's DMA address.  Instead of checking the DMA
      address, we should check whether the overlay region is active and
      valid.  The patch tests the ACTIVE bit in the overlay, and clears this
      bit when the overlay becomes invalid (which happens when the
      currently-executing URB is unlinked).
      
      This is the second part of a fix for the regression reported at:
      
      	https://bugs.launchpad.net/bugs/1088733Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Reported-by: NJoseph Salisbury <joseph.salisbury@canonical.com>
      Reported-and-tested-by: NStephen Thirlwall <sdt@dr.com>
      CC: <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      feca7746
    • A
      USB: EHCI: work around silicon bug in Intel's EHCI controllers · 6402c796
      Alan Stern 提交于
      This patch (as1660) works around a hardware problem present in some
      (if not all) Intel EHCI controllers.  After a QH has been unlinked
      from the async schedule and the corresponding IAA interrupt has
      occurred, the controller is not supposed access the QH and its qTDs.
      There certainly shouldn't be any more DMA writes to those structures.
      Nevertheless, Intel's controllers have been observed to perform a
      final writeback to the QH's overlay region and to the most recent qTD.
      For more information and a test program to determine whether this
      problem is present in a particular controller, see
      
      	http://marc.info/?l=linux-usb&m=135492071812265&w=2
      	http://marc.info/?l=linux-usb&m=136182570800963&w=2
      
      This patch works around the problem by always waiting for two IAA
      cycles when unlinking an async QH.  The extra IAA delay gives the
      controller time to perform its final writeback.
      
      Surprisingly enough, the effects of this silicon bug have gone
      undetected until quite recently.  More through luck than anything
      else, it hasn't caused any apparent problems.  However, it does
      interact badly with the path that follows this one, so it needs to be
      addressed.
      
      This is the first part of a fix for the regression reported at:
      
      	https://bugs.launchpad.net/bugs/1088733Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Tested-by: NStephen Thirlwall <sdt@dr.com>
      CC: <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6402c796
  3. 27 2月, 2013 1 次提交
    • A
      USB: EHCI: revert "remove ASS/PSS polling timeout" · 221f8dfc
      Alan Stern 提交于
      This patch (as1649) reverts commit
      55bcdce8 (USB: EHCI: remove ASS/PSS
      polling timeout).  That commit was written under the assumption that
      some controllers may take a very long time to turn off their async and
      periodic schedules.  It now appears that in fact the schedules do get
      turned off reasonably quickly, but some controllers occasionally leave
      the schedules' status bits turned on and consequently ehci-hcd can't
      tell that the schedules are off.
      
      VIA controllers in particular have this problem.  ehci-hcd tells the
      hardware to turn off the async schedule, the schedule does get turned
      off, but the status bit remains on.  Since the EHCI spec requires that
      the schedules not be re-enabled until the previous disable has taken
      effect, with an unlimited timeout the async schedule never gets turned
      back on.  The resulting symptom is that the system is unable to
      communicate with USB devices.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Reported-and-tested-by: NRonald <ronald645@gmail.com>
      Reported-and-tested-by: NPaul Hartman <paul.hartman@gmail.com>
      Reported-and-tested-by: NDieter Nützel <dieter@nuetzel-hh.de>
      Reported-and-tested-by: NJean Delvare <khali@linux-fr.org>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      221f8dfc
  4. 21 2月, 2013 3 次提交
  5. 19 2月, 2013 1 次提交
  6. 16 2月, 2013 2 次提交
    • M
      USB: EHCI: make ehci-orion a separate driver · 6ed3c43d
      Manjunath Goudar 提交于
      With the multiplatform changes in arm-soc tree, it becomes
      possible to enable the mvebu platform (which uses
      ehci-orion) at the same time as other platforms that require
      a conflicting EHCI bus glue. At the moment, this results
      in a warning like
      
      drivers/usb/host/ehci-hcd.c:1297:0: warning: "PLATFORM_DRIVER" redefined [enabled by default]
      drivers/usb/host/ehci-hcd.c:1277:0: note: this is the location of the previous definition
      drivers/usb/host/ehci-orion.c:334:31: warning: 'ehci_orion_driver' defined but not used [-Wunused-variable]
      
      and an ehci driver that only works on one of them.
      
      With the infrastructure added by Alan Stern in patch 3e023203
      "USB: EHCI: prepare to make ehci-hcd a library module", we can
      avoid this problem by turning a bus glue into a separate
      module, as we do here for the orion bus glue.
      Signed-off-by: NManjunath Goudar <manjunath.goudar@linaro.org>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Cc: Andrew Lunn <andrew@lunn.ch>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6ed3c43d
    • M
      USB: EHCI: make ehci-vt8500 a separate driver · d57ada0c
      Manjunath Goudar 提交于
      With the multiplatform changes in arm-soc tree, it becomes
      possible to enable the vt8500 platform at the same time
      as other platforms that require a conflicting EHCI bus
      glue. At the moment, this results in a warning like
      
      drivers/usb/host/ehci-hcd.c:1277:0: warning: "PLATFORM_DRIVER" redefined [enabled by default]
      drivers/usb/host/ehci-hcd.c:1257:0: note: this is the location of the previous definition
      drivers/usb/host/ehci-omap.c:319:31: warning: 'ehci_hcd_omap_driver' defined but not used [-Wunused-variable]
      
      and an ehci driver that only works on one of them.
      
      With the infrastructure added by Alan Stern in patch 3e023203
      "USB: EHCI: prepare to make ehci-hcd a library module", we can
      avoid this problem by turning a bus glue into a separate
      module, as we do here for the vt8500 bus glue.
      Signed-off-by: NManjunath Goudar <manjunath.goudar@linaro.org>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NTony Prisk <linux@prisktech.co.nz>
      Cc: Alexey Charkov <alchark@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d57ada0c
  7. 15 2月, 2013 2 次提交
  8. 13 2月, 2013 1 次提交
  9. 09 2月, 2013 1 次提交
  10. 31 1月, 2013 2 次提交
  11. 30 1月, 2013 1 次提交
  12. 29 1月, 2013 4 次提交
  13. 26 1月, 2013 5 次提交
    • A
      USB: EHCI: fix timer bug affecting port resume · ee74290b
      Alan Stern 提交于
      This patch (as1652) fixes a long-standing bug in ehci-hcd.  The driver
      relies on status polls to know when to stop port-resume signalling.
      It uses the root-hub status timer to schedule these status polls.  But
      when the driver for the root hub is resumed, the timer is rescheduled
      to go off immediately -- before the port is ready.  When this happens
      the timer does not get re-enabled, which prevents the port resume from
      finishing until some other event occurs.
      
      The symptom is that when a new device is plugged in, it doesn't get
      recognized or enumerated until lsusb is run or something else happens.
      
      The solution is to re-enable the root-hub status timer after every
      status poll while a port resume is in progress.
      
      This bug hasn't surfaced before now because we never used to try to
      suspend the root hub in the middle of a port resume (except by
      coincidence).
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Reported-and-tested-by: NNorbert Preining <preining@logic.at>
      Tested-by: NMing Lei <ming.lei@canonical.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ee74290b
    • A
      USB: UHCI: notify usbcore about port resumes · 840008bb
      Alan Stern 提交于
      This patch (as1651) adds calls to the new
      usb_hcd_{start,end}_port_resume() functions to uhci-hcd.  Now UHCI
      root hubs won't be runtime suspended while they are sending a resume
      signal to one of their ports.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      840008bb
    • A
      USB: EHCI: notify usbcore about port resumes · f292e7f9
      Alan Stern 提交于
      This patch (as1650) adds calls to the new
      usb_hcd_{start,end}_port_resume() functions to ehci-hcd.  Now EHCI
      root hubs won't be runtime suspended while they are sending a resume
      signal to one of their ports.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Tested-by: NMing Lei <ming.lei@canonical.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f292e7f9
    • A
      USB: EHCI: unlink one async QH at a time · 6e0c3339
      Alan Stern 提交于
      This patch (as1648) fixes a regression affecting nVidia EHCI
      controllers.  Evidently they don't like to have more than one async QH
      unlinked at a time.  I can't imagine how they manage to mess it up,
      but at least one of them does.
      
      The patch changes the async unlink logic in two ways:
      
      	Each time an IAA cycle is started, only the first QH on the
      	async unlink list is handled (rather than all of them).
      
      	Async QHs do not all get unlinked as soon as they have been
      	empty for long enough.  Instead, only the last one (i.e., the
      	one that has been on the schedule the longest) is unlinked,
      	and then only if no other unlinks are in progress at the time.
      
      This means that when multiple QHs are empty, they won't be unlinked as
      quickly as before.  That's okay; it won't affect correct operation of
      the driver or add an excessive load.  Multiple unlinks tend to be
      relatively rare in any case.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Reported-and-tested-by: NPiergiorgio Sartor <piergiorgio.sartor@nexgo.de>
      Cc: stable <stable@vger.kernel.org> # 3.6
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6e0c3339
    • A
      USB: EHCI: remove ASS/PSS polling timeout · 55bcdce8
      Alan Stern 提交于
      This patch (as1647) attempts to work around a problem that seems to
      affect some nVidia EHCI controllers.  They sometimes take a very long
      time to turn off their async or periodic schedules.  I don't know if
      this is a result of other problems, but in any case it seems wise not
      to depend on schedule enables or disables taking effect in any
      specific length of time.
      
      The patch removes the existing 20-ms timeout for enabling and
      disabling the schedules.  The driver will now continue to poll the
      schedule state at 1-ms intervals until the controller finally decides
      to obey the most recent command issued by the driver.  Just in case
      this hides a problem, a debugging message will be logged if the
      controller takes longer than 20 polls.
      
      I don't know if this will actually fix anything, but it can't hurt.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Tested-by: NPiergiorgio Sartor <piergiorgio.sartor@nexgo.de>
      CC: <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      55bcdce8
  14. 25 1月, 2013 10 次提交
  15. 24 1月, 2013 1 次提交
    • A
      USB: EHCI: fix build error in ehci-mxc · dba63b2f
      Alan Stern 提交于
      This patch (as1643b) fixes a build error in ehci-hcd when compiling for
      ARM with allmodconfig:
      
      drivers/usb/host/ehci-hcd.c:1285:0: warning: "PLATFORM_DRIVER" redefined [enabled by default]
      drivers/usb/host/ehci-hcd.c:1255:0: note: this is the location of the previous definition
      drivers/usb/host/ehci-mxc.c:280:31: warning: 'ehci_mxc_driver' defined but not used [-Wunused-variable]
      drivers/usb/host/ehci-hcd.c:1285:0: warning: "PLATFORM_DRIVER" redefined [enabled by default]
      drivers/usb/host/ehci-hcd.c:1255:0: note: this is the location of the previous definition
      
      The fix is to convert ehci-mxc over to the new "ehci-hcd is a library"
      scheme so that it can coexist peacefully with the ehci-platform
      driver.  As part of the conversion the ehci_mxc_priv data structure,
      which was allocated dynamically, is now placed where it belongs: in
      the private area at the end of struct ehci_hcd.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Tested-by: NShawn Guo <shawn.guo@linaro.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      dba63b2f
  16. 23 1月, 2013 3 次提交