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 01:26:12AM -0400, Frank Li wrote:
> 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.

Okay.

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

Okay.

> 
> >
> > 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?

Not work, we will lost normal USB transaction complete event.

Thanks,
Xu Yang

> 
> 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