On 2021/1/12 1:07, Alan Stern Wrote: > On Mon, Jan 11, 2021 at 07:29:37PM +0800, Longfang Liu wrote: >> The system that use Synopsys USB host controllers goes to suspend >> when using USB audio player. This causes the USB host controller >> continuous send interrupt signal to system, When the number of >> interrupts exceeds 100000, the system will forcibly close the >> interrupts and output a calltrace error. >> >> When the system goes to suspend, the last interrupt is reported to >> the driver. At this time, the system has set the state to suspend. >> This causes the last interrupt to not be processed by the system and >> not clear the interrupt flag. This uncleared interrupt flag constantly >> triggers new interrupt event. This causing the driver to receive more >> than 100,000 interrupts, which causes the system to forcibly close the >> interrupt report and report the calltrace error. >> >> so, when the driver goes to sleep and changes the system state to >> suspend, the interrupt flag needs to be cleared. >> >> Signed-off-by: Longfang Liu <liulongfang@xxxxxxxxxx> > > Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > OK, I will add it on the next patch Thanks, Longfang >> --- >> >> Changes in v2: >> - updated cleared registers >> >> drivers/usb/host/ehci-hub.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c >> index ce0eaf7..a99c1ac 100644 >> --- a/drivers/usb/host/ehci-hub.c >> +++ b/drivers/usb/host/ehci-hub.c >> @@ -346,8 +346,12 @@ static int ehci_bus_suspend (struct usb_hcd *hcd) >> >> unlink_empty_async_suspended(ehci); >> >> + /* Some Synopsys controllers mistakenly leave IAA turned on */ >> + ehci_writel(ehci, STS_IAA, &ehci->regs->status); >> + >> /* Any IAA cycle that started before the suspend is now invalid */ >> end_iaa_cycle(ehci); >> + >> ehci_handle_start_intr_unlinks(ehci); >> ehci_handle_intr_unlinks(ehci); >> end_free_itds(ehci); >> -- >> 2.8.1 >> > . >