linux/drivers/usb/host
Takashi Iwai 638298dc66 xhci: Fix spurious wakeups after S5 on Haswell
Haswell LynxPoint and LynxPoint-LP with the recent Intel BIOS show
mysterious wakeups after shutdown occasionally.  After discussing with
BIOS engineers, they explained that the new BIOS expects that the
wakeup sources are cleared and set to D3 for all wakeup devices when
the system is going to sleep or power off, but the current xhci driver
doesn't do this properly (partly intentionally).

This patch introduces a new quirk, XHCI_SPURIOUS_WAKEUP, for
fixing the spurious wakeups at S5 by calling xhci_reset() in the xhci
shutdown ops as done in xhci_stop(), and setting the device to PCI D3
at shutdown and remove ops.

The PCI D3 call is based on the initial fix patch by Oliver Neukum.

[Note: Sarah changed the quirk name from XHCI_HSW_SPURIOUS_WAKEUP to
XHCI_SPURIOUS_WAKEUP, since none of the other quirks have system names
in them.  Sarah also fixed a collision with a quirk submitted around the
same time, by changing the xhci->quirks bit from 17 to 18.]

This patch should be backported to kernels as old as 3.0, that
contain the commit 1c12443ab8 "xhci: Add
Lynx Point to list of Intel switchable hosts."

Cc: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: stable@vger.kernel.org
2013-10-09 16:27:20 -07:00
..
whci wusbhc: disable suspend and resume on the root hub. 2013-06-06 12:14:38 -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
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 powerpc/usb: fix bug of CPU hang when missing USB PHY clock 2012-09-05 16:52:08 -07:00
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 ARM: imx: move platform_data definitions 2012-09-14 11:17:21 +02:00
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
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 xhci: fix write to USB3_PSSEN and XUSB2PRM pci config registers 2013-10-09 16:27:13 -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 xhci: Fix spurious wakeups after S5 on Haswell 2013-10-09 16:27:20 -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: Fix spurious wakeups after S5 on Haswell 2013-10-09 16:27:20 -07:00
xhci.h xhci: Fix spurious wakeups after S5 on Haswell 2013-10-09 16:27:20 -07:00