Re: [PATCH 1/3] usb: chipidea: udc: handle USB Error Interrupt if IOC not set

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

 



On Thu, Sep 12, 2024 at 11:35:49AM +0800, Xu Yang wrote:
> As per USBSTS register description about UEI:
>
>   When completion of a USB transaction results in an error condition, this
>   bit is set by the Host/Device Controller. This bit is set along with the
>   USBINT bit, if the TD on which the error interrupt occurred also had its
>   interrupt on complete (IOC) bit set.
>
> Currently, device controller will do nothing when endpoints met transfer
> error if IOC didn't set on that error dTD since UI didn't assert too. This
> will also handle UEI event as same as USBSTS.UI for such cases.

UI is set only when IOC set. Add checking UEI to fix miss call
isr_tr_complete_handler() when IOC have not set and transfer error happen.

If it is user visiable issue, add fix tag and cc stable.

>
> Signed-off-by: Xu Yang <xu.yang_2@xxxxxxx>
> ---
>  drivers/usb/chipidea/udc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> index 69ef3cd8d4f8..b9ccf62e0a50 100644
> --- a/drivers/usb/chipidea/udc.c
> +++ b/drivers/usb/chipidea/udc.c
> @@ -2063,7 +2063,7 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
>  			}
>  		}
>
> -		if (USBi_UI  & intr)
> +		if ((USBi_UI | USBi_UEI) & intr)

Does it work if check UEI only?

Frank

>  			isr_tr_complete_handler(ci);
>
>  		if ((USBi_SLI & intr) && !(ci->suspended)) {
> --
> 2.34.1
>




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux