usb: core: hub: Disable hub-initiated U1/U2
authorThinh Nguyen <Thinh.Nguyen@synopsys.com>
Tue, 14 May 2019 21:38:38 +0000 (14:38 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 21 May 2019 08:25:58 +0000 (10:25 +0200)
commit561759292774707b71ee61aecc07724905bb7ef1
tree70afe36988a9b23538374f4f9300ea814697f57b
parentfea3af5e0358b014c653561109c11ebd3ecdbff2
usb: core: hub: Disable hub-initiated U1/U2

If the device rejects the control transfer to enable device-initiated
U1/U2 entry, then the device will not initiate U1/U2 transition. To
improve the performance, the downstream port should not initate
transition to U1/U2 to avoid the delay from the device link command
response (no packet can be transmitted while waiting for a response from
the device). If the device has some quirks and does not implement U1/U2,
it may reject all the link state change requests, and the downstream
port may resend and flood the bus with more requests. This will affect
the device performance even further. This patch disables the
hub-initated U1/U2 if the device-initiated U1/U2 entry fails.

Reference: USB 3.2 spec 7.2.4.2.3

Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/core/hub.c