| From d53dc38857f6dbefabd9eecfcbf67b6eac9a1ef4 Mon Sep 17 00:00:00 2001 |
| From: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com> |
| Date: Tue, 20 Jul 2021 05:41:24 -0700 |
| Subject: usb: dwc2: gadget: Fix sending zero length packet in DDMA mode. |
| |
| From: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com> |
| |
| commit d53dc38857f6dbefabd9eecfcbf67b6eac9a1ef4 upstream. |
| |
| Sending zero length packet in DDMA mode perform by DMA descriptor |
| by setting SP (short packet) flag. |
| |
| For DDMA in function dwc2_hsotg_complete_in() does not need to send |
| zlp. |
| |
| Tested by USBCV MSC tests. |
| |
| Fixes: f71b5e2533de ("usb: dwc2: gadget: fix zero length packet transfers") |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com> |
| Link: https://lore.kernel.org/r/967bad78c55dd2db1c19714eee3d0a17cf99d74a.1626777738.git.Minas.Harutyunyan@synopsys.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/usb/dwc2/gadget.c | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/usb/dwc2/gadget.c |
| +++ b/drivers/usb/dwc2/gadget.c |
| @@ -2749,12 +2749,14 @@ static void dwc2_hsotg_complete_in(struc |
| return; |
| } |
| |
| - /* Zlp for all endpoints, for ep0 only in DATA IN stage */ |
| + /* Zlp for all endpoints in non DDMA, for ep0 only in DATA IN stage */ |
| if (hs_ep->send_zlp) { |
| - dwc2_hsotg_program_zlp(hsotg, hs_ep); |
| hs_ep->send_zlp = 0; |
| - /* transfer will be completed on next complete interrupt */ |
| - return; |
| + if (!using_desc_dma(hsotg)) { |
| + dwc2_hsotg_program_zlp(hsotg, hs_ep); |
| + /* transfer will be completed on next complete interrupt */ |
| + return; |
| + } |
| } |
| |
| if (hs_ep->index == 0 && hsotg->ep0_state == DWC2_EP0_DATA_IN) { |