Message ID | 20240920094056.2680590-1-xu.yang_2@nxp.com |
---|---|
State | New |
Headers | show |
Series | [v2,1/3] usb: chipidea: udc: handle USB Error Interrupt if IOC not set | expand |
On Wed, Sep 25, 2024 at 08:42:00PM +0800, Peter Chen wrote: > On 24-09-20 17:40:54, 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. > > > > 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. > > > > Fixes: 26c696c678c4 ("USB: Chipidea: rename struct ci13xxx variables from udc to ci") > > Cc: stable@vger.kernel.org > > Acked-by: Peter Chen <peter.chen@kernel.com> > > Signed-off-by: Xu Yang <xu.yang_2@nxp.com> > > Since this driver has used more than ten years for many vendors, I am > not sure if will affect others or not. Please do not CC stable tree, or > send it to stable tree when this patch at master more than half an year > without no one report issue. Okay. I'm going to remove fix tag and stable maillist in v3. Thanks, Xu Yang
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index 95b697f08a76..e0092c735a75 100644 --- a/drivers/usb/chipidea/udc.c +++ b/drivers/usb/chipidea/udc.c @@ -2215,7 +2215,7 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci) } } - if (USBi_UI & intr) + if ((USBi_UI | USBi_UEI) & intr) isr_tr_complete_handler(ci); if ((USBi_SLI & intr) && !(ci->suspended)) {