public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usb: cdns3: Fix issue for clear halt endpoint
@ 2022-03-29  8:46 Pawel Laszczak
  2022-04-09  2:35 ` Peter Chen
  0 siblings, 1 reply; 6+ messages in thread
From: Pawel Laszczak @ 2022-03-29  8:46 UTC (permalink / raw)
  To: peter.chen
  Cc: pawell, rogerq, a-govindraju, gregkh, felipe.balbi, linux-usb,
	linux-kernel, stable

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@vger.kernel.org>
Signed-off-by: Pawel Laszczak <pawell@cadence.com>
---
 drivers/usb/cdns3/cdns3-gadget.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c
index 80aaab159e58..3a9f0968fd24 100644
--- a/drivers/usb/cdns3/cdns3-gadget.c
+++ b/drivers/usb/cdns3/cdns3-gadget.c
@@ -2682,6 +2682,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;
 
@@ -2691,8 +2692,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 ^ cpu_to_le32(TRB_CYCLE);
+		}
 	}
 
 	writel(EP_CMD_CSTALL | EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
@@ -2707,7 +2710,7 @@ int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep)
 
 	if (request) {
 		if (trb)
-			trb->control = trb->control ^ cpu_to_le32(TRB_CYCLE);
+			*trb = trb_tmp;
 
 		cdns3_rearm_transfer(priv_ep, 1);
 	}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] usb: cdns3: Fix issue for clear halt endpoint
  2022-03-29  8:46 [PATCH] usb: cdns3: Fix issue for clear halt endpoint Pawel Laszczak
@ 2022-04-09  2:35 ` Peter Chen
  0 siblings, 0 replies; 6+ messages in thread
From: Peter Chen @ 2022-04-09  2:35 UTC (permalink / raw)
  To: Pawel Laszczak
  Cc: rogerq, a-govindraju, gregkh, felipe.balbi, linux-usb,
	linux-kernel, stable

On 22-03-29 10:46:05, Pawel Laszczak wrote:
> Path fixes bug which occurs during resetting endpoint in

%s/Path/Patch, otherwise:

Acked-by: Peter Chen <peter.chen@kernel.org>

> __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@vger.kernel.org>
> Signed-off-by: Pawel Laszczak <pawell@cadence.com>
> ---
>  drivers/usb/cdns3/cdns3-gadget.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c
> index 80aaab159e58..3a9f0968fd24 100644
> --- a/drivers/usb/cdns3/cdns3-gadget.c
> +++ b/drivers/usb/cdns3/cdns3-gadget.c
> @@ -2682,6 +2682,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;
>  
> @@ -2691,8 +2692,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 ^ cpu_to_le32(TRB_CYCLE);
> +		}
>  	}
>  
>  	writel(EP_CMD_CSTALL | EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
> @@ -2707,7 +2710,7 @@ int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep)
>  
>  	if (request) {
>  		if (trb)
> -			trb->control = trb->control ^ cpu_to_le32(TRB_CYCLE);
> +			*trb = trb_tmp;
>  
>  		cdns3_rearm_transfer(priv_ep, 1);
>  	}
> -- 
> 2.25.1
> 

-- 

Thanks,
Peter Chen


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] usb: cdns3: Fix issue for clear halt endpoint
@ 2022-08-25 11:10 Pawel Laszczak
  0 siblings, 0 replies; 6+ messages in thread
From: Pawel Laszczak @ 2022-08-25 11:10 UTC (permalink / raw)
  Cc: pawell, stable, Peter Chen

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@vger.kernel.org>
Acked-by: Peter Chen <peter.chen@kernel.org>
Signed-off-by: Pawel Laszczak <pawell@cadence.com>
---
 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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH] usb: cdns3: Fix issue for clear halt endpoint
@ 2022-08-25 11:12 Pawel Laszczak
  2022-08-25 11:19 ` Pawel Laszczak
  0 siblings, 1 reply; 6+ messages in thread
From: Pawel Laszczak @ 2022-08-25 11:12 UTC (permalink / raw)
  To: stable; +Cc: pawell, Peter Chen

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@vger.kernel.org>
Acked-by: Peter Chen <peter.chen@kernel.org>
Signed-off-by: Pawel Laszczak <pawell@cadence.com>
---
 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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* RE: [PATCH] usb: cdns3: Fix issue for clear halt endpoint
  2022-08-25 11:12 Pawel Laszczak
@ 2022-08-25 11:19 ` Pawel Laszczak
  2022-08-25 11:57   ` Greg KH
  0 siblings, 1 reply; 6+ messages in thread
From: Pawel Laszczak @ 2022-08-25 11:19 UTC (permalink / raw)
  To: Pawel Laszczak, stable@vger.kernel.org; +Cc: Peter Chen


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@vger.kernel.org>
>Acked-by: Peter Chen <peter.chen@kernel.org>
>Signed-off-by: Pawel Laszczak <pawell@cadence.com>
>---
> 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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] usb: cdns3: Fix issue for clear halt endpoint
  2022-08-25 11:19 ` Pawel Laszczak
@ 2022-08-25 11:57   ` Greg KH
  0 siblings, 0 replies; 6+ messages in thread
From: Greg KH @ 2022-08-25 11:57 UTC (permalink / raw)
  To: Pawel Laszczak; +Cc: stable@vger.kernel.org, Peter Chen

On Thu, Aug 25, 2022 at 11:19:32AM +0000, Pawel Laszczak wrote:
> 
> Hi Greg,
>  
> It is backport to 5.4 stable version.
> Please apply this patch.

Now queued up, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-08-25 11:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-29  8:46 [PATCH] usb: cdns3: Fix issue for clear halt endpoint Pawel Laszczak
2022-04-09  2:35 ` Peter Chen
  -- strict thread matches above, loose matches on Subject: below --
2022-08-25 11:10 Pawel Laszczak
2022-08-25 11:12 Pawel Laszczak
2022-08-25 11:19 ` Pawel Laszczak
2022-08-25 11:57   ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox