From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Lu Baolu <baolu.lu@linux.intel.com>,
Alan Stern <stern@rowland.harvard.edu>,
Mathias Nyman <mathias.nyman@linux.intel.com>
Subject: [PATCH 3.14 41/73] usb: xhci: rework root port wake bits if controller isnt allowed to wakeup
Date: Fri, 5 Dec 2014 14:44:47 -0800 [thread overview]
Message-ID: <20141205224435.170482459@linuxfoundation.org> (raw)
In-Reply-To: <20141205224433.921659956@linuxfoundation.org>
3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lu Baolu <baolu.lu@linux.intel.com>
commit a1377e5397ab321e21b793ec8cd2b6f12bd3c718 upstream.
When system is being suspended, if host device is not allowed to do wakeup,
xhci_suspend() needs to clear all root port wake on bits. Otherwise, some
platforms may generate spurious wakeup, even if PCI PME# is disabled.
The initial commit ff8cbf250b44 ("xhci: clear root port wake on bits"),
which also got into stable, turned out to not work correctly and had to
be reverted, and is now rewritten.
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Suggested-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
[Mathias Nyman: reword commit message]
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/host/xhci-pci.c | 2 +-
drivers/usb/host/xhci-plat.c | 10 +++++++++-
drivers/usb/host/xhci.c | 42 +++++++++++++++++++++++++++++++++++++++++-
drivers/usb/host/xhci.h | 2 +-
4 files changed, 52 insertions(+), 4 deletions(-)
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -281,7 +281,7 @@ static int xhci_pci_suspend(struct usb_h
if (xhci_compliance_mode_recovery_timer_quirk_check())
pdev->no_d3cold = true;
- return xhci_suspend(xhci);
+ return xhci_suspend(xhci, do_wakeup);
}
static int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated)
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -205,7 +205,15 @@ static int xhci_plat_suspend(struct devi
struct usb_hcd *hcd = dev_get_drvdata(dev);
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
- return xhci_suspend(xhci);
+ /*
+ * xhci_suspend() needs `do_wakeup` to know whether host is allowed
+ * to do wakeup during suspend. Since xhci_plat_suspend is currently
+ * only designed for system suspend, device_may_wakeup() is enough
+ * to dertermine whether host is allowed to do wakeup. Need to
+ * reconsider this when xhci_plat_suspend enlarges its scope, e.g.,
+ * also applies to runtime suspend.
+ */
+ return xhci_suspend(xhci, device_may_wakeup(dev));
}
static int xhci_plat_resume(struct device *dev)
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -35,6 +35,8 @@
#define DRIVER_AUTHOR "Sarah Sharp"
#define DRIVER_DESC "'eXtensible' Host Controller (xHC) Driver"
+#define PORT_WAKE_BITS (PORT_WKOC_E | PORT_WKDISC_E | PORT_WKCONN_E)
+
/* Some 0.95 hardware can't handle the chain bit on a Link TRB being cleared */
static int link_quirk;
module_param(link_quirk, int, S_IRUGO | S_IWUSR);
@@ -842,13 +844,47 @@ static void xhci_clear_command_ring(stru
xhci_set_cmd_ring_deq(xhci);
}
+static void xhci_disable_port_wake_on_bits(struct xhci_hcd *xhci)
+{
+ int port_index;
+ __le32 __iomem **port_array;
+ unsigned long flags;
+ u32 t1, t2;
+
+ spin_lock_irqsave(&xhci->lock, flags);
+
+ /* disble usb3 ports Wake bits*/
+ port_index = xhci->num_usb3_ports;
+ port_array = xhci->usb3_ports;
+ while (port_index--) {
+ t1 = readl(port_array[port_index]);
+ t1 = xhci_port_state_to_neutral(t1);
+ t2 = t1 & ~PORT_WAKE_BITS;
+ if (t1 != t2)
+ writel(t2, port_array[port_index]);
+ }
+
+ /* disble usb2 ports Wake bits*/
+ port_index = xhci->num_usb2_ports;
+ port_array = xhci->usb2_ports;
+ while (port_index--) {
+ t1 = readl(port_array[port_index]);
+ t1 = xhci_port_state_to_neutral(t1);
+ t2 = t1 & ~PORT_WAKE_BITS;
+ if (t1 != t2)
+ writel(t2, port_array[port_index]);
+ }
+
+ spin_unlock_irqrestore(&xhci->lock, flags);
+}
+
/*
* Stop HC (not bus-specific)
*
* This is called when the machine transition into S3/S4 mode.
*
*/
-int xhci_suspend(struct xhci_hcd *xhci)
+int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup)
{
int rc = 0;
unsigned int delay = XHCI_MAX_HALT_USEC;
@@ -859,6 +895,10 @@ int xhci_suspend(struct xhci_hcd *xhci)
xhci->shared_hcd->state != HC_STATE_SUSPENDED)
return -EINVAL;
+ /* Clear root port wake on bits if wakeup not allowed. */
+ if (!do_wakeup)
+ xhci_disable_port_wake_on_bits(xhci);
+
/* Don't poll the roothubs on bus suspend. */
xhci_dbg(xhci, "%s: stopping port polling.\n", __func__);
clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1760,7 +1760,7 @@ void xhci_shutdown(struct usb_hcd *hcd);
int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks);
#ifdef CONFIG_PM
-int xhci_suspend(struct xhci_hcd *xhci);
+int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup);
int xhci_resume(struct xhci_hcd *xhci, bool hibernated);
#else
#define xhci_suspend NULL
next prev parent reply other threads:[~2014-12-05 23:20 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-05 22:44 [PATCH 3.14 00/73] 3.14.26-stable review Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 01/73] MIPS: oprofile: Fix backtrace on 64-bit kernel Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 02/73] MIPS: Loongson: Make platform serial setup always built-in Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 03/73] x86_64, traps: Fix the espfix64 #DF fixup and rewrite it in C Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 04/73] x86_64, traps: Stop using IST for #SS Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 05/73] x86_64, traps: Rework bad_iret Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 06/73] x86: Require exact match for noxsave command line option Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 07/73] x86, mm: Set NX across entire PMD at boot Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 08/73] x86, kaslr: Handle Gold linker for finding bss/brk Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 09/73] uprobes, x86: Fix _TIF_UPROBE vs _TIF_NOTIFY_RESUME Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 10/73] sparc64: Fix constraints on swab helpers Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 11/73] inetdevice: fixed signed integer overflow Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 12/73] ipv4: Fix incorrect error code when adding an unreachable route Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 13/73] ieee802154: fix error handling in ieee802154fake_probe() Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 15/73] bonding: fix curr_active_slave/carrier with loadbalance arp monitoring Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 16/73] pptp: fix stack info leak in pptp_getname() Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 17/73] ipx: fix locking regression in ipx_sendmsg and ipx_recvmsg Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 18/73] PCI: Support 64-bit bridge windows if we have 64-bit dma_addr_t Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 19/73] PCI/MSI: Add device flag indicating that 64-bit MSIs dont work Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 20/73] clockevent: sun4i: Fix race condition in the probe code Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 21/73] IB/isert: Adjust CQ size to HW limits Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 22/73] ib_isert: Add max_send_sge=2 minimum for control PDU responses Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 23/73] ASoC: rsnd: remove unsupported PAUSE flag Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 24/73] ASoC: fsi: " Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 25/73] ASoC: sgtl5000: Fix SMALL_POP bit definition Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 26/73] ASoC: wm_adsp: Avoid attempt to free buffers that might still be in use Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 27/73] ASoC: dpcm: Fix race between FE/BE updates and trigger Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 28/73] ath9k: Fix RTC_DERIVED_CLK usage Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 29/73] of/base: Fix PowerPC address parsing hack Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 30/73] powerpc/pseries: Honor the generic "no_64bit_msi" flag Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 31/73] powerpc/pseries: Fix endiannes issue in RTAS call from xmon Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 32/73] iio: Fix IIO_EVENT_CODE_EXTRACT_DIR bit mask Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 33/73] staging: r8188eu: Add new device ID for DLink GO-USB-N150 Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 34/73] USB: ssu100: fix overrun-error reporting Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 35/73] USB: keyspan: " Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 36/73] USB: keyspan: fix tty line-status reporting Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 37/73] USB: serial: cp210x: add IDs for CEL MeshConnect USB Stick Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 38/73] usb: serial: ftdi_sio: add PIDs for Matrix Orbital products Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 39/73] usb-quirks: Add reset-resume quirk for MS Wireless Laser Mouse 6000 Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 40/73] USB: xhci: dont start a halted endpoint before its new dequeue is set Greg Kroah-Hartman
2014-12-05 22:44 ` Greg Kroah-Hartman [this message]
2014-12-05 22:44 ` [PATCH 3.14 42/73] can: esd_usb2: fix memory leak on disconnect Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 43/73] ALSA: usb-audio: Add ctrl message delay quirk for Marantz/Denon devices Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 45/73] of/irq: Drop obsolete interrupts vs interrupts-extended text Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 46/73] ARM: 8216/1: xscale: correct auxiliary register in suspend/resume Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 47/73] ARM: 8222/1: mvebu: enable strex backoff delay Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 48/73] ARM: 8226/1: cacheflush: get rid of restarting block Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 49/73] Input: synaptics - adjust min/max on Thinkpad E540 Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 50/73] Input: xpad - use proper endpoint type Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 51/73] srp-target: Retry when QP creation fails with ENOMEM Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 52/73] target: Dont call TFO->write_pending if data_length == 0 Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 53/73] iser-target: Handle DEVICE_REMOVAL event on network portal listener correctly Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 54/73] Target/iser: Fix a wrong dereference in case discovery session is over iser Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 55/73] iser-target: Disable TX completion interrupt coalescing Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 56/73] spi: dw: Fix dynamic speed change Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 57/73] vhost-scsi: Take configfs group dependency during VHOST_SCSI_SET_ENDPOINT Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 60/73] rt2x00: do not align payload on modern H/W Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 61/73] nfsd: correctly define v4.2 support attributes Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 62/73] nfsd: Fix slot wake up race in the nfsv4.1 callback code Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 63/73] nfsd: dont halt scanning the DRC LRU list when theres an RC_INPROG entry Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 64/73] net/ping: handle protocol mismatching scenario Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 65/73] bnx2fc: do not add shared skbs to the fcoe_rx_list Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 66/73] drm/radeon: fix endian swapping in vbios fetch for tdp table Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 67/73] gpu/radeon: Set flag to indicate broken 64-bit MSI Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 68/73] bitops: Fix shift overflow in GENMASK macros Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 69/73] locks: eliminate BUG() call when theres an unexpected lock on file close Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 70/73] powerpc/powernv: Honor the generic "no_64bit_msi" flag Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 71/73] batman: fix a bogus warning from batadv_is_on_batman_iface() Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 72/73] x86: kvm: use alternatives for VMCALL vs. VMMCALL if kernel text is read-only Greg Kroah-Hartman
2014-12-06 3:30 ` [PATCH 3.14 00/73] 3.14.26-stable review Guenter Roeck
2014-12-06 21:36 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141205224435.170482459@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=baolu.lu@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathias.nyman@linux.intel.com \
--cc=stable@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.