linux/drivers/usb/host
Sarah Sharp f217c980ca xhci: Don't enable/disable RWE on bus suspend/resume.
The RWE bit of the USB 2.0 PORTPMSC register is supposed to enable
remote wakeup for devices in the lower power link state L1.  It has
nothing to do with the device suspend remote wakeup from L2.  The RWE
bit is designed to be set once (when USB 2.0 LPM is enabled for the
port) and cleared only when USB 2.0 LPM is disabled for the port.

The xHCI bus suspend method was setting the RWE bit erroneously, and the
bus resume method was clearing it.  The xHCI 1.0 specification with
errata up to Aug 12, 2012 says in section 4.23.5.1.1.1 "Hardware
Controlled LPM":

"While Hardware USB2 LPM is enabled, software shall not modify the
HIRDBESL or RWE fields of the USB2 PORTPMSC register..."

If we have previously enabled USB 2.0 LPM for a device, that means when
the USB 2.0 bus is resumed, we violate the xHCI specification by
clearing RWE.  It also means that after a bus resume, the host would
think remote wakeup is disabled from L1 for ports with USB 2.0 Link PM
enabled, which is not what we want.

This patch should be backported to kernels as old as 3.2, that
contain the commit 65580b4321 "xHCI: set
USB2 hardware LPM".  That was the first kernel that supported USB 2.0
Link PM.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: stable@vger.kernel.org
2013-10-09 16:26:55 -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 ehci: remove duplicate debug_async_open() prototype in ehci-dbg.c 2013-08-30 12:02:08 -07:00
ehci-fsl.c USB: fsl/ehci: fix failure of checking PHY_CLK_VALID during reinitialization 2013-09-26 16:22:29 -07:00
ehci-fsl.h
ehci-grlib.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-hcd.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-hub.c ehci: remove ehci_vdbg() verbose debugging statements 2013-08-30 12:02:07 -07:00
ehci-mem.c USB: EHCI: improve interrupt qh unlink 2013-08-12 11:43:48 -07:00
ehci-msm.c USB: EHCI: make ehci-msm a separate driver 2013-04-08 09:40:20 -07:00
ehci-mv.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-mxc.c usb: ehci-mxc: check for pdata before dereferencing 2013-08-23 10:46:03 -07:00
ehci-octeon.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-omap.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ehci-orion.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ehci-pci.c USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd 2013-09-25 17:05:35 -07:00
ehci-platform.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ehci-pmcmsp.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-ppc-of.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-ps3.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-q.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-s5p.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ehci-sched.c ehci: enable debugging code when CONFIG_DYNAMIC_DEBUG is set 2013-08-30 12:02:07 -07:00
ehci-sead3.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-sh.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -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: host: tegra: Tegra30 support 2013-08-12 13:29:54 -05:00
ehci-tilegx.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-timer.c USB: EHCI: improve interrupt qh unlink 2013-08-12 11:43:48 -07:00
ehci-w90x900.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-xilinx-of.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci.h ehci: enable debugging code when CONFIG_DYNAMIC_DEBUG is set 2013-08-30 12:02:07 -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
fotg210-hcd.c usb: host: Faraday fotg210-hcd driver 2013-07-29 11:15:39 -07:00
fotg210.h usb: host: Faraday fotg210-hcd driver 2013-07-29 11:15:39 -07:00
fsl-mph-dr-of.c usb: host: fsl-mph-dr-of: Staticize local symbols 2013-09-17 11:06:57 -05: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 HWA: avoid constant suspend and resume on the root hub 2013-08-12 15:41:09 -07:00
imx21-dbg.c
imx21-hcd.c USB: iMX21: accept very late isochronous URBs 2013-09-25 17:05:34 -07:00
imx21-hcd.h
isp116x-hcd.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
isp116x.h USB: isp116x: remove dependency on CONFIG_USB_DEBUG 2013-07-23 16:35:17 -07:00
isp1362-hcd.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -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: remove remaining instances of USB_SUSPEND 2013-05-15 13:44:44 -04:00
isp1760-hcd.h
isp1760-if.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
Kconfig Remove GENERIC_HARDIRQ config option 2013-09-13 15:09:52 +02:00
Makefile xhci: add traces for debug messages in xhci_address_device() 2013-08-13 16:05:38 -07:00
octeon2-common.c
ohci-at91.c usb: ohci-at91: remove unnecessary dev_set_drvdata() 2013-08-27 21:36:46 -07:00
ohci-da8xx.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-dbg.c
ohci-ep93xx.c usb: ohci-ep93xx: tidy up driver (*probe) and (*remove) 2013-07-26 13:54:29 -07:00
ohci-exynos.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-hcd.c USB: OHCI: accept very late isochronous URBs 2013-09-25 17:05:35 -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-omap.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-omap3.c USB: host: Use usb_hcd_platform_shutdown() wherever possible 2013-07-25 12:01:12 -07:00
ohci-pci.c USB patches for 3.12-rc1 2013-09-03 11:35:32 -07:00
ohci-platform.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-ppc-of.c USB: host: Use usb_hcd_platform_shutdown() wherever possible 2013-07-25 12:01:12 -07:00
ohci-ps3.c usb: remove use of __devinit 2012-11-21 13:27:16 -08:00
ohci-pxa27x.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-q.c USB: OHCI: accept very late isochronous URBs 2013-09-25 17:05:35 -07:00
ohci-s3c2410.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07: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: use dev_get_platdata() 2013-07-31 17:53:50 -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 Intel xhci: refactor EHCI/xHCI port switching 2013-07-23 14:50:29 -07:00
pci-quirks.h Merge 3.11-rc3 into usb-next 2013-07-29 07:43:16 -07:00
r8a66597-hcd.c usb: r8a66597-hcd: use platform_{get,set}_drvdata() 2013-08-30 11:11:35 -07:00
r8a66597.h
sl811-hcd.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
sl811.h USB: sl811: move debug files from proc to debugfs 2013-07-24 14:43:05 -07:00
sl811_cs.c drivers/usb: use module_pcmcia_driver() in pcmcia drivers 2013-03-15 12:26:38 -07:00
ssb-hcd.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
u132-hcd.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -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 USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd 2013-09-25 17:05:35 -07:00
uhci-platform.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
uhci-q.c USB: UHCI: accept very late isochronous URBs 2013-09-25 17:05:34 -07:00
xhci-dbg.c xhci: add traces for debug messages in xhci_address_device() 2013-08-13 16:05:38 -07:00
xhci-ext-caps.h xhci: fix port BESL LPM capability checking 2013-08-27 08:54:42 -07:00
xhci-hub.c xhci: Don't enable/disable RWE on bus suspend/resume. 2013-10-09 16:26:55 -07:00
xhci-mem.c usb: Fix xHCI host issues on remote wakeup. 2013-09-23 15:43:31 -07:00
xhci-pci.c USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd 2013-09-25 17:05:35 -07:00
xhci-plat.c xhci: Step 1 to fix usb-linus and usb-next. 2013-08-15 18:00:46 -07:00
xhci-ring.c xhci: Fix race between ep halt and URB cancellation 2013-09-23 15:43:31 -07:00
xhci-trace.c xhci: add traces for debug messages in xhci_address_device() 2013-08-13 16:05:38 -07:00
xhci-trace.h xhci: trace debug statements related to ring expansion 2013-08-13 21:14:44 -07:00
xhci.c xhci: Ensure a command structure points to the correct trb on the command ring 2013-09-23 15:43:30 -07:00
xhci.h usb: Fix xHCI host issues on remote wakeup. 2013-09-23 15:43:31 -07:00