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