linux/drivers/usb
John Youn c450960187 usb: dwc3: Fix assignment of EP transfer resources
The assignement of EP transfer resources was not handled properly in the
dwc3 driver. Commit aebda61871 ("usb: dwc3: Reset the transfer
resource index on SET_INTERFACE") previously fixed one aspect of this
where resources may be exhausted with multiple calls to SET_INTERFACE.
However, it introduced an issue where composite devices with multiple
interfaces can be assigned the same transfer resources for different
endpoints. This patch solves both issues.

The assignment of transfer resources cannot perfectly follow the data
book due to the fact that the controller driver does not have all
knowledge of the configuration in advance. It is given this information
piecemeal by the composite gadget framework after every
SET_CONFIGURATION and SET_INTERFACE. Trying to follow the databook
programming model in this scenario can cause errors. For two reasons:

1) The databook says to do DEPSTARTCFG for every SET_CONFIGURATION and
SET_INTERFACE (8.1.5). This is incorrect in the scenario of multiple
interfaces.

2) The databook does not mention doing more DEPXFERCFG for new endpoint
on alt setting (8.1.6).

The following simplified method is used instead:

All hardware endpoints can be assigned a transfer resource and this
setting will stay persistent until either a core reset or hibernation.
So whenever we do a DEPSTARTCFG(0) we can go ahead and do DEPXFERCFG for
every hardware endpoint as well. We are guaranteed that there are as
many transfer resources as endpoints.

This patch triggers off of the calling dwc3_gadget_start_config() for
EP0-out, which always happens first, and which should only happen in one
of the above conditions.

Fixes: aebda61871 ("usb: dwc3: Reset the transfer resource index on SET_INTERFACE")
Cc: <stable@vger.kernel.org> # v3.2+
Reported-by: Ravi Babu <ravibabu@ti.com>
Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
2016-02-17 10:31:53 +02:00
..
atm
c67x00
chipidea Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2016-01-20 09:45:43 -08:00
class cdc-acm:exclude Samsung phone 04e8:685d 2016-01-24 21:06:21 -08:00
common usb: of: add an api to get dr_mode by the phy node 2015-12-15 09:12:41 -06:00
core usb: hub: do not clear BOS field during reset device 2016-01-24 21:06:21 -08:00
dwc2 usb: dwc2: Add extra delay when forcing dr_mode 2016-02-17 10:31:42 +02:00
dwc3 usb: dwc3: Fix assignment of EP transfer resources 2016-02-17 10:31:53 +02:00
early
gadget wrappers for ->i_mutex access 2016-01-22 18:04:28 -05:00
host xhci: harden xhci_find_next_ext_cap against device removal 2016-02-04 17:00:10 -08:00
image
isp1760
misc USB patches for 4.5-rc1 2016-01-13 09:26:40 -08:00
mon USB: usbmon: remove assignment from IS_ERR argument 2016-01-03 16:55:59 -08:00
musb usb: musb: ux500: Fix NULL pointer dereference at system PM 2016-02-03 20:03:40 +02:00
phy usb: phy: mxs: declare variable with initialized value 2016-02-03 19:57:41 +02:00
renesas_usbhs usb: renesas_usbhs: add fallback compatibility strings 2015-12-16 10:53:51 -06:00
serial USB: option: fix Cinterion AHxx enumeration 2016-01-25 13:32:53 +01:00
storage Merge 4.4-rc5 into usb-next as we want those fixes here for testing 2015-12-13 19:20:27 -08:00
usbip usbip: vhci_hcd: at unlink, return -EIDRM if vhci_rx took the urb 2015-10-04 10:59:03 +01:00
wusbcore
Kconfig
Makefile usb-host: Remove fusbh200 driver 2015-10-16 23:44:33 -07:00
README
usb-skeleton.c

To understand all the Linux-USB framework, you'll use these resources:

    * This source code.  This is necessarily an evolving work, and
      includes kerneldoc that should help you get a current overview.
      ("make pdfdocs", and then look at "usb.pdf" for host side and
      "gadget.pdf" for peripheral side.)  Also, Documentation/usb has
      more information.

    * The USB 2.0 specification (from www.usb.org), with supplements
      such as those for USB OTG and the various device classes.
      The USB specification has a good overview chapter, and USB
      peripherals conform to the widely known "Chapter 9".

    * Chip specifications for USB controllers.  Examples include
      host controllers (on PCs, servers, and more); peripheral
      controllers (in devices with Linux firmware, like printers or
      cell phones); and hard-wired peripherals like Ethernet adapters.

    * Specifications for other protocols implemented by USB peripheral
      functions.  Some are vendor-specific; others are vendor-neutral
      but just standardized outside of the www.usb.org team.

Here is a list of what each subdirectory here is, and what is contained in
them.

core/		- This is for the core USB host code, including the
		  usbfs files and the hub class driver ("hub_wq").

host/		- This is for USB host controller drivers.  This
		  includes UHCI, OHCI, EHCI, and others that might
		  be used with more specialized "embedded" systems.

gadget/		- This is for USB peripheral controller drivers and
		  the various gadget drivers which talk to them.


Individual USB driver directories.  A new driver should be added to the
first subdirectory in the list below that it fits into.

image/		- This is for still image drivers, like scanners or
		  digital cameras.
../input/	- This is for any driver that uses the input subsystem,
		  like keyboard, mice, touchscreens, tablets, etc.
../media/	- This is for multimedia drivers, like video cameras,
		  radios, and any other drivers that talk to the v4l
		  subsystem.
../net/		- This is for network drivers.
serial/		- This is for USB to serial drivers.
storage/	- This is for USB mass-storage drivers.
class/		- This is for all USB device drivers that do not fit
		  into any of the above categories, and work for a range
		  of USB Class specified devices. 
misc/		- This is for all USB device drivers that do not fit
		  into any of the above categories.