linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Huang Ying <ying.huang@intel.com>
To: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: "Bjørn Mork" <bjorn@mork.no>,
	"Ulrich Eckhardt" <usb@uli-eckhardt.de>,
	"Andrew Lutomirski" <luto@mit.edu>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"Alan Stern" <stern@rowland.harvard.edu>,
	"Ming Lei" <ming.lei@canonical.com>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	linux-pci@vger.kernel.org
Subject: Re: Unreliable USB3 with NEC uPD720200 and Delock Cardreader
Date: Thu, 06 Dec 2012 15:17:14 +0800	[thread overview]
Message-ID: <1354778234.7216.9.camel@yhuang-dev> (raw)
In-Reply-To: <20121206003344.GC5324@xanatos>

[-- Attachment #1: Type: text/plain, Size: 2191 bytes --]

On Wed, 2012-12-05 at 16:33 -0800, Sarah Sharp wrote:
> On Wed, Nov 28, 2012 at 02:54:06PM -0800, Sarah Sharp wrote:
> > On Mon, Nov 26, 2012 at 10:48:03PM +0100, Bjørn Mork wrote:
> > > Sarah Sharp <sarah.a.sharp@linux.intel.com> writes:
> > > 
> > > > It looks like both Ulrich and Andrew have the same issue.  I also have a
> > > > Lenovo x220, and I confirmed that when I turn on PCI runtime suspend,
> > > > the NEC host controller does not report port status changes when a new
> > > > USB device is plugged in.
> > > >
> > > > I'm running 3.6.7, and I'm pretty sure that runtime suspend worked for
> > > > the NEC host on some older kernel.  I don't think the NEC host went into
> > > > D3cold on that kernel, though.  Is there a way to disable D3cold and
> > > > just use D3hot instead?
> > > 
> > > Yes, you have /sys/bus/pci/devices/.../d3cold_allowed
> > > See Documentation/ABI/testing/sysfs-bus-pci
> > > 
> > > If this really is a problem with the D3cold support that went into 3.6
> > > then I guess you should include Huang Ying in the discussions as well
> > > (CCed).
> > 
> > Turning off D3 cold didn't help.  Once the PCI device is suspended,
> > connect events do not generate an interrupt.
> > 
> > I'll go see if I can figure out which kernel this worked on and bisect.
> 
> Wakeup from D3 works fine on the 3.5.0 kernel, but fails on 3.6.2.  I
> haven't fully bisected yet.
> 
> In debugging, I found that if you only enable runtime suspend for the
> NEC host controller, the host successfully comes out of D3 when you plug
> in a USB device.  However, if you enable runtime PM for the parent PCIe root
> port, it stops working.  Disabling D3cold for both devices did not help.
> 
> It looks like a PCI issue, so what sort of debugging info do you need
> from me?

I do some debug with my NEC uPD720200, the patch is attached.  I found
that NEC uPD720200 can not generate PME interrupt, so it can be remote
waken up only via polling.  But if the PCIe bridge connected to NEC
uPD720200 goes into suspended, we can not poll it.  Maybe we need a way
to disable PCIe bridge suspended if the underlying device can only be
waken up via polling.

Best Regards,
Huang Ying


[-- Attachment #2: dbg_poll.patch --]
[-- Type: text/x-patch, Size: 2100 bytes --]

Index: linux.git/drivers/pci/pci.c
===================================================================
--- linux.git.orig/drivers/pci/pci.c	2012-12-06 10:57:31.485231614 +0800
+++ linux.git/drivers/pci/pci.c	2012-12-06 10:57:31.541230913 +0800
@@ -1473,12 +1473,15 @@
 		dev->pme_poll = false;
 
 	if (pci_check_pme_status(dev)) {
+		if (pme_poll_reset)
+			dev_info(&dev->dev, "pme wakeup\n");
+		else
+			dev_info(&dev->dev, "poll wakeup\n");
 		pci_wakeup_event(dev);
 		pm_request_resume(&dev->dev);
 	}
 	return 0;
 }
-
 /**
  * pci_pme_wakeup_bus - Walk given bus and wake up devices on it, if necessary.
  * @bus: Top bus of the subtree to walk.
Index: linux.git/drivers/pci/pci-acpi.c
===================================================================
--- linux.git.orig/drivers/pci/pci-acpi.c	2012-12-06 10:57:31.485231614 +0800
+++ linux.git/drivers/pci/pci-acpi.c	2012-12-06 10:57:31.542230901 +0800
@@ -56,6 +56,7 @@
 
 	if (!pci_dev->pm_cap || !pci_dev->pme_support
 	     || pci_check_pme_status(pci_dev)) {
+		dev_info(&pci_dev->dev, "pme wakeup\n");
 		if (pci_dev->pme_poll)
 			pci_dev->pme_poll = false;
 
Index: linux.git/drivers/pci/pcie/pme.c
===================================================================
--- linux.git.orig/drivers/pci/pcie/pme.c	2012-12-06 10:57:31.485231614 +0800
+++ linux.git/drivers/pci/pcie/pme.c	2012-12-06 10:57:31.542230901 +0800
@@ -79,6 +79,7 @@
 	list_for_each_entry(dev, &bus->devices, bus_list) {
 		/* Skip PCIe devices in case we started from a root port. */
 		if (!pci_is_pcie(dev) && pci_check_pme_status(dev)) {
+			dev_info(&dev->dev, "pme wakeup\n");
 			if (dev->pme_poll)
 				dev->pme_poll = false;
 
@@ -144,6 +145,7 @@
 			port->pme_poll = false;
 
 		if (pci_check_pme_status(port)) {
+			dev_info(&dev->dev, "pme wakeup\n");
 			pm_request_resume(&port->dev);
 			found = true;
 		} else {
@@ -188,6 +190,7 @@
 		/* The device is there, but we have to check its PME status. */
 		found = pci_check_pme_status(dev);
 		if (found) {
+			dev_info(&dev->dev, "pme wakeup\n");
 			if (dev->pme_poll)
 				dev->pme_poll = false;
 

  parent reply	other threads:[~2012-12-06  7:17 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20121126191002.GE6504@xanatos>
2012-11-26 21:48 ` Unreliable USB3 with NEC uPD720200 and Delock Cardreader Bjørn Mork
2012-11-28 22:54   ` Sarah Sharp
2012-12-06  0:33     ` Sarah Sharp
2012-12-06  0:43       ` Rafael J. Wysocki
2012-12-07  0:28         ` Sarah Sharp
2012-12-07 21:00           ` Rafael J. Wysocki
2012-12-12  2:32             ` Huang Ying
2012-12-12  2:34               ` Andrew Lutomirski
2012-12-12  3:18                 ` huang ying
2012-12-13 19:53               ` Sarah Sharp
2012-12-06  7:17       ` Huang Ying [this message]
2012-12-06 12:43         ` Rafael J. Wysocki
     [not found] <50841CCC.9030809@uli-eckhardt.de>
2012-10-22 23:40 ` Sarah Sharp
2012-10-23 13:54   ` Bjorn Helgaas
2012-10-23 17:14   ` Ulrich Eckhardt
2012-10-24 20:18     ` Bjorn Helgaas
2012-10-24 21:10       ` Rafael J. Wysocki
2012-10-24 21:13         ` Bjorn Helgaas
2012-10-24 21:31           ` Rafael J. Wysocki
2012-10-25  1:24             ` Ming Lei
2012-10-25 13:33               ` Bjorn Helgaas
2012-10-25 17:43               ` Ulrich Eckhardt
2012-10-25 18:19                 ` Alan Stern
2012-10-27 13:02                   ` Ulrich Eckhardt
2012-10-25 17:15           ` Ulrich Eckhardt
2012-10-25 20:11             ` Rafael J. Wysocki
2012-10-26 16:41               ` Ulrich Eckhardt
2012-10-25 20:09       ` Rafael J. Wysocki

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=1354778234.7216.9.camel@yhuang-dev \
    --to=ying.huang@intel.com \
    --cc=bhelgaas@google.com \
    --cc=bjorn@mork.no \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=luto@mit.edu \
    --cc=ming.lei@canonical.com \
    --cc=rjw@sisk.pl \
    --cc=sarah.a.sharp@linux.intel.com \
    --cc=stern@rowland.harvard.edu \
    --cc=usb@uli-eckhardt.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).