alistair23-linux/drivers/usb/host
Alexis R. Cortes 71c731a296 usb: host: xhci: Fix Compliance Mode on SN65LVPE502CP Hardware
This patch is intended to work around a known issue on the
SN65LVPE502CP USB3.0 re-driver that can delay the negotiation
between a device and the host past the usual handshake timeout.

If that happens on the first insertion, the host controller
port will enter in Compliance Mode and NO port status event will
be generated (as per xHCI Spec) making impossible to detect this
event by software. The port will remain in compliance mode until
a warm reset is applied to it.

As a result of this, the port will seem "dead" to the user and no
device connections or disconnections will be detected.

For solving this, the patch creates a timer which polls every 2
seconds the link state of each host controller's port (this
by reading the PORTSC register) and recovers the port by issuing a
Warm reset every time Compliance mode is detected.

If a xHC USB3.0 port has previously entered to U0, the compliance
mode issue will NOT occur only until system resumes from
sleep/hibernate, therefore, the compliance mode timer is stopped
when all xHC USB 3.0 ports have entered U0. The timer is initialized
again after each system resume.

Since the issue is being caused by a piece of hardware, the timer
will be enabled ONLY on those systems that have the SN65LVPE502CP
installed (this patch uses DMI strings for detecting those systems)
therefore making this patch to act as a quirk (XHCI_COMP_MODE_QUIRK
has been added to the xhci stack).

This patch applies for these systems:
Vendor: Hewlett-Packard. System Models: Z420, Z620 and Z820.

This patch should be backported to kernels as old as 3.2, as that was
the first kernel to support warm reset.  The kernels will need to
contain both commit 10d674a82e "USB: When
hot reset for USB3 fails, try warm reset" and commit
8bea2bd37d "usb: Add support for root hub
port status CAS".  The first patch add warm reset support, and the
second patch modifies the USB core to issue a warm reset when the port
is in compliance mode.

