| From d85702f1ce79e3b26385d61468276eda4dcc5f98 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 24 Mar 2021 15:11:09 +0100 |
| Subject: fotg210-udc: Fix DMA on EP0 for length > max packet size |
| |
| From: Fabian Vogt <fabian@ritter-vogt.de> |
| |
| [ Upstream commit 755915fc28edfc608fa89a163014acb2f31c1e19 ] |
| |
| For a 75 Byte request, it would send the first 64 separately, then detect |
| that the remaining 11 Byte fit into a single DMA, but due to this bug set |
| the length to the original 75 Bytes. This leads to a DMA failure (which is |
| ignored...) and the request completes without the remaining bytes having |
| been sent. |
| |
| Fixes: b84a8dee23fd ("usb: gadget: add Faraday fotg210_udc driver") |
| Signed-off-by: Fabian Vogt <fabian@ritter-vogt.de> |
| Link: https://lore.kernel.org/r/20210324141115.9384-2-fabian@ritter-vogt.de |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/usb/gadget/udc/fotg210-udc.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/usb/gadget/udc/fotg210-udc.c b/drivers/usb/gadget/udc/fotg210-udc.c |
| index 6866a0be249e..bc79bf46acc4 100644 |
| --- a/drivers/usb/gadget/udc/fotg210-udc.c |
| +++ b/drivers/usb/gadget/udc/fotg210-udc.c |
| @@ -348,7 +348,7 @@ static void fotg210_start_dma(struct fotg210_ep *ep, |
| if (req->req.length - req->req.actual > ep->ep.maxpacket) |
| length = ep->ep.maxpacket; |
| else |
| - length = req->req.length; |
| + length = req->req.length - req->req.actual; |
| } |
| |
| d = dma_map_single(NULL, buffer, length, |
| -- |
| 2.30.2 |
| |