ACK: [SRU][Bionic/OEM-B][PATCH 1/1] usb: Don't disable Latency tolerance Messaging (LTM) before port reset

Kleber Souza kleber.souza at canonical.com
Wed Oct 17 11:49:58 UTC 2018


On 10/17/18 13:45, Hui Wang wrote:
> From: Mathias Nyman <mathias.nyman at linux.intel.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1798328
> 
> Disabing Latency Tolerance Messaging before port reset is unnecessary.
> LTM is automatically disabled at port reset.
> 
> If host can't communicate with the device the LTM message will fail, and
> the hub driver will unnecessarily do a logical disconnect.
> Broken communication is ofter the reason for a reset in the first place.
> 
> Additionally we can't guarantee device is in a configured state,
> epecially in reset-resume case when root hub lost power.
> LTM can't be modified unless device is in a configured state.
> 
> Just remove LTM disabling before port reset.
> 
> Details about LTM and port reset in USB 3 specification:
> 
> USB 3 spec section 9.4.5
> "The LTM Enable field can be modified by the SetFeature() and
> ClearFeature() requests using the LTM_ENABLE feature selector.
> This field is reset to zero when the device is reset."
> 
> USB 3 spec section 9.4.1
> "The device shall process a Clear Feature (U1_Enable or U2_Enable or
> LTM_Enable) only if the device is in the configured state."
> 
> Signed-off-by: Mathias Nyman <mathias.nyman at linux.intel.com>
> Acked-by: Alan Stern <stern at rowland.harvard.edu>
> Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
> (backported from commit 57edd462270bf2c50049b73774cb5915e2f12aa8)
> Signed-off-by: Hui Wang <hui.wang at canonical.com>

Acked-by: Kleber Sacilotto de Souza <kleber.souza at canonical.com>

> ---
>  drivers/usb/core/hub.c | 13 +++----------
>  1 file changed, 3 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index 2e7ba720d465..1bcd1755f97d 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -5485,22 +5485,15 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
>  	if (udev->usb2_hw_lpm_enabled == 1)
>  		usb_set_usb2_hardware_lpm(udev, 0);
>  
> -	/* Disable LPM and LTM while we reset the device and reinstall the alt
> -	 * settings.  Device-initiated LPM settings, and system exit latency
> -	 * settings are cleared when the device is reset, so we have to set
> -	 * them up again.
> +	/* Disable LPM while we reset the device and reinstall the alt settings.
> +	 * Device-initiated LPM, and system exit latency settings are cleared
> +	 * when the device is reset, so we have to set them up again.
>  	 */
>  	ret = usb_unlocked_disable_lpm(udev);
>  	if (ret) {
>  		dev_err(&udev->dev, "%s Failed to disable LPM\n.", __func__);
>  		goto re_enumerate_no_bos;
>  	}
> -	ret = usb_disable_ltm(udev);
> -	if (ret) {
> -		dev_err(&udev->dev, "%s Failed to disable LTM\n.",
> -				__func__);
> -		goto re_enumerate_no_bos;
> -	}
>  
>  	bos = udev->bos;
>  	udev->bos = NULL;
> 





More information about the kernel-team mailing list