All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: "linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"linux-renesas-soc@vger.kernel.org"
	<linux-renesas-soc@vger.kernel.org>
Subject: RE: How to resolve "Waited 2000ms for CONNECT" in system resuming?
Date: Mon, 13 Feb 2017 09:35:22 +0000	[thread overview]
Message-ID: <HK2PR06MB054808D7CD247A6AB3E22F60D8590@HK2PR06MB0548.apcprd06.prod.outlook.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1702091009300.2240-100000@iolanthe.rowland.org>

Hi Alan,

> From: Alan Stern
> Sent: Friday, February 10, 2017 12:28 AM
> 
> On Thu, 9 Feb 2017, Yoshihiro Shimoda wrote:
> 
> >
> > > From: Alan Stern
> > > Sent: Thursday, February 09, 2017 12:39 AM
> > > On Wed, 8 Feb 2017, Yoshihiro Shimoda wrote:

< snip >

> > I checked the ehci_handover_companion_ports().
> > If I used a USB full speed hub, the !udev->maxchild in
> > the persist_enabled_on_companion() was 0.
> > Then, ehci_handover_companion_ports() didn't call ehci_hub_control().
> > Is this expected behavior?
> >
> > static int persist_enabled_on_companion(struct usb_device *udev, void *unused)
> > {
> >         return !udev->maxchild && udev->persist_enabled &&
> >                 udev->bus->root_hub->speed < USB_SPEED_HIGH;
> > }
> 
> Ah.  Yes, it is the desired behavior.  The idea is to skip switching
> the ports back to the companion if the only USB-1.1 devices with
> persist_enabled are hubs.  It doesn't matter if a hub gets disconnected
> temporarily and then reconnected.

Thank you for the detail. I got it.

> > If I used a USB full/low speed device, the ehci_handover_companion_ports()
> > called ehci_hub_control() and rans the following as well. However, OHCI didn't
> > detect the connection. So, I need to investigate this issue more.
> >                         if (status & PORT_OWNER)
> >                                 ehci_writel(ehci, status | PORT_CSC, reg);
> 
> So the port _does_ get switched over to the companion controller, but
> for some unknown reason the companion controller doesn't detect the
> connection.  Perhaps this happens because
> ehci_handover_companion_ports() runs before the OHCI controller gets
> reinitialized -- I noticed this in the log you posted before.
> 
> Hmmm.  You're using platform drivers for OHCI and EHCI, not PCI,

Yes, I'm using platform drivers for OHCI and EHCI.

> right?  The resume_common() routine in drivers/usb/core/hcd-pci.c is
> careful to resume things in the correct order.  It contains this code:
> 
> 		/*
> 		 * Only EHCI controllers have to wait for their companions.
> 		 * No locking is needed because PCI controller drivers do not
> 		 * get unbound during system resume.
> 		 */
> 		if (pci_dev->class == CL_EHCI && event != PM_EVENT_AUTO_RESUME)
> 			for_each_companion(pci_dev, hcd,
> 					ehci_wait_for_companions);
> 
> Probably the equivalent routine in the platform driver needs to do the
> same sort of thing.  This means it needs to know about companion
> controllers.

Thank you very much for this information!
If I added the following code, the issue disappeared:
 - The ehci-platform.c calls device_enable_async_suspend(hcd->self.controller)
   in ehci_platform_probe()
 - [This is a dirty code, but] hcd_bus_resume() calls device_pm_wait_for_dev(
   rhdev->bus->controller, ohci_dev)

I will consider how to implement such a code for [eo]hci-platform drivers.
Especially, like ehci_{pre,post}_add() for platform drivers are needed, I think.

Best regards,
Yoshihiro Shimoda

> Alan Stern

  reply	other threads:[~2017-02-13  9:35 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-08  6:24 How to resolve "Waited 2000ms for CONNECT" in system resuming? Yoshihiro Shimoda
2017-02-08 15:38 ` Alan Stern
2017-02-09  8:41   ` Yoshihiro Shimoda
2017-02-09 15:28     ` Alan Stern
2017-02-13  9:35       ` Yoshihiro Shimoda [this message]
2017-02-13 16:35         ` Alan Stern
2017-02-14 12:02           ` Yoshihiro Shimoda
2017-02-14 17:56             ` Alan Stern
2017-02-15  2:24               ` Yoshihiro Shimoda

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=HK2PR06MB054808D7CD247A6AB3E22F60D8590@HK2PR06MB0548.apcprd06.prod.outlook.com \
    --to=yoshihiro.shimoda.uh@renesas.com \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux-usb@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.