Re: [RFT & RFC] USB: Fix USB device disconnects on resume.

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

 



On Wed, 21 Aug 2013, Sarah Sharp wrote:

> Possible fixes
> --------------
> 
> The USB core obviously needs to be changed to check the port status
> after the TRSMRCY timeout, and continue to wait if the port is still in
> the resuming state.  I will have to study the EHCI port status diagrams
> in detail to figure out how the USB core can do this.

As far as EHCI is concerned, this is a non-problem.  The closest
analogy to the RExit->U0 transition is in the description of the Force
Port Resume bit (bit 6) in Table 2-16 of the EHCI spec, where it says
that the host controller must complete the transition to the high-speed
idle state within 2 milliseconds of software setting the bit to a zero
(which happens when the hub driver does its Get-Port-Status call).

Thus, as soon as the TRSMRCY delay is finished, the device and the port
are supposed to be ready.  In fact, the hardware doesn't provide any
means of telling whether they are ready or not.

>  I can easily do
> this without the USB core being involved, by changing the xHCI driver to
> either:
> 
> 1. Busy wait with xhci_handshake() in the xHCI get port status until
>    the port is in U0.
> 
> 2. Add a completion per xHCI port.  In xHCI get port status, initiate
>    U0 entry, and wait on the port's completion for up to 20 ms.  In the
>    port status change event code, complete that port's completion when
>    the port is in U0 and the bus_state->resuming_ports bit is set.

I would expect either of those to be adequate.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux