On 24-08-23 15:38:32, Xu Yang wrote: > Currently, suspend interrupt is enabled before pullup enable operation. > This will cause a suspend interrupt assert right after pullup DP. This > suspend interrupt is meaningless, so this will ignore such interrupt > by enable it after usb reset completed. > > Signed-off-by: Xu Yang <xu.yang_2@xxxxxxx> Acked-by: Peter Chen <peter.chen@xxxxxxxxxx> > --- > drivers/usb/chipidea/udc.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c > index 2d7f616270c1..69ef3cd8d4f8 100644 > --- a/drivers/usb/chipidea/udc.c > +++ b/drivers/usb/chipidea/udc.c > @@ -86,7 +86,7 @@ static int hw_device_state(struct ci_hdrc *ci, u32 dma) > hw_write(ci, OP_ENDPTLISTADDR, ~0, dma); > /* interrupt, error, port change, reset, sleep/suspend */ > hw_write(ci, OP_USBINTR, ~0, > - USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI); > + USBi_UI|USBi_UEI|USBi_PCI|USBi_URI); > } else { > hw_write(ci, OP_USBINTR, ~0, 0); > } > @@ -877,6 +877,7 @@ __releases(ci->lock) > __acquires(ci->lock) > { > int retval; > + u32 intr; > > spin_unlock(&ci->lock); > if (ci->gadget.speed != USB_SPEED_UNKNOWN) > @@ -890,6 +891,11 @@ __acquires(ci->lock) > if (retval) > goto done; > > + /* clear SLI */ > + hw_write(ci, OP_USBSTS, USBi_SLI, USBi_SLI); > + intr = hw_read(ci, OP_USBINTR, ~0); > + hw_write(ci, OP_USBINTR, ~0, intr | USBi_SLI); > + > ci->status = usb_ep_alloc_request(&ci->ep0in->ep, GFP_ATOMIC); > if (ci->status == NULL) > retval = -ENOMEM; > -- > 2.34.1 >