mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
usb: xhci: fix host not responding after suspend and resume
Partially revert commite1db856bd2
("usb: xhci: remove '0' write to write-1-to-clear register") because the patch cleared the Interrupt Pending bit during interrupt enabling and disabling. The Interrupt Pending bit should only be cleared when the driver has handled the interrupt. Ideally, all interrupts should be handled before disabling the interrupt; consequently, no interrupt should be pending when enabling the interrupt. For this reason, keep the debug message informing if an interrupt is still pending when an interrupt is disabled. Because the Interrupt Pending bit is write-1-to-clear, writing '0' to it ensures that the state does not change. Link: https://lore.kernel.org/linux-usb/20250818231103.672ec7ed@foxbook Fixes:e1db856bd2
("usb: xhci: remove '0' write to write-1-to-clear register") Closes: https://bbs.archlinux.org/viewtopic.php?id=307641 cc: stable@vger.kernel.org # 6.16+ Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://lore.kernel.org/r/20250819125844.2042452-3-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2eb0337615
commit
ff9a09b3e0
@ -309,6 +309,7 @@ int xhci_enable_interrupter(struct xhci_interrupter *ir)
|
||||
return -EINVAL;
|
||||
|
||||
iman = readl(&ir->ir_set->iman);
|
||||
iman &= ~IMAN_IP;
|
||||
iman |= IMAN_IE;
|
||||
writel(iman, &ir->ir_set->iman);
|
||||
|
||||
@ -325,6 +326,7 @@ int xhci_disable_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir)
|
||||
return -EINVAL;
|
||||
|
||||
iman = readl(&ir->ir_set->iman);
|
||||
iman &= ~IMAN_IP;
|
||||
iman &= ~IMAN_IE;
|
||||
writel(iman, &ir->ir_set->iman);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user