2018-05-30 04:08:10

by Zengtao (B)

[permalink] [raw]
Subject: [PATCH] usb: dwc2: gadget: fix missing process for isoc descriptor dma mode

If it's the first request to queue, and we are using descriptor dma mode
for isoc transfer, we only need to add the request to the queue, and it
will be processed in the future nak interrupt handler.

Signed-off-by: Zeng Tao <[email protected]>
---
drivers/usb/dwc2/gadget.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
index f0d9ccf..48e3a48c 100644
--- a/drivers/usb/dwc2/gadget.c
+++ b/drivers/usb/dwc2/gadget.c
@@ -1365,6 +1365,9 @@ static int dwc2_hsotg_ep_queue(struct usb_ep *ep, struct usb_request *req,
return 0;
}

+ if (using_desc_dma(hs))
+ return 0;
+
/* Update current frame number value. */
hs->frame_number = dwc2_hsotg_read_frameno(hs);
while (dwc2_gadget_target_frame_elapsed(hs_ep)) {
--
2.7.4



2018-05-30 07:17:38

by Minas Harutyunyan

[permalink] [raw]
Subject: Re: [PATCH] usb: dwc2: gadget: fix missing process for isoc descriptor dma mode

Hi Zeng Tao,

On 5/30/2018 9:09 AM, Zeng Tao wrote:
> If it's the first request to queue, and we are using descriptor dma mode
> for isoc transfer, we only need to add the request to the queue, and it
> will be processed in the future nak interrupt handler.
>
> Signed-off-by: Zeng Tao <[email protected]>
> ---
> drivers/usb/dwc2/gadget.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
> index f0d9ccf..48e3a48c 100644
> --- a/drivers/usb/dwc2/gadget.c
> +++ b/drivers/usb/dwc2/gadget.c
> @@ -1365,6 +1365,9 @@ static int dwc2_hsotg_ep_queue(struct usb_ep *ep, struct usb_request *req,
> return 0;
> }
>
> + if (using_desc_dma(hs))
> + return 0;
> +
> /* Update current frame number value. */
> hs->frame_number = dwc2_hsotg_read_frameno(hs);
> while (dwc2_gadget_target_frame_elapsed(hs_ep)) {
>

Actually it considered in "[PATCH] usb: dwc2: Change ISOC DDMA flow"
before checking is this request first or no:

+ if (using_desc_dma(hs) && hs_ep->isochronous) {
+ if (hs_ep->target_frame != TARGET_FRAME_INITIAL) {
+ dwc2_gadget_fill_isoc_desc(hs_ep, hs_req->req.dma,
+ hs_req->req.length);
+ }
return 0;
}


Thanks,
Minas

2018-05-31 01:18:31

by Zengtao (B)

[permalink] [raw]
Subject: RE: [PATCH] usb: dwc2: gadget: fix missing process for isoc descriptor dma mode

Hi Minus:

>-----Original Message-----
>From: Minas Harutyunyan [mailto:[email protected]]
>Sent: Wednesday, May 30, 2018 3:17 PM
>To: Zengtao (B) <[email protected]>;
>[email protected]
>Cc: Greg Kroah-Hartman <[email protected]>;
>[email protected]; [email protected]
>Subject: Re: [PATCH] usb: dwc2: gadget: fix missing process for isoc
>descriptor dma mode
>
>Hi Zeng Tao,
>
>On 5/30/2018 9:09 AM, Zeng Tao wrote:
>> If it's the first request to queue, and we are using descriptor dma
>> mode for isoc transfer, we only need to add the request to the queue,
>> and it will be processed in the future nak interrupt handler.
>>
>> Signed-off-by: Zeng Tao <[email protected]>
>> ---
>> drivers/usb/dwc2/gadget.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
>> index f0d9ccf..48e3a48c 100644
>> --- a/drivers/usb/dwc2/gadget.c
>> +++ b/drivers/usb/dwc2/gadget.c
>> @@ -1365,6 +1365,9 @@ static int dwc2_hsotg_ep_queue(struct
>usb_ep *ep, struct usb_request *req,
>> return 0;
>> }
>>
>> + if (using_desc_dma(hs))
>> + return 0;
>> +
>> /* Update current frame number value. */
>> hs->frame_number = dwc2_hsotg_read_frameno(hs);
>> while (dwc2_gadget_target_frame_elapsed(hs_ep)) {
>>
>
>Actually it considered in "[PATCH] usb: dwc2: Change ISOC DDMA flow"
>before checking is this request first or no:

Yes, it,s. Thank you for pointing it out.
>
>+ if (using_desc_dma(hs) && hs_ep->isochronous) {
>+ if (hs_ep->target_frame != TARGET_FRAME_INITIAL) {
>+ dwc2_gadget_fill_isoc_desc(hs_ep, hs_req->req.dma,
>+ hs_req->req.length);
>+ }
> return 0;
> }
>
>
>Thanks,
>Minas

Regards
Zengtao