1. 29 9月, 2015 1 次提交
  2. 23 9月, 2015 1 次提交
  3. 19 8月, 2015 1 次提交
  4. 15 8月, 2015 1 次提交
  5. 08 4月, 2015 1 次提交
    • F
      usb: define a generic USB_RESUME_TIMEOUT macro · 62f0342d
      Felipe Balbi 提交于
      Every USB Host controller should use this new
      macro to define for how long resume signalling
      should be driven on the bus.
      
      Currently, almost every single USB controller
      is using a 20ms timeout for resume signalling.
      
      That's problematic for two reasons:
      
      a) sometimes that 20ms timer expires a little
      before 20ms, which makes us fail certification
      
      b) some (many) devices actually need more than
      20ms resume signalling.
      
      Sure, in case of (b) we can state that the device
      is against the USB spec, but the fact is that
      we have no control over which device the certification
      lab will use. We also have no control over which host
      they will use. Most likely they'll be using a Windows
      PC which, again, we have no control over how that
      USB stack is written and how long resume signalling
      they are using.
      
      At the end of the day, we must make sure Linux passes
      electrical compliance when working as Host or as Device
      and currently we don't pass compliance as host because
      we're driving resume signallig for exactly 20ms and
      that confuses certification test setup resulting in
      Certification failure.
      
      Cc: <stable@vger.kernel.org> # v3.10+
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Acked-by: NPeter Chen <peter.chen@freescale.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      62f0342d
  6. 25 1月, 2015 2 次提交
  7. 04 12月, 2014 1 次提交
  8. 25 9月, 2014 1 次提交
    • M
      usb: Add LED triggers for USB activity · 0cfbd328
      Michal Sojka 提交于
      With this patch, USB activity can be signaled by blinking a LED. There
      are two triggers, one for activity on USB host and one for USB gadget.
      
      Both triggers should work with all host/device controllers. Tested only
      with musb.
      
      Performace: I measured performance overheads on ARM Cortex-A8 (TI
      AM335x) running on 600 MHz.
      
      Duration of usb_led_activity():
      - with no LED attached to the trigger:        2 ± 1 µs
      - with one GPIO LED attached to the trigger:  2 ± 1 µs or 8 ± 2 µs (two peaks in histogram)
      
      Duration of functions calling usb_led_activity() (with this patch
      applied and no LED attached to the trigger):
      - __usb_hcd_giveback_urb():    10 - 25 µs
      - usb_gadget_giveback_request(): 2 - 6 µs
      Signed-off-by: NMichal Sojka <sojka@merica.cz>
      Acked-by: NFelipe Balbi <balbi@ti.com>
      Tested-by: NFelipe Balbi <balbi@ti.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0cfbd328
  9. 28 5月, 2014 1 次提交
    • T
      USB: separate usb_address0 mutexes for each bus · 6fecd4f2
      Todd E Brandt 提交于
      This patch creates a separate instance of the usb_address0 mutex for each USB
      bus, and attaches it to the usb_bus device struct. This allows devices on
      separate buses to be enumerated in parallel; saving time.
      
      In the current code, there is a single, global instance of the usb_address0
      mutex which is used for all devices on all buses. This isn't completely
      necessary, as this mutex is only needed to prevent address0 collisions for
      devices on the *same* bus (usb 2.0 spec, sec 4.6.1). This superfluous coverage
      can cause additional delay in system resume on systems with multiple hosts
      (up to several seconds depending on what devices are attached).
      Signed-off-by: NTodd Brandt <todd.e.brandt@linux.intel.com>
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6fecd4f2
  10. 11 3月, 2014 1 次提交
  11. 09 3月, 2014 1 次提交
  12. 05 3月, 2014 2 次提交
  13. 08 2月, 2014 2 次提交
  14. 11 1月, 2014 1 次提交
  15. 03 12月, 2013 1 次提交
    • D
      usb: xhci: Link TRB must not occur within a USB payload burst · 35773dac
      David Laight 提交于
      Section 4.11.7.1 of rev 1.0 of the xhci specification states that a link TRB
      can only occur at a boundary between underlying USB frames (512 bytes for
      high speed devices).
      
      If this isn't done the USB frames aren't formatted correctly and, for example,
      the USB3 ethernet ax88179_178a card will stop sending (while still receiving)
      when running a netperf tcp transmit test with (say) and 8k buffer.
      
      This should be a candidate for stable, the ax88179_178a driver defaults to
      gso and tso enabled so it passes a lot of fragmented skb to the USB stack.
      
      Notes from Sarah:
      
      Discussion: http://marc.info/?l=linux-usb&m=138384509604981&w=2
      
      This patch fixes a long-standing xHCI driver bug that was revealed by a
      change in 3.12 in the usb-net driver.  Commit
      638c5115 "USBNET: support DMA SG" added
      support to use bulk endpoint scatter-gather (urb->sg).  Only the USB
      ethernet drivers trigger this bug, because the mass storage driver sends
      sg list entries in page-sized chunks.
      
      This patch only fixes the issue for bulk endpoint scatter-gather.  The
      problem will still occur for periodic endpoints, because hosts will
      interpret no-op transfers as a request to skip a service interval, which
      is not what we want.
      
      Luckily, the USB core isn't set up for scatter-gather on isochronous
      endpoints, and no USB drivers use scatter-gather for interrupt
      endpoints.  Document this known limitation so that developers won't try
      to use urb->sg for interrupt endpoints until this issue is fixed.  The
      more comprehensive fix would be to allow link TRBs in the middle of the
      endpoint ring and revert this patch, but that fix would touch too much
      code to be allowed in for stable.
      
      This patch should be backported to kernels as old as 3.12, that contain
      the commit 638c5115 "USBNET: support DMA
      SG".  Without this patch, the USB network device gets wedged, and stops
      sending packets.  Mark Lord confirms this patch fixes the regression:
      
      http://marc.info/?l=linux-netdev&m=138487107625966&w=2Signed-off-by: NDavid Laight <david.laight@aculab.com>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Tested-by: NMark Lord <mlord@pobox.com>
      Cc: stable@vger.kernel.org
      35773dac
  16. 17 10月, 2013 1 次提交
    • S
      usb: Don't enable USB 2.0 Link PM by default. · de68bab4
      Sarah Sharp 提交于
      How it's supposed to work:
      --------------------------
      
      USB 2.0 Link PM is a lower power state that some newer USB 2.0 devices
      support.  USB 3.0 devices certified by the USB-IF are required to
      support it if they are plugged into a USB 2.0 only port, or a USB 2.0
      cable is used.  USB 2.0 Link PM requires both a USB device and a host
      controller that supports USB 2.0 hardware-enabled LPM.
      
      USB 2.0 Link PM is designed to be enabled once by software, and the host
      hardware handles transitions to the L1 state automatically.  The premise
      of USB 2.0 Link PM is to be able to put the device into a lower power
      link state when the bus is idle or the device NAKs USB IN transfers for
      a specified amount of time.
      
      ...but hardware is broken:
      --------------------------
      
      It turns out many USB 3.0 devices claim to support USB 2.0 Link PM (by
      setting the LPM bit in their USB 2.0 BOS descriptor), but they don't
      actually implement it correctly.  This manifests as the USB device
      refusing to respond to transfers when it is plugged into a USB 2.0 only
      port under the Haswell-ULT/Lynx Point LP xHCI host.
      
      These devices pass the xHCI driver's simple test to enable USB 2.0 Link
      PM, wait for the port to enter L1, and then bring it back into L0.  They
      only start to break when L1 entry is interleaved with transfers.
      
      Some devices then fail to respond to the next control transfer (usually
      a Set Configuration).  This results in devices never enumerating.
      
      Other mass storage devices (such as a later model Western Digital My
      Passport USB 3.0 hard drive) respond fine to going into L1 between
      control transfers.  They ACK the entry, come out of L1 when the host
      needs to send a control transfer, and respond properly to those control
      transfers.  However, when the first READ10 SCSI command is sent, the
      device NAKs the data phase while it's reading from the spinning disk.
      Eventually, the host requests to put the link into L1, and the device
      ACKs that request.  Then it never responds to the data phase of the
      READ10 command.  This results in not being able to read from the drive.
      
      Some mass storage devices (like the Corsair Survivor USB 3.0 flash
      drive) are well behaved.  They ACK the entry into L1 during control
      transfers, and when SCSI commands start coming in, they NAK the requests
      to go into L1, because they need to be at full power.
      
      Not all USB 3.0 devices advertise USB 2.0 link PM support.  My Point
      Grey USB 3.0 webcam advertises itself as a USB 2.1 device, but doesn't
      have a USB 2.0 BOS descriptor, so we don't enable USB 2.0 Link PM.  I
      suspect that means the device isn't certified.
      
      What do we do about it?
      -----------------------
      
      There's really no good way for the kernel to test these devices.
      Therefore, the kernel needs to disable USB 2.0 Link PM by default, and
      distros will have to enable it by writing 1 to the sysfs file
      /sys/bus/usb/devices/../power/usb2_hardware_lpm.  Rip out the xHCI Link
      PM test, since it's not sufficient to detect these buggy devices, and
      don't automatically enable LPM after the device is addressed.
      
      This patch should be backported to kernels as old as 3.11, that
      contain the commit a558ccdc "usb: xhci:
      add USB2 Link power management BESL support".  Without this fix, some
      USB 3.0 devices will not enumerate or work properly under USB 2.0 ports
      on Haswell-ULT systems.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@vger.kernel.org
      de68bab4
  17. 12 10月, 2013 2 次提交
    • H
      usb-anchor: Delay usb_wait_anchor_empty_timeout wake up till completion is done · 6ec4147e
      Hans de Goede 提交于
      usb_wait_anchor_empty_timeout() should wait till the completion handler
      has run. Both the zd1211rw driver and the uas driver (in its task mgmt) depend
      on the completion handler having completed when usb_wait_anchor_empty_timeout()
      returns, as they read state set by the completion handler after an
      usb_wait_anchor_empty_timeout() call.
      
      But __usb_hcd_giveback_urb() calls usb_unanchor_urb before calling the
      completion handler. This is necessary as the completion handler may
      re-submit and re-anchor the urb. But this introduces a race where the state
      these drivers want to read has not been set yet by the completion handler
      (this race is easily triggered with the uas task mgmt code).
      
      I've considered adding an anchor_count to struct urb, which would be
      incremented on anchor and decremented on unanchor, and then only actually
      do the anchor / unanchor on 0 -> 1 and 1 -> 0 transtions, combined with
      moving the unanchor call in hcd_giveback_urb to after calling the completion
      handler. But this will only work if urb's are only re-anchored to the same
      anchor as they were anchored to before the completion handler ran.
      
      And at least one driver re-anchors to another anchor from the completion
      handler (rtlwifi).
      
      So I have come up with this patch instead, which adds the ability to
      suspend wakeups of usb_wait_anchor_empty_timeout() waiters to the usb_anchor
      functionality, and uses this in __usb_hcd_giveback_urb() to delay wake-ups
      until the completion handler has run.
      Signed-off-by: NHans de Goede <hdegoede@redhat.com>
      Acked-by: NOliver Neukum <oliver@neukum.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6ec4147e
    • H
      usb-anchor: Ensure poisened gets initialized to 0 · 9ef73dbd
      Hans de Goede 提交于
      And do so in a way which ensures that any fields added in the future will
      also get properly zero-ed.
      Signed-off-by: NHans de Goede <hdegoede@redhat.com>
      Acked-by: NOliver Neukum <oliver@neukum.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9ef73dbd
  18. 18 9月, 2013 1 次提交
  19. 13 8月, 2013 1 次提交
  20. 03 8月, 2013 1 次提交
  21. 26 7月, 2013 1 次提交
  22. 25 7月, 2013 1 次提交
    • M
      USB: check sg buffer size in usb_submit_urb · 10e232c5
      Ming Lei 提交于
      USB spec stats that short packet can only appear at the end
      of transfer. Because lost of HC(EHCI/UHCI/OHCI/...) can't
      build a full packet from discontinuous buffers, we introduce
      the limit in usb_submit_urb() to avoid such kind of bad sg buffers
      coming from driver.
      
      The limit might be a bit strict:
      	- platform has iommu to do sg list mapping
      	- some host controllers may support to build full packet from
      	discontinuous buffers.
      
      But considered that most of HCs don't support that, and driver
      need work well or keep consistent on different HCs and ARCHs, we
      have to introduce the limit.
      
      Currently, only usbtest is reported to pass such sg buffers to HC,
      and other users(mass storage, usbfs) don't have the problem.
      
      We don't check it on USB wireless device, because:
      	- wireless devices can't be attached to common USB
      	  bus(EHCI/UHCI/OHCI/...)
      	- the max packet size of endpoint may be odd, and often can't
      	devide 4KB which is a typical usage in usb mass storage application
      Reported-by: NKonstantin Filatov <kfilatov@parallels.com>
      Reported-by: NDenis V. Lunev <den@openvz.org>
      Cc: Felipe Balbi <balbi@ti.com>
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NMing Lei <ming.lei@canonical.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      10e232c5
  23. 17 7月, 2013 1 次提交
  24. 06 6月, 2013 2 次提交
  25. 21 5月, 2013 1 次提交
    • J
      usb: ehci: Only sleep for post-resume handover if devices use persist · 9b790915
      Julius Werner 提交于
      The current EHCI code sleeps a flat 110ms in the resume path if there
      was a USB 1.1 device connected to its companion controller during
      suspend, waiting for the device to reappear and reset so that it can be
      handed back to the companion. This is necessary if the device uses
      persist, so that the companion controller can actually see it during its
      own resume path.
      
      However, if the device doesn't use persist, this is entirely
      unnecessary. We might just as well ignore it and have the normal device
      detection/reset/handoff code handle it asynchronously when it eventually
      shows up. As USB 1.1 devices are almost exclusively HIDs these days (for
      which persist has no value), this can allow distros to shave another
      tenth of a second off their resume time.
      
      In order to enable this optimization, the patch also adds a new
      usb_for_each_dev() iterator that is exported by the USB core and wraps
      bus_for_each_dev() with the logic to differentiate between struct
      usb_device and struct usb_interface on the usb_bus_type bus.
      Signed-off-by: NJulius Werner <jwerner@chromium.org>
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9b790915
  26. 29 3月, 2013 1 次提交
    • A
      USB: remove CONFIG_USB_SUSPEND option · 84ebc102
      Alan Stern 提交于
      This patch (as1675) removes the CONFIG_USB_SUSPEND option, essentially
      replacing it everywhere with CONFIG_PM_RUNTIME (except for one place
      in hub.c, where it is replaced with CONFIG_PM because the code needs
      to be used in both runtime and system PM).  The net result is code
      shrinkage and simplification.
      
      There's very little point in keeping CONFIG_USB_SUSPEND because almost
      everybody enables it.  The few that don't will find that the usbcore
      module has gotten somewhat bigger and they will have to take active
      measures if they want to prevent hubs from being runtime suspended.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      CC: Peter Chen <peter.chen@freescale.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      84ebc102
  27. 26 3月, 2013 1 次提交
  28. 16 3月, 2013 1 次提交
    • N
      USB: fix trivial usb_device kernel-doc errors · dad3cab3
      Nishanth Menon 提交于
      Fix trivial kernel-doc warnings:
      Warning(include/linux/usb.h:574): No description found for parameter 'usb3_lpm_enabled'
      Warning(include/linux/usb.h:574): Excess struct/union/enum/typedef member 'usb_classdev' description in 'usb_device'
      Warning(include/linux/usb.h:574): Excess struct/union/enum/typedef member 'usbfs_dentry' description in 'usb_device'
      
      Cc: Felipe Balbi <balbi@ti.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Jiri Kosina <trivial@kernel.org>
      Cc: linux-usb@vger.kernel.org
      Cc: linux-kernel@vger.kernel.org
      Signed-off-by: NNishanth Menon <nm@ti.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      dad3cab3
  29. 26 1月, 2013 1 次提交
    • A
      USB: add usb_hcd_{start,end}_port_resume · da0aa716
      Alan Stern 提交于
      This patch (as1649) adds a mechanism for host controller drivers to
      inform usbcore when they have begun or ended resume signalling on a
      particular root-hub port.  The core will then make sure that the root
      hub does not get runtime-suspended while the port resume is going on.
      
      Since commit 596d789a (USB: set hub's
      default autosuspend delay as 0), the system tries to suspend hubs
      whenever they aren't in use.  While a root-hub port is being resumed,
      the root hub does not appear to be in use.  Attempted runtime suspends
      fail because of the ongoing port resume, but the PM core just keeps on
      trying over and over again.  We want to prevent this wasteful effort.
      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>
      da0aa716
  30. 01 11月, 2012 1 次提交
  31. 25 10月, 2012 2 次提交
    • A
      USB: speed up usb_bus_resume() · bfd1e910
      Alan Stern 提交于
      This patch (as1620) speeds up USB root-hub resumes in the common case
      where every enabled port has its suspend feature set (which currently
      will be true for every runtime resume of the root hub).  If all the
      enabled ports are suspended then resuming the root hub won't resume
      any of the downstream devices.  In this case there's no need for a
      Resume Recovery delay, because that delay is meant to give devices a
      chance to get ready for active use.
      
      To keep track of the port suspend features, the patch adds a
      "port_is_suspended" flag to struct usb_device.  This has to be tracked
      separately from the device's state; it's entirely possible for a USB-2
      device to be suspended while the suspend feature on its parent port is
      clear.  The reason is that devices will go into suspend whenever their
      parent hub does.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Reviewed-by: NPeter Chen <peter.chen@freescale.com>
      Tested-by: NPeter Chen <peter.chen@freescale.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bfd1e910
    • A
      USB: hub_for_each_child should skip unconnected ports · 969ddcfc
      Alan Stern 提交于
      This patch (as1619) improves the interface to the "hub_for_each_child"
      macro.  The name clearly suggests that the macro iterates over child
      devices; it does not suggest that the loop will also iterate over
      unnconnected ports.
      
      The patch changes the macro so that it will skip over unconnected
      ports and iterate only the actual child devices.  The two existing
      call sites are updated to avoid testing for a NULL child pointer,
      which is now unnecessary.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      969ddcfc
  32. 23 10月, 2012 1 次提交
  33. 18 10月, 2012 1 次提交
  34. 11 9月, 2012 1 次提交
    • L
      usb/acpi: Use ACPI methods to power off ports. · f7ac7787
      Lan Tianyu 提交于
      Upcoming Intel systems will have an ACPI method to control whether a USB
      port can be completely powered off.  The implication of powering off a
      USB port is that the device and host sees a physical disconnect, and
      subsequent port connections and remote wakeups will be lost.
      
      Add a new function, usb_acpi_power_manageable(), that can be used to
      find whether the usb port has ACPI power resources that can be used to
      power on and off the port on these machines. Also add a new function
      called usb_acpi_set_power_state() that controls the port power via these
      ACPI methods.
      
      When the USB core calls into the xHCI hub driver to power off a port,
      check whether the port can be completely powered off via this new ACPI
      mechanism.  If so, call into these new ACPI methods.  Also use the ACPI
      methods when the USB core asks to power on a port.
      Signed-off-by: NLan Tianyu <tianyu.lan@intel.com>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f7ac7787