linux/drivers/usb/host
George Cherian 07f3cb7c28 usb: host: xhci: Enable XHCI_SPURIOUS_SUCCESS for all controllers with xhci 1.0
Xhci controllers with hci_version > 0.96 gives spurious success
events on short packet completion. During webcam capture the
"ERROR Transfer event TRB DMA ptr not part of current TD" was observed.
The same application works fine with synopsis controllers hci_version 0.96.
The same issue is seen with Intel Pantherpoint xhci controller. So enabling
this quirk in xhci_gen_setup if controller verion is greater than 0.96.
For xhci-pci move the quirk to much generic place xhci_gen_setup.

Note from Sarah:

The xHCI 1.0 spec changed how hardware handles short packets.  The HW
will notify SW of the TRB where the short packet occurred, and it will
also give a successful status for the last TRB in a TD (the one with the
IOC flag set).  On the second successful status, that warning will be
triggered in the driver.

Software is now supposed to not assume the TD is not completed until it
gets that last successful status.  That means we have a slight race
condition, although it should have little practical impact.  This patch
papers over that issue.

It's on my long-term to-do list to fix this race condition, but it is a
much more involved patch that will probably be too big for stable.  This
patch is needed for stable to avoid serious log spam.

This patch should be backported to kernels as old as 3.0, that
contain the commit ad808333d8 "Intel xhci:
Ignore spurious successful event."

The patch will have to be modified for kernels older than 3.2, since
that kernel added the xhci_gen_setup function for xhci platform devices.
The correct conflict resolution for kernels older than 3.2 is to set
XHCI_SPURIOUS_SUCCESS in xhci_pci_quirks for all xHCI 1.0 hosts.

Signed-off-by: George Cherian <george.cherian@ti.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: stable@vger.kernel.org
2013-07-25 08:10:02 -07:00
..
whci wusbhc: disable suspend and resume on the root hub. 2013-06-06 12:14:38 -07:00
bcma-hcd.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
ehci-atmel.c ehci-atmel.c: prepare clk before calling enable 2013-06-24 16:21:52 -07:00
ehci-dbg.c USB: EHCI: convert singly-linked lists to list_heads 2013-03-25 13:35:05 -07:00
ehci-fsl.c usb: fsl: add missing platform_driver owner 2013-05-16 17:48:28 -07:00
ehci-fsl.h powerpc/usb: fix bug of CPU hang when missing USB PHY clock 2012-09-05 16:52:08 -07:00
ehci-grlib.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
ehci-hcd.c USB: EHCI: make ehci-tegra a separate driver 2013-06-17 13:54:48 -07:00
ehci-hub.c USB: EHCI: Fix resume signalling on remote wakeup 2013-07-22 11:35:34 -07:00
ehci-mem.c
ehci-msm.c USB: EHCI: make ehci-msm a separate driver 2013-04-08 09:40:20 -07:00
ehci-mv.c USB: ehci-mv: remove unnecessary platform_set_drvdata() 2013-05-16 17:47:14 -07:00
ehci-mxc.c USB: ehci-mxc: remove unnecessary platform_set_drvdata() 2013-05-16 17:47:15 -07:00
ehci-octeon.c USB: ehci-octeon: remove unnecessary platform_set_drvdata() 2013-05-16 17:47:15 -07:00
ehci-omap.c USB: ehci-omap: Tweak PHY initialization sequence 2013-06-17 13:56:25 -07:00
ehci-orion.c Merge 3.10-rc3 into usb-next 2013-05-27 11:00:52 +09:00
ehci-pci.c USB: Fix initconst in ehci driver 2013-04-23 10:10:29 -07:00
ehci-platform.c ARM SoC specific changes 2013-07-02 13:43:38 -07:00
ehci-pmcmsp.c USB: EHCI: Remove double assignment of .start in ehci_msp_hc_driver 2013-06-17 13:56:25 -07:00
ehci-ppc-of.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
ehci-ps3.c usb: PS3 EHCI remove unneeded ehci_shutdown 2013-04-01 12:32:43 -07:00
ehci-q.c usb: ehci: mark unlink_empty_async_suspended() as __maybe_unused 2013-03-28 14:49:53 -07:00
ehci-s5p.c usb: ehci-s5p: skip phy setup for Exynos5440 based platforms 2013-05-30 21:34:29 +09:00
ehci-sched.c USB: EHCI: fix regression related to qh_refresh() 2013-05-30 21:20:04 +09:00
ehci-sead3.c USB: ehci-sead3: remove unnecessary platform_set_drvdata() 2013-05-16 17:47:16 -07:00
ehci-sh.c USB: ehci-sh: remove unnecessary platform_set_drvdata() 2013-05-16 17:47:17 -07:00
ehci-spear.c usb: host: ehci-spear: Remove redundant checks 2013-05-30 21:32:53 +09:00
ehci-sysfs.c
ehci-tegra.c USB: EHCI: tegra: Fix oops in error cleanup 2013-06-17 13:56:25 -07:00
ehci-tilegx.c usb: host: ehci-tilegx: Remove redundant platform_set_drvdata() 2013-05-17 10:14:52 -07:00
ehci-timer.c USB: EHCI: improve end_unlink_async() 2013-03-25 13:36:32 -07:00
ehci-w90x900.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
ehci-xilinx-of.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
ehci.h USB: EHCI: export ehci_handshake for ehci-hcd sub-drivers 2013-06-17 13:54:47 -07:00
fhci-dbg.c
fhci-hcd.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
fhci-hub.c
fhci-mem.c
fhci-q.c
fhci-sched.c USB: FHCI: upgrade the isochronous API 2013-05-30 21:34:31 +09:00
fhci-tds.c
fhci.h USB: FHCI: upgrade the isochronous API 2013-05-30 21:34:31 +09:00
fsl-mph-dr-of.c USB: fsl-mph-dr-of: fix regression on mpc5121e 2013-01-11 16:01:06 -08:00
fusbh200-hcd.c usb: host: fusbh200-hcd: rename two functions 2013-06-03 10:52:40 -07:00
fusbh200.h usb host: Faraday USB2.0 FUSBH200-HCD driver 2013-05-17 10:12:52 -07:00
hwa-hc.c USB: HWA: fix device probe failure 2013-06-24 16:20:43 -07:00
imx21-dbg.c
imx21-hcd.c USB: IMX21: upgrade the isochronous API 2013-05-30 21:34:30 +09:00
imx21-hcd.h ARM: imx: move platform_data definitions 2012-09-14 11:17:21 +02:00
isp116x-hcd.c usb: remove use of __devinit 2012-11-21 13:27:16 -08:00
isp116x.h
isp1362-hcd.c procfs: new helper - PDE_DATA(inode) 2013-04-09 14:13:32 -04:00
isp1362.h
isp1760-hcd.c USB: remove remaining instances of USB_SUSPEND 2013-05-15 13:44:44 -04:00
isp1760-hcd.h
isp1760-if.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
Kconfig Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2013-07-13 14:52:21 -07:00
Makefile USB: EHCI: make ehci-tegra a separate driver 2013-06-17 13:54:48 -07:00
octeon2-common.c
ohci-at91.c USB: ohci-at91: prepare clk before calling enable 2013-06-24 16:21:52 -07:00
ohci-da8xx.c usb: host: ohci-da8xx: Remove redundant platform_set_drvdata() 2013-05-17 10:14:52 -07:00
ohci-dbg.c
ohci-ep93xx.c usb: remove use of __devinit 2012-11-21 13:27:16 -08:00
ohci-exynos.c USB: set device dma_mask without reference to global data 2013-05-16 17:30:52 -07:00
ohci-hcd.c USB: OHCI: remove bogus #error 2013-06-06 11:16:44 -07:00
ohci-hub.c USB: OHCI: prepare to make ohci-hcd a library module 2013-05-30 21:36:03 +09:00
ohci-jz4740.c USB: ohci-jz4740: remove unnecessary platform_set_drvdata() 2013-05-16 17:47:17 -07:00
ohci-mem.c
ohci-nxp.c drivers/usb/host: remove leftover release_mem_region 2013-05-30 21:32:52 +09:00
ohci-octeon.c usb: host: ohci-octeon: Remove redundant platform_set_drvdata() 2013-05-17 10:14:52 -07:00
ohci-omap3.c Merge 3.10-rc3 into usb-next 2013-05-27 11:00:52 +09:00
ohci-omap.c usb: host: ohci-omap: Remove redundant platform_set_drvdata() 2013-05-17 10:14:53 -07:00
ohci-pci.c USB: OHCI: make ohci-pci a separate driver 2013-05-30 21:36:03 +09:00
ohci-platform.c USB: OHCI: make ohci-platform a separate driver 2013-06-03 11:02:26 -07:00
ohci-ppc-of.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
ohci-ps3.c usb: remove use of __devinit 2012-11-21 13:27:16 -08:00
ohci-pxa27x.c Merge 3.10-rc3 into usb-next 2013-05-27 11:00:52 +09:00
ohci-q.c USB: OHCI: Generic changes to make ohci-pci a separate driver 2013-05-30 21:36:03 +09:00
ohci-s3c2410.c usb: Convert to devm_ioremap_resource() 2013-01-22 11:41:58 -08:00
ohci-sa1111.c usb: remove use of __devinit 2012-11-21 13:27:16 -08:00
ohci-sm501.c USB: ohci-sm501: remove unnecessary platform_set_drvdata() 2013-05-16 17:47:18 -07:00
ohci-spear.c Merge 3.10-rc3 into usb-next 2013-05-27 11:00:52 +09:00
ohci-tilegx.c usb: host: ohci-tilegx: Remove redundant platform_set_drvdata() 2013-05-17 10:14:53 -07:00
ohci-tmio.c usb: host: ohci-tmio: Remove redundant platform_set_drvdata() 2013-05-17 10:14:53 -07:00
ohci.h USB: OHCI: add a name for the platform-private field 2013-06-03 11:03:18 -07:00
oxu210hp-hcd.c Merge 3.10-rc3 into usb-next 2013-05-27 11:00:52 +09:00
oxu210hp.h
pci-quirks.c USB: OHCI: Generic changes to make ohci-pci a separate driver 2013-05-30 21:36:03 +09:00
pci-quirks.h usb: fix build warning in pci-quirks.h when CONFIG_PCI is not enabled 2013-07-25 08:09:55 -07:00
r8a66597-hcd.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
r8a66597.h usb/host/r8a66597: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
sl811_cs.c drivers/usb: use module_pcmcia_driver() in pcmcia drivers 2013-03-15 12:26:38 -07:00
sl811-hcd.c USB: remove remaining instances of USB_SUSPEND 2013-05-15 13:44:44 -04:00
sl811.h
ssb-hcd.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
u132-hcd.c USB: remove CONFIG_USB_SUSPEND option 2013-03-28 11:10:22 -07:00
uhci-debug.c USB: uhci: beautify source code 2013-01-24 13:59:26 -08:00
uhci-grlib.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
uhci-hcd.c Merge 3.8-rc5 into usb-next 2013-01-25 12:41:02 -08:00
uhci-hcd.h USB: UHCI: remove unused definition 2013-01-24 13:42:09 -08:00
uhci-hub.c USB: UHCI: fix for suspend of virtual HP controller 2013-05-15 13:41:40 -04:00
uhci-pci.c
uhci-platform.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
uhci-q.c USB: fix latency in uhci-hcd and ohci-hcd 2013-05-15 13:42:45 -04:00
xhci-dbg.c xhci: Remove BUG_ON in xhci_get_input_control_ctx. 2013-06-14 13:50:17 -07:00
xhci-ext-caps.h usb: xhci: add USB2 Link power management BESL support 2013-06-05 16:48:24 -07:00
xhci-hub.c usb: xhci: define port register names and use them instead of magic numbers 2013-06-05 16:47:21 -07:00
xhci-mem.c xhci: check for failed dma pool allocation 2013-06-18 10:53:54 -07:00
xhci-pci.c usb: host: xhci: Enable XHCI_SPURIOUS_SUCCESS for all controllers with xhci 1.0 2013-07-25 08:10:02 -07:00
xhci-plat.c usb: host: xhci-plat: release mem region while removing module 2013-06-24 16:15:26 -07:00
xhci-ring.c xhci: Remove BUG_ON in xhci_get_input_control_ctx. 2013-06-14 13:50:17 -07:00
xhci.c usb: host: xhci: Enable XHCI_SPURIOUS_SUCCESS for all controllers with xhci 1.0 2013-07-25 08:10:02 -07:00
xhci.h Merge 3.10-rc5 into usb-next 2013-06-08 21:27:51 -07:00