mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 13:49:24 -04:00
xhci: Fix possible interrupt storm with suspend failure
In the case where the xhci_suspend failed because the controller is not halted within the delay, we see that the xhc interrupts are not acked and is leading to a storm of unwanted dwc3_interrupt calls. Fix this by setting the HCD_FLAG_HW_ACCESSIBLE so that the interrupts are acked by the xhci_irq. Once the suspend failure happens, the device does not respond to any new device connect/disconnect. So, fix this by restarting the host stack by notifying the hc_died to the dwc3 glue driver. Change-Id: Ie383d5eacca428b123c1a071a304df54e087c42e Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
This commit is contained in:
parent
5bc4b708d1
commit
6acfd3f836
1 changed files with 6 additions and 0 deletions
|
|
@ -1044,6 +1044,12 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup)
|
|||
if (xhci_handshake(&xhci->op_regs->status,
|
||||
STS_HALT, STS_HALT, delay)) {
|
||||
xhci_warn(xhci, "WARN: xHC CMD_RUN timeout\n");
|
||||
/* Set the HW_ACCESSIBLE so that any pending interrupts are
|
||||
* served.
|
||||
*/
|
||||
set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
|
||||
set_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags);
|
||||
xhci_hc_died(xhci);
|
||||
spin_unlock_irq(&xhci->lock);
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue