linux/drivers/usb/host
Lu Baolu 3372538a5a usb: xhci: apply XHCI_AVOID_BEI quirk to all Intel xHCI controllers
[ Upstream commit 227a4fd801 ]

When a device with an isochronous endpoint is plugged into the Intel
xHCI host controller, and the driver submits multiple frames per URB,
the xHCI driver will set the Block Event Interrupt (BEI) flag on all
but the last TD for the URB. This causes the host controller to place
an event on the event ring, but not send an interrupt. When the last
TD for the URB completes, BEI is cleared, and we get an interrupt for
the whole URB.

However, under Intel xHCI host controllers, if the event ring is full
of events from transfers with BEI set,  an "Event Ring is Full" event
will be posted to the last entry of the event ring,  but no interrupt
is generated. Host will cease all transfer and command executions and
wait until software completes handling the pending events in the event
ring.  That means xHC stops, but event of "event ring is full" is not
notified. As the result, the xHC looks like dead to user.

This patch is to apply XHCI_AVOID_BEI quirk to Intel xHC devices. And
it should be backported to kernels as old as 3.0, that contains the
commit 69e848c209 ("Intel xhci: Support EHCI/xHCI port switching.").

Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Tested-by: Alistair Grant <akgrant0710@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2015-04-24 17:13:58 -04:00
..
whci usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
bcma-hcd.c bcma: store more alternative addresses 2014-09-09 15:33:05 -04:00
ehci-atmel.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ehci-dbg.c usb: Use dev_is_pci() to check whether it is pci device 2013-12-08 18:01:56 -08:00
ehci-exynos.c usb: host: ehci-exynos: Remove unnecessary usb-phy support 2014-09-29 11:50:39 -04:00
ehci-fsl.c usb: rename phy to usb_phy in HCD 2014-09-29 11:52:59 -04: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: ehci-grlib: use dev_err() instead of printk() 2013-12-18 16:32:41 -08:00
ehci-hcd.c usb: hub: rename khubd to hub_wq in documentation and comments 2014-09-23 22:33:19 -07:00
ehci-hub.c usb: rename phy to usb_phy in HCD 2014-09-29 11:52:59 -04:00
ehci-mem.c USB: EHCI: don't allocate hardware periodic table atomically by default 2014-07-09 16:16:07 -07:00
ehci-msm.c usb: rename phy to usb_phy in HCD 2014-09-29 11:52:59 -04:00
ehci-mv.c usb: host: ehci-mv: Use devm_ioremap_resource instead of devm_ioremap 2014-05-27 14:52:29 -07:00
ehci-mxc.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ehci-octeon.c USB: ehci-octeon: Use devm_ioremap_resource() 2013-12-18 16:34:20 -08:00
ehci-omap.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ehci-orion.c usb: ehci-orion: add optional PHY support 2014-05-27 15:33:12 -07:00
ehci-pci.c USB: ehci-pci: USB host controller support for Intel Quark X1000 2014-07-09 16:16:07 -07:00
ehci-platform.c usb: ehci-platform: add optional reset controller retrieval 2014-05-27 15:53:01 -07:00
ehci-pmcmsp.c MIPS: MSP71xx: Remove checks for two macros 2014-05-23 15:12:39 +02:00
ehci-ppc-of.c USB: ehci-ppc-of: use dev_err() instead of printk() 2013-12-18 16:32:41 -08:00
ehci-ps3.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ehci-q.c usb: kill DEBUG compile option 2013-12-03 10:34:33 -08:00
ehci-sched.c USB: EHCI: fix initialization bug in iso_stream_schedule() 2015-01-27 08:29:43 -08:00
ehci-sead3.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ehci-sh.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ehci-spear.c USB: ehci-spear: Make of_device_id array const 2014-07-09 16:13:03 -07:00
ehci-st.c usb: host: ehci-st: Add EHCI support for ST STB devices 2014-09-23 21:35:50 -07:00
ehci-sysfs.c USB: EHCI: use a bandwidth-allocation table 2013-10-11 16:45:43 -07:00
ehci-tegra.c usb: rename phy to usb_phy in HCD 2014-09-29 11:52:59 -04:00
ehci-tilegx.c tile: usb: Use irq_alloc/free_hwirq 2014-05-16 14:05:20 +02:00
ehci-timer.c USB: EHCI: improve interrupt qh unlink 2013-08-12 11:43:48 -07:00
ehci-w90x900.c USB: ehci-w90x900: Use devm_ioremap_resource() 2013-12-18 16:35:11 -08:00
ehci-xilinx-of.c drivers/usb/host/ehci-xilinx-of.c: Include "linux/of_irq.h" to avoid compiling error 2014-09-23 22:09:46 -07:00
ehci.h USB: EHCI: Export the ehci_hub_control function 2014-04-24 13:05:32 -07:00
fhci-dbg.c drivers/usb/host/fhci-dbg.c: remove unnecessary null test before debugfs_remove 2014-07-09 16:13:03 -07:00
fhci-hcd.c usb: hub: rename khubd to hub_wq in documentation and comments 2014-09-23 22:33:19 -07:00
fhci-hub.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fhci-mem.c USB: make hcd.h public (drivers dependency) 2010-05-20 13:21:30 -07:00
fhci-q.c USB: make hcd.h public (drivers dependency) 2010-05-20 13:21:30 -07:00
fhci-sched.c USB: FHCI: upgrade the isochronous API 2013-05-30 21:34:31 +09:00
fhci-tds.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fhci.h USB: FHCI: upgrade the isochronous API 2013-05-30 21:34:31 +09:00
fotg210-hcd.c usb: hub: rename khubd to hub_wq in documentation and comments 2014-09-23 22:33:19 -07:00
fotg210.h fotg210: remove conditional compilation 2013-12-03 10:28:39 -08:00
fsl-mph-dr-of.c USB: fsl-mph-dr-of: adjust for OF based clock lookup 2014-01-12 18:53:05 +01:00
fusbh200-hcd.c usb: hub: rename khubd to hub_wq in documentation and comments 2014-09-23 22:33:19 -07:00
fusbh200.h fusb200h: always compile in debugfs support 2013-12-03 10:31:21 -08:00
hwa-hc.c USB: HWA: fix a warning message 2014-11-03 15:26:15 -08:00
imx21-dbg.c usb: kill DEBUG compile option 2013-12-03 10:34:33 -08:00
imx21-hcd.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
imx21-hcd.h usb: kill DEBUG compile option 2013-12-03 10:34:33 -08:00
isp116x-hcd.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
isp116x.h USB: isp116x: remove dependency on CONFIG_USB_DEBUG 2013-07-23 16:35:17 -07:00
isp1362-hcd.c USB: isp1362: Use devm_ioremap_resource 2014-09-23 21:33:10 -07:00
isp1362.h USB: isp1362: move debug files from proc to debugfs 2013-07-24 14:43:05 -07:00
isp1760-hcd.c USB: add flag for HCDs that can't receive wakeup requests (isp1760-hcd) 2015-03-06 14:53:00 -08:00
isp1760-hcd.h usb/isp1760: Allow to optionally trigger low-level chip reset via GPIOLIB. 2011-10-19 13:29:06 -07:00
isp1760-if.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
Kconfig usb: Remove references to non-existent PLAT_S5P symbol 2014-11-03 15:26:16 -08:00
Makefile USB: host: st: fix typo 'CONFIG_USB_EHCI_HCD_ST' 2014-10-03 14:50:10 -07:00
max3421-hcd.c usb: host: max3421-hcd: unconditionally use GFP_ATOMIC in max3421_urb_enqueue() 2014-07-09 16:06:50 -07:00
octeon2-common.c usb: Configure octeon2 glue logic for proper uSOF cycle period. 2011-05-03 10:09:32 -07:00
ohci-at91.c USB: OHCI: Export the OHCI hub control and status_data functions 2014-04-24 13:05:32 -07:00
ohci-da8xx.c USB: ohci-da8xx: Use devm_*() functions 2013-12-18 16:35:11 -08:00
ohci-dbg.c USB: OHCI: fix bugs in debug routines 2014-07-17 17:05:07 -07:00
ohci-exynos.c usb: host: ohci-exynos: Remove unnecessary usb-phy support 2014-09-23 21:53:48 -07:00
ohci-hcd.c usb: hub: rename khubd to hub_wq in documentation and comments 2014-09-23 22:33:19 -07:00
ohci-hub.c usb: hub: rename khubd to hub_wq in documentation and comments 2014-09-23 22:33:19 -07:00
ohci-jz4740.c USB: ohci-jz4740: FEAT_POWER is a port feature, not a hub feature 2014-04-16 13:59:41 -07:00
ohci-mem.c USB: OHCI: add I/O watchdog for orphan TDs 2014-07-18 16:34:07 -07:00
ohci-nxp.c USB: ohci-nxp: Use devm_clk_get() 2013-12-18 16:36:10 -08:00
ohci-octeon.c USB: ohci-octeon: Use devm_ioremap_resource() 2013-12-18 16:36:11 -08:00
ohci-omap.c usb: rename phy to usb_phy in HCD 2014-09-29 11:52:59 -04:00
ohci-omap3.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ohci-pci.c USB: OHCI: fix problem with global suspend on ATI controllers 2014-05-03 17:58:46 -04:00
ohci-platform.c usb: ohci-platform: Enable optional use of reset controller 2014-05-27 15:53:00 -07:00
ohci-ppc-of.c USB: ohci-ppc-of: Use devm_ioremap_resource() 2013-12-18 16:36:10 -08:00
ohci-ps3.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ohci-pxa27x.c USB: ohci-pxa27x: Add support for external vbus regulators 2014-04-24 13:05:32 -07:00
ohci-q.c USB: OHCI: add I/O watchdog for orphan TDs 2014-07-18 16:34:07 -07:00
ohci-s3c2410.c USB: OHCI: Export the OHCI hub control and status_data functions 2014-04-24 13:05:32 -07:00
ohci-sa1111.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ohci-sm501.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
ohci-spear.c USB: ohci-spear: Make of_device_id array const 2014-07-09 16:13:03 -07:00
ohci-st.c usb: host: ohci-st: Add OHCI driver support for ST STB devices 2014-09-23 21:35:50 -07:00
ohci-tilegx.c tile: usb: Use irq_alloc/free_hwirq 2014-05-16 14:05:20 +02:00
ohci-tmio.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
ohci.h USB: OHCI: add check for stopped frame counter 2014-07-18 16:34:29 -07:00
oxu210hp-hcd.c usb: hub: rename khubd to hub_wq in documentation and comments 2014-09-23 22:33:19 -07:00
oxu210hp.h USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
pci-quirks.c OHCI: add a quirk for ULi M5237 blocking on reset 2015-01-27 08:29:42 -08:00
pci-quirks.h usb: pci_quirks: fix sparse 'symbol not declared' warning 2014-05-27 16:25:32 -07:00
r8a66597-hcd.c ARM: driver updates for 3.14 2014-01-23 18:49:36 -08:00
r8a66597.h usb/host/r8a66597: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
sl811-hcd.c usb: hub: rename khubd to hub_wq in documentation and comments 2014-09-23 22:33:19 -07:00
sl811.h USB: sl811: move debug files from proc to debugfs 2013-07-24 14:43:05 -07:00
sl811_cs.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
ssb-hcd.c DMA-API: usb: ssb-hcd: replace dma_set_mask()+dma_set_coherent_mask() with new helper 2013-10-31 14:48:36 +00:00
u132-hcd.c usb: hcd: move controller wakeup setting initialization to individual driver 2013-12-08 18:06:46 -08:00
uhci-debug.c usb: kill DEBUG compile option 2013-12-03 10:34:33 -08:00
uhci-grlib.c usb: host: uhci-grlib.c : use devm_ functions 2014-07-09 16:25:22 -07:00
uhci-hcd.c USB: UHCI: don't allocate frame list atomically 2014-07-09 16:16:07 -07:00
uhci-hcd.h USB: UHCI: remove unused definition 2013-01-24 13:42:09 -08:00
uhci-hub.c USB/host: Bugfix: Return length of copied buffer in uhci_hub_control() 2013-10-07 00:07:17 -07:00
uhci-pci.c USB: remove DEFINE_PCI_DEVICE_TABLE macro 2013-12-04 16:58:47 -08:00
uhci-platform.c uhci-platform: use devm_ioremap resource 2014-07-09 16:31:48 -07:00
uhci-q.c USB: UHCI: accept very late isochronous URBs 2013-09-25 17:05:34 -07:00
xhci-dbg.c xhci: Export symbols used by host-controller drivers 2014-10-03 14:44:45 -07:00
xhci-ext-caps.h xhci: fix port BESL LPM capability checking 2013-08-27 08:54:42 -07:00
xhci-hub.c usb: xhci: handle Config Error Change (CEC) in xhci driver 2015-04-24 17:13:58 -04:00
xhci-mem.c xhci: Log extra info on "ERROR Transfer event TRB DMA ptr not part of current TD" 2014-09-23 21:46:11 -07:00
xhci-mvebu.c usb: host: xhci-plat: add support for the Armada 375/38x XHCI controllers 2014-05-27 15:40:40 -07:00
xhci-mvebu.h usb: host: xhci-plat: add support for the Armada 375/38x XHCI controllers 2014-05-27 15:40:40 -07:00
xhci-pci.c usb: xhci: apply XHCI_AVOID_BEI quirk to all Intel xHCI controllers 2015-04-24 17:13:58 -04:00
xhci-plat.c usb: XHCI: platform: Move the Marvell quirks after the enabling the clocks 2015-03-14 15:37:25 -04:00
xhci-rcar.c usb: host: xhci-plat: add support for the R-Car H2 and M2 xHCI controllers 2014-07-09 15:49:10 -07:00
xhci-rcar.h usb: host: xhci-plat: add support for the R-Car H2 and M2 xHCI controllers 2014-07-09 15:49:10 -07:00
xhci-ring.c xhci: fix reporting of 0-sized URBs in control endpoint 2015-03-14 15:37:25 -04:00
xhci-trace.c xhci: Export symbols used by host-controller drivers 2014-10-03 14:44:45 -07:00
xhci-trace.h xhci: fix sparse warning in xhci-trace.h 2013-12-02 12:59:45 -08:00
xhci.c xhci: Check if slot is already in default state before moving it there 2015-01-27 08:29:36 -08:00
xhci.h xhci: Workaround for PME stuck issues in Intel xhci 2015-03-14 15:37:25 -04:00