Re: [RFC v3 7/9] USB/xHCI: Support device-initiated USB 3.0 resume.

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

 



On Wed, 1 Feb 2012, Sarah Sharp wrote:

> USB 3.0 hubs don't have a port suspend change bit (that bit is now
> reserved).  Instead, when a host-initiated resume finishes, the hub sets
> the port link state change bit.
> 
> When a USB 3.0 device initiates remote wakeup, the parent hubs with
> their upstream links in U3 will pass the LFPS up the chain.  The first
> hub that has an upstream link in U0 (which may be the roothub) will
> reflect that LFPS back down the path to the device.
> 
> However, the parent hubs in the resumed path will not set their link
> state change bit.  Instead, the device that initiated the resume has to
> send an asynchronous "Function Wake" Device Notification up to the host
> controller.  Therefore, we need a way to notify the USB core of a device
> resume without going through the normal hub URB completion method.
> 
> First, make the xHCI roothub act like an external USB 3.0 hub and not
> pass up the port link state change bit when a device-initiated resume
> finishes.  Introduce a new xHCI bit field, port_remote_wakeup, so that
> we can tell the difference between a port coming out of the U3Exit state
> (host-initiated resume) and the RExit state (ending state of
> device-initiated resume).
> 
> Since the USB core can't tell whether a port on a hub has resumed by
> looking at the Hub Status buffer, we need to introduce a bitfield,
> wakeup_bits, that indicates which ports have resumed.  When the xHCI
> driver notices a port finishing a device-initiated resume, we call into
> a new USB core function, usb_wakeup_notification(), that will set
> the right bit in wakeup_bits, and kick khubd for that hub.
> 
> We also call usb_wakeup_notification() when the Function Wake Device
> Notification is received by the xHCI driver.  This covers the case where
> the link between the roothub and the first-tier hub is in U0, and the
> hub reflects the resume signaling back to the device without giving any
> indication it has done so until the device sends the Function Wake
> notification.
> 
> Change the code in khubd that handles the remote wakeup to look at the
> state the USB core thinks the device is in, and handle the remote wakeup
> if the port's wakeup bit is set.
> 
> This patch only takes care of the case where the device is attached
> directly to the roothub, or the USB 3.0 hub that is attached to the root
> hub is the device sending the Function Wake Device Notification (e.g.
> because a new USB device was attached).  The other cases will be covered
> in a second patch.

Both this patch and the next one look good.  You might even consider
merging them into a single patch, because 8/9 mostly just changes code
that was added in 7/9.

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