diff mbox series

usb: dwc3: gadget: Workaround Mirosoft's BESL check

Message ID 02f8890eb7c60fa229ba599bf914936fe1491693.1567047731.git.thinhn@synopsys.com (mailing list archive)
State Superseded
Headers show
Series usb: dwc3: gadget: Workaround Mirosoft's BESL check | expand

Commit Message

Thinh Nguyen Aug. 29, 2019, 3:11 a.m. UTC
While testing our host system using Microsoft's usb stack against our
gadget for various BESL values, we found an issue with their usb stack
when the recommended baseline BESL value is 0 (125us) or when the deep
BESL is 1 or less. The Windows host will issue a usb reset immediately
after it receives the extended BOS descriptor and the enumeration will
fail after a few attempts.

To keep compatibility with Microsoft's host usb stack, let's workaround
this issue by using the recommended baseline BESL of 1 (or 150us)
and clamp the deep BESL value within 2 to 15.

This was tested against Windows 10 build 18956.

Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
---
 drivers/usb/dwc3/gadget.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Felipe Balbi Aug. 29, 2019, 4:28 a.m. UTC | #1
Hi,

Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:

> While testing our host system using Microsoft's usb stack against our
> gadget for various BESL values, we found an issue with their usb stack
> when the recommended baseline BESL value is 0 (125us) or when the deep
> BESL is 1 or less. The Windows host will issue a usb reset immediately
> after it receives the extended BOS descriptor and the enumeration will
> fail after a few attempts.
>
> To keep compatibility with Microsoft's host usb stack, let's workaround
> this issue by using the recommended baseline BESL of 1 (or 150us)
> and clamp the deep BESL value within 2 to 15.
>
> This was tested against Windows 10 build 18956.
>
> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
> ---
>  drivers/usb/dwc3/gadget.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index 7b58e0e1e438..9ef2259829ba 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -2083,9 +2083,10 @@ static void dwc3_gadget_config_params(struct usb_gadget *g,
>  
>  	/* Recommended BESL */
>  	if (!dwc->dis_enblslpm_quirk) {

let's add a comment here similar to what's in commit log so folks won't
go about changing this willy-nilly.

> -		params->besl_baseline = 0;
> +		params->besl_baseline = 1;
>  		if (dwc->is_utmi_l1_suspend)
> -			params->besl_deep = min_t(u8, dwc->hird_threshold, 15);
> +			params->besl_deep =
> +				clamp_t(u8, dwc->hird_threshold, 2, 15);
>  	}
>  
>  	/* U1 Device exit Latency */
> -- 
> 2.11.0
>
diff mbox series

Patch

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 7b58e0e1e438..9ef2259829ba 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2083,9 +2083,10 @@  static void dwc3_gadget_config_params(struct usb_gadget *g,
 
 	/* Recommended BESL */
 	if (!dwc->dis_enblslpm_quirk) {
-		params->besl_baseline = 0;
+		params->besl_baseline = 1;
 		if (dwc->is_utmi_l1_suspend)
-			params->besl_deep = min_t(u8, dwc->hird_threshold, 15);
+			params->besl_deep =
+				clamp_t(u8, dwc->hird_threshold, 2, 15);
 	}
 
 	/* U1 Device exit Latency */