Signed-off-by: Alexis R. Cortes <alexis.cortes@ti.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: stable@vger.kernel.org
2012-09-05 12:07:18 -07:00
..
whci
alchemy-common.c
bcma-hcd.c
ehci-atmel.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-au1xxx.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-cns3xxx.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-dbg.c USB: EHCI: add new root-hub state: STOPPING 2012-07-16 16:50:14 -07:00
ehci-fsl.c USB: ehci-fsl: Update ifdef check to work on 64-bit ppc 2012-07-16 17:11:12 -07:00
ehci-fsl.h
ehci-grlib.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-hcd.c USB patches for 3.6-rc1 2012-07-26 10:23:47 -07:00
ehci-hub.c USB: EHCI: resolve some unlikely races 2012-07-16 16:56:48 -07:00
ehci-ixp4xx.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-lpm.c
ehci-ls1x.c
ehci-mem.c USB: EHCI: use hrtimer for (s)iTD deallocation 2012-07-16 16:54:25 -07:00
ehci-msm.c EHCI: centralize controller suspend/resume 2012-07-09 08:54:18 -07:00
ehci-mv.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-mxc.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-octeon.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-omap.c OMAP: USB : Fix the EHCI enumeration and core retention issue 2012-08-10 11:49:12 -07:00
ehci-orion.c ARM: SoC fixes 2012-07-26 20:29:52 -07:00
ehci-pci.c USB: EHCI: use hrtimer for the periodic schedule 2012-07-16 16:53:16 -07:00
ehci-platform.c EHCI: centralize controller suspend/resume 2012-07-09 08:54:18 -07:00
ehci-pmcmsp.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-ppc-of.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-ps3.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-q.c USB: EHCI: use hrtimer for the I/O watchdog 2012-07-16 16:56:47 -07:00
ehci-s5p.c USB: ehci-s5p: Add vbus setup function to the s5p ehci glue layer 2012-07-17 10:48:29 -07:00
ehci-sched.c USB: EHCI: simplify isochronous scanning 2012-07-16 16:56:47 -07:00
ehci-sead3.c usb: host: mips: sead3: Update for EHCI register structure. 2012-08-10 11:57:37 -07:00
ehci-sh.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-spear.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-sysfs.c
ehci-tegra.c usb: host: tegra: fix warning messages in ehci_remove 2012-08-10 11:57:37 -07:00
ehci-tilegx.c usb: add host support for the tilegx architecture 2012-07-18 16:40:29 -04:00
ehci-timer.c USB: EHCI: use hrtimer for the I/O watchdog 2012-07-16 16:56:47 -07:00
ehci-vt8500.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-w90x900.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-xilinx-of.c EHCI: centralize controller initialization 2012-07-09 13:35:05 -07:00
ehci-xls.c usb: host: tegra: pass correct pointer in ehci_setup() 2012-07-16 17:13:39 -07:00
ehci.h USB: EHCI: resolve some unlikely races 2012-07-16 16:56:48 -07:00
fhci-dbg.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fhci-hcd.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -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
fhci-q.c
fhci-sched.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07: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: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fsl-mph-dr-of.c
hwa-hc.c
imx21-dbg.c
imx21-hcd.c usb: imx21-hcd.c: Use clk_prepare_enable/clk_disable_unprepare 2012-06-12 13:31:03 +03:00
imx21-hcd.h
isp116x-hcd.c
isp116x.h
isp1362-hcd.c USB: isp1362-hcd.c: usb message always saved in case of underrun 2012-08-10 11:49:13 -07:00
isp1362.h
isp1760-hcd.c
isp1760-hcd.h
isp1760-if.c
Kconfig USB patches for 3.6-rc1 2012-07-26 10:23:47 -07:00
Makefile
octeon2-common.c
ohci-at91.c USB: ohci-at91: add a reset function to fix race condition 2012-05-09 15:22:27 -07:00
ohci-au1xxx.c
ohci-cns3xxx.c
ohci-da8xx.c
ohci-dbg.c
ohci-ep93xx.c
ohci-exynos.c USB: ohci-exynos: Add support for device tree 2012-07-16 17:16:17 -07:00
ohci-hcd.c usb: add host support for the tilegx architecture 2012-07-18 16:40:29 -04:00
ohci-hub.c USB: ohci-hub: Mark ohci_finish_controller_resume() as __maybe_unused 2012-06-13 17:26:11 -07:00
ohci-jz4740.c
ohci-mem.c
ohci-nxp.c USB: ohci-nxp: add usbd and otg clock initialization 2012-06-20 16:20:24 -07:00
ohci-octeon.c
ohci-omap.c usb/ohci-omap: remove unused variable 2012-08-08 21:13:01 +02:00
ohci-omap3.c
ohci-pci.c
ohci-platform.c
ohci-pnx8550.c
ohci-ppc-of.c
ohci-ppc-soc.c
ohci-ps3.c
ohci-pxa27x.c
ohci-q.c
ohci-s3c2410.c
ohci-sa1111.c
ohci-sh.c
ohci-sm501.c
ohci-spear.c
ohci-tilegx.c usb: add host support for the tilegx architecture 2012-07-18 16:40:29 -04:00
ohci-tmio.c
ohci-xls.c
ohci.h USB: move transceiver from ehci_hcd and ohci_hcd to hcd and rename it as phy 2012-06-13 12:38:36 -07:00
oxu210hp-hcd.c
oxu210hp.h
pci-quirks.c xhci: Make handover code more robust 2012-09-05 12:07:17 -07:00
pci-quirks.h xhci: Switch PPT ports to EHCI on shutdown. 2012-08-09 12:43:28 -07:00
r8a66597-hcd.c usb/host/r8a66597: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
r8a66597.h usb/host/r8a66597: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
sl811-hcd.c
sl811.h
sl811_cs.c
ssb-hcd.c
u132-hcd.c
uhci-debug.c
uhci-grlib.c
uhci-hcd.c
uhci-hcd.h
uhci-hub.c
uhci-pci.c
uhci-q.c
xhci-dbg.c
xhci-ext-caps.h
xhci-hub.c usb: host: xhci: Fix Compliance Mode on SN65LVPE502CP Hardware 2012-09-05 12:07:18 -07:00
xhci-mem.c xhci: Don't free endpoints in xhci_mem_cleanup() 2012-06-13 16:37:30 -07:00
xhci-pci.c xhci: Switch PPT ports to EHCI on shutdown. 2012-08-09 12:43:28 -07:00
xhci-plat.c
xhci-ring.c xhci: Fix bug after deq ptr set to link TRB. 2012-08-08 12:17:38 -07:00
xhci.c usb: host: xhci: Fix Compliance Mode on SN65LVPE502CP Hardware 2012-09-05 12:07:18 -07:00
xhci.h usb: host: xhci: Fix Compliance Mode on SN65LVPE502CP Hardware 2012-09-05 12:07:18 -07:00