RE: How to resolve "Waited 2000ms for CONNECT" in system resuming?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Alan,

> From: Alan Stern
> Sent: Wednesday, February 15, 2017 2:57 AM
> 
> On Tue, 14 Feb 2017, Yoshihiro Shimoda wrote:
> 
> > Hi Alan,
> >
> > > From: Alan Stern
> > > Sent: Tuesday, February 14, 2017 1:35 AM
> > >
> > > On Mon, 13 Feb 2017, Yoshihiro Shimoda wrote:
> > >
> > > > > 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()
> > >
> > > We probably should do that in all the platform drivers anyway.
> >
> > I got it.
> >
> > > >  - [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.
> > >
> > > The key point is that the EHCI controller must be resumed _after_ its
> > > companion controllers.  In order to do this properly, the platform
> > > driver needs to know which other devices the companions are.
> > >
> > > There's no way it can figure this out by itself; it has to be told by
> > > the platform-specific code.
> >
> > I understood it.
> > In non-DT case, if we use .id in struct platform_device, there is easy to bind
> > EHCI and companion controllers. However, in DT environment, there is difficult to
> > bind them.
> >
> > So, I have 2 ideas for DT case.
> >  A) We add a new property "companion" as usb-generic.txt and EHCI node(s) have such a property
> >     to bind a companion controller.
> >  B) We assume EHCI controller binds a companion controller if some resources (irq or clock)
> >     are the same and it has a compatible strings as "generic-[uo]hci" for instance.
> >
> > What do you think?
> 
> I'm not very familiar with DT programming.  It would be better to ask
> somebody else.

I got it. Also I'm not familiar with DT programming :)
So, I sent an email to devicetree maintainers as other email thread.

Thank you very much for your support!

Best regards.
Yoshihiro Shimoda

> Alan Stern





[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux