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 >