RE: [PATCH] usb: dwc3: Reset the transfer resource index on SET_INTERFACE

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

 



Hi Felipe,

> -----Original Message-----
> From: Felipe Balbi [mailto:balbi@xxxxxx]
> Sent: Tuesday, July 21, 2015 7:59 PM
> To: Linux USB Mailing List
> Cc: David Cohen; Subbaraya Sundeep Bhatta; Andy Gross; Kukjin Kim;
> Heikki Krogerus; Huang Rui; John Youn; stable@xxxxxxxxxxxxxxx; John Youn;
> Felipe Balbi
> Subject: [PATCH] usb: dwc3: Reset the transfer resource index on
> SET_INTERFACE
> 
> From: John Youn <John.Youn@xxxxxxxxxxxx>
> 
> This fixes an issue introduced in commit b23c843992b6 (usb: dwc3:
> gadget: fix DEPSTARTCFG for non-EP0 EPs) that made sure we would only
> use DEPSTARTCFG once per SetConfig.
> 
> The trick is that we should use one DEPSTARTCFG per SetConfig *OR*
> SetInterface. SetInterface was completely missed from the original patch.
> 
> This problem became aparent after commit 76e838c9f776 (usb: dwc3:
> gadget: return error if command sent to DEPCMD register fails) added
> checking of the return status of device endpoint commands.
> 
> 'Set Endpoint Transfer Resource' command was caught failing occasionally.
> This is because the Transfer Resource Index was not getting reset during a
> SET_INTERFACE request.
> 
> Finally, to fix the issue, was we have to do is make sure that our
> start_config_issued flag gets reset whenever we receive a SetInterface
> request.
> 
> To verify the problem (and its fix), all we have to do is run test 9 from
> testusb with 'testusb -t 9 -s 2048 -a -c 5000'.
> 
> Fixes: b23c843992b6 (usb: dwc3: gadget: fix DEPSTARTCFG for non-EP0
> EPs)
> Cc: <stable@xxxxxxxxxxxxxxx> # v3.2+
> Signed-off-by: John Youn <johnyoun@xxxxxxxxxxxx>
> Signed-off-by: Felipe Balbi <balbi@xxxxxx>
> ---
> 
> I have improved commit log and blamed correct commit. Also added stable
> Cc so we have a chance of fixing older kernels.
> 
> If you can test on your end, I'd be glad to add Tested-bys, but do so by
> tomorrow because it's extra important that we get this patch in.

unknown speed   /dev/bus/usb/001/008      0
/dev/bus/usb/001/008 test 9, 1213.703994 secs

It works fine at my end. 
As I mentioned earlier, mine is very slow setup and it took  ~1213 secs :)

Thanks,
Sundeep 
> 
> This is working fine for me with test.sh/testusb
> 
> cheers
> 
>  drivers/usb/dwc3/ep0.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index
> 2ef3c8d6a9db..69e769c35cf5 100644
> --- a/drivers/usb/dwc3/ep0.c
> +++ b/drivers/usb/dwc3/ep0.c
> @@ -727,6 +727,10 @@ static int dwc3_ep0_std_request(struct dwc3
> *dwc, struct usb_ctrlrequest *ctrl)
>  		dwc3_trace(trace_dwc3_ep0,
> "USB_REQ_SET_ISOCH_DELAY");
>  		ret = dwc3_ep0_set_isoch_delay(dwc, ctrl);
>  		break;
> +	case USB_REQ_SET_INTERFACE:
> +		dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_INTERFACE");
> +		dwc->start_config_issued = false;
> +		/* Fall through */
>  	default:
>  		dwc3_trace(trace_dwc3_ep0, "Forwarding to gadget
> driver");
>  		ret = dwc3_ep0_delegate_req(dwc, ctrl);
> --
> 2.4.4

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



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]