All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Chen <peter.chen@kernel.org>
To: Xu Yang <xu.yang_2@nxp.com>
Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org,
	imx@lists.linux.dev, jun.li@nxp.com
Subject: Re: [PATCH v2 3/3] usb: chipidea: udc: improve error recovery for ISO transfer
Date: Wed, 25 Sep 2024 20:44:00 +0800	[thread overview]
Message-ID: <20240925124400.GC417263@nchen-desktop> (raw)
In-Reply-To: <20240920094056.2680590-3-xu.yang_2@nxp.com>

On 24-09-20 17:40:56, Xu Yang wrote:
> Impove device mode ISO transfer error tolerant by reprime the corresponding
> endpoint.
> 
> The recovery steps when error occurs:
> - Delete the error dTD from dQH and giveback request to user.
> - Do reprime if dQH is not empty.
> - Do prime when new dTD is queued if dQH is empty
> 
> Signed-off-by: Xu Yang <xu.yang_2@nxp.com>

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


> 
> ---
> Changes in v2:
>  - modify commit message
>  - keep "hwreq->req.status = tmptoken & TD_STATUS"
>  - giveback status 0 to user for isoc error case
> ---
>  drivers/usb/chipidea/udc.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> index c0b8745234c6..e1121db0aea0 100644
> --- a/drivers/usb/chipidea/udc.c
> +++ b/drivers/usb/chipidea/udc.c
> @@ -823,6 +823,7 @@ static int _hardware_dequeue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq)
>  	unsigned remaining_length;
>  	unsigned actual = hwreq->req.length;
>  	struct ci_hdrc *ci = hwep->ci;
> +	bool is_isoc = hwep->type == USB_ENDPOINT_XFER_ISOC;
>  
>  	if (hwreq->req.status != -EALREADY)
>  		return -EINVAL;
> @@ -836,7 +837,7 @@ static int _hardware_dequeue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq)
>  			int n = hw_ep_bit(hwep->num, hwep->dir);
>  
>  			if (ci->rev == CI_REVISION_24 ||
> -			    ci->rev == CI_REVISION_22)
> +			    ci->rev == CI_REVISION_22 || is_isoc)
>  				if (!hw_read(ci, OP_ENDPTSTAT, BIT(n)))
>  					reprime_dtd(ci, hwep, node);
>  			hwreq->req.status = -EALREADY;
> @@ -855,11 +856,15 @@ static int _hardware_dequeue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq)
>  			hwreq->req.status = -EPROTO;
>  			break;
>  		} else if ((TD_STATUS_TR_ERR & hwreq->req.status)) {
> -			hwreq->req.status = -EILSEQ;
> -			break;
> +			if (is_isoc) {
> +				hwreq->req.status = 0;
> +			} else {
> +				hwreq->req.status = -EILSEQ;
> +				break;
> +			}
>  		}
>  
> -		if (remaining_length) {
> +		if (remaining_length && !is_isoc) {
>  			if (hwep->dir == TX) {
>  				hwreq->req.status = -EPROTO;
>  				break;
> -- 
> 2.34.1
> 

  reply	other threads:[~2024-09-25 12:44 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-20  9:40 [PATCH v2 1/3] usb: chipidea: udc: handle USB Error Interrupt if IOC not set Xu Yang
2024-09-20  9:40 ` [PATCH v2 2/3] usb: chipidea: udc: improve dTD link logic Xu Yang
2024-09-25 12:43   ` Peter Chen
2024-09-20  9:40 ` [PATCH v2 3/3] usb: chipidea: udc: improve error recovery for ISO transfer Xu Yang
2024-09-25 12:44   ` Peter Chen [this message]
2024-09-25 12:42 ` [PATCH v2 1/3] usb: chipidea: udc: handle USB Error Interrupt if IOC not set Peter Chen
2024-09-26  2:11   ` Xu Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240925124400.GC417263@nchen-desktop \
    --to=peter.chen@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=imx@lists.linux.dev \
    --cc=jun.li@nxp.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=xu.yang_2@nxp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.