RE: [PATCH] usb: cdns3: Fix issue for clear halt endpoint

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

 



Hi Greg,
 
It is backport to 5.4 stable version.
Please apply this patch.

Thanks,
Pawel

>commit b3fa25de31fb7e9afebe9599b8ff32eda13d7c94 upstream.
>
>Path fixes bug which occurs during resetting endpoint in
>__cdns3_gadget_ep_clear_halt function. During resetting endpoint
>controller will change HW/DMA owned TRB. It set Abort flag in
>trb->control and will change trb->length field. If driver want
>to use the aborted trb it must update the changed field in
>TRB.
>
>Fixes: 7733f6c32e36 ("usb: cdns3: Add Cadence USB3 DRD Driver")
>cc: <stable@xxxxxxxxxxxxxxx>
>Acked-by: Peter Chen <peter.chen@xxxxxxxxxx>
>Signed-off-by: Pawel Laszczak <pawell@xxxxxxxxxxx>
>---
> drivers/usb/cdns3/gadget.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c
>index 296f2ee1b680..4990f048d30f 100644
>--- a/drivers/usb/cdns3/gadget.c
>+++ b/drivers/usb/cdns3/gadget.c
>@@ -2166,6 +2166,7 @@ int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep)
> 	struct usb_request *request;
> 	struct cdns3_request *priv_req;
> 	struct cdns3_trb *trb = NULL;
>+	struct cdns3_trb trb_tmp;
> 	int ret;
> 	int val;
>
>@@ -2175,8 +2176,10 @@ int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep)
> 	if (request) {
> 		priv_req = to_cdns3_request(request);
> 		trb = priv_req->trb;
>-		if (trb)
>+		if (trb) {
>+			trb_tmp = *trb;
> 			trb->control = trb->control ^ TRB_CYCLE;
>+		}
> 	}
>
> 	writel(EP_CMD_CSTALL | EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
>@@ -2191,7 +2194,8 @@ int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep)
>
> 	if (request) {
> 		if (trb)
>-			trb->control = trb->control ^ TRB_CYCLE;
>+			*trb = trb_tmp;
>+
> 		cdns3_rearm_transfer(priv_ep, 1);
> 	}
>
>--
>2.25.1





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

  Powered by Linux