linux/drivers/usb/host
Niklas Neronin ff9a09b3e0 usb: xhci: fix host not responding after suspend and resume
Partially revert commit e1db856bd2 ("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>
2025-08-19 16:12:13 +02:00
..
Kconfig USB: host: omap: Do not enable by default during compile testing 2025-04-25 13:20:23 +02:00
Makefile xhci: sideband: add initial api to register a secondary interrupter entity 2025-04-11 13:02:29 +02:00
bcma-hcd.c USB: bcma: Remove unused of_gpio.h 2024-11-04 01:27:52 +01:00
ehci-atmel.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-brcm.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-dbg.c USB: Use EHCI control transfer pid macros instead of constant values. 2024-03-26 10:43:35 +01:00
ehci-exynos.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-fsl.c usb: ehci-fsl: Fix use of private data to avoid -Wflex-array-member-not-at-end warning 2025-04-11 16:08:33 +02:00
ehci-fsl.h
ehci-grlib.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-hcd.c usb: ehci: Switch to use hrtimer_setup() 2025-02-18 11:19:02 +01:00
ehci-hub.c usb: ehci: add workaround for chipidea PORTSC.PEC bug 2023-08-09 14:16:06 +02:00
ehci-mem.c
ehci-mv.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-npcm7xx.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-omap.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-orion.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-pci.c USB: Extend pci resume function to handle PM events 2023-05-13 17:33:18 +09:00
ehci-platform.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
ehci-ppc-of.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-ps3.c
ehci-q.c USB: Use EHCI control transfer pid macros instead of constant values. 2024-03-26 10:43:35 +01:00
ehci-sched.c usb: host: ehci-sched: try to turn on io watchdog as long as periodic_count > 0 2023-08-12 10:03:22 +02:00
ehci-sh.c usb: ehci-hcd: fix call balance of clocks handling routines 2024-12-04 16:25:13 +01:00
ehci-spear.c usb: ehci-spear: fix call balance of sehci clk handling routines 2024-11-16 09:04:06 +01:00
ehci-st.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci-sysfs.c usb: ehci: replace scnprintf() with sysfs_emit() 2025-06-24 15:40:19 +01:00
ehci-timer.c
ehci-xilinx-of.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ehci.h USB: Use EHCI control transfer pid macros instead of constant values. 2024-03-26 10:43:35 +01:00
fhci-dbg.c
fhci-hcd.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
fhci-hub.c
fhci-mem.c
fhci-q.c
fhci-sched.c usb: host: fix typo in the comment 2024-10-04 15:08:37 +02:00
fhci-tds.c
fhci.h
fsl-mph-dr-of.c usb: fsl-mph-dr-of: Remove unnecessary NULL check before clk_disable_unprepare() 2025-06-19 12:27:29 +02:00
isp116x-hcd.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
isp116x.h
isp1362-hcd.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
isp1362.h
max3421-hcd.c usb: host: max3421-hcd: Add missing spi_device_id table 2025-02-03 16:28:54 +01:00
octeon-hcd.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
octeon-hcd.h
ohci-at91.c usb: ohci-at91: Use dynamic device name for OHCI HCD creation 2025-06-19 12:27:33 +02:00
ohci-da8xx.c Merge 6.12-rc3 into usb-next 2024-10-14 08:03:44 +02:00
ohci-dbg.c
ohci-exynos.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ohci-hcd.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
ohci-hub.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
ohci-mem.c
ohci-nxp.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ohci-omap.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ohci-pci.c USB: OHCI: Add quirk for LS7A OHCI controller (rev 0x02) 2025-04-11 16:21:20 +02:00
ohci-platform.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ohci-ppc-of.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ohci-ps3.c
ohci-pxa27x.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ohci-q.c
ohci-s3c2410.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ohci-sa1111.c
ohci-sm501.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ohci-spear.c usb: ohci-spear: Remove unnecessary NULL check before clk_disable_unprepare() 2025-06-19 12:27:26 +02:00
ohci-st.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
ohci.h usb: Annotate struct urb_priv with __counted_by 2023-10-02 09:48:52 -07:00
oxu210hp-hcd.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
pci-quirks.c USB: pci-quirks: Fix HCCPARAMS register error for LS7A EHCI 2025-02-14 09:18:14 +01:00
pci-quirks.h usb: pci-quirks: handle HAS_IOPORT dependency for AMD quirk 2023-10-02 16:19:12 +02:00
r8a66597-hcd.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
r8a66597.h
sl811-hcd.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
sl811.h
sl811_cs.c
ssb-hcd.c
uhci-debug.c
uhci-grlib.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
uhci-hcd.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
uhci-hcd.h usb: uhci: handle HAS_IOPORT dependencies 2023-05-29 15:29:03 +01:00
uhci-hub.c
uhci-pci.c Merge 6.4-rc4 into usb-next 2023-05-28 15:25:53 +01:00
uhci-platform.c usb: uhci-platform: Make the clock really optional 2025-05-01 17:39:16 +02:00
uhci-q.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
xen-hcd.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
xhci-caps.h usb: xhci: move doorbell array pointer assignment 2025-05-21 12:35:32 +02:00
xhci-dbg.c
xhci-dbgcap.c xhci: dbc: Flush queued requests before stopping dbc 2025-06-28 17:20:25 +02:00
xhci-dbgcap.h xhci: dbc: Avoid event polling busyloop if pending rx transfers are inactive. 2025-05-05 16:30:45 +02:00
xhci-dbgtty.c xhci: dbctty: disable ECHO flag by default 2025-06-28 17:20:22 +02:00
xhci-debugfs.c usb: xhci: Add debugfs support for xHCI port bandwidth 2025-05-21 12:35:31 +02:00
xhci-debugfs.h
xhci-ext-caps.c
xhci-ext-caps.h xhci: Add USB4 tunnel detection for USB3 devices on Intel hosts 2024-09-03 09:54:39 +02:00
xhci-histb.c usb: xhci: change xhci_resume() parameters to explicit the desired info 2025-03-14 09:18:02 +01:00
xhci-hub.c usb: xhci: Fix slot_id resource race conflict 2025-08-19 16:12:13 +02:00
xhci-mem.c usb: xhci: Fix slot_id resource race conflict 2025-08-19 16:12:13 +02:00
xhci-mtk-sch.c xhci: replace real & fake port with pointer to root hub port 2024-03-02 20:25:27 +01:00
xhci-mtk.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
xhci-mtk.h usb: xhci-mtk: fix a short packet issue of gen1 isoc-in transfer 2024-01-04 16:05:50 +01:00
xhci-mvebu.c usb: host: xhci-plat: mvebu: use ->quirks instead of ->init_quirk() func 2025-03-14 09:18:02 +01:00
xhci-mvebu.h usb: host: xhci-plat: mvebu: use ->quirks instead of ->init_quirk() func 2025-03-14 09:18:02 +01:00
xhci-pci-renesas.c usb: renesas-xhci: Fix External ROM access timeouts 2025-08-13 17:15:59 +02:00
xhci-pci.c usb: xhci: quirk for data loss in ISOC transfers 2025-06-28 17:19:57 +02:00
xhci-pci.h xhci-pci: Make xhci-pci-renesas a proper modular driver 2024-08-07 12:51:38 +02:00
xhci-plat.c Merge merge point of tag 'usb-6.16-rc5' into usb-next 2025-07-05 07:52:33 +02:00
xhci-plat.h usb: host: xhci-plat: allow upper layers to signal power loss 2025-03-14 09:18:02 +01:00
xhci-port.h XHCI: Separate PORT and CAPs macros into dedicated file 2024-01-27 17:39:09 -08:00
xhci-rcar.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
xhci-ring.c usb: xhci: Fix slot_id resource race conflict 2025-08-19 16:12:13 +02:00
xhci-rzv2m.c usb: xhci-plat: Don't include xhci.h 2024-04-23 16:25:29 -07:00
xhci-rzv2m.h
xhci-sideband.c usb: host: xhci: Notify xHCI sideband on transfer ring free 2025-04-11 13:02:30 +02:00
xhci-tegra.c usb: host: tegra: Prevent host controller crash when OTG port is used 2025-05-01 17:37:25 +02:00
xhci-trace.c xhci: Move functions to setup msi to xhci-pci 2023-03-23 17:25:22 +01:00
xhci-trace.h xhci: trace stream context at Set TR Deq command completion 2024-11-06 13:26:14 +01:00
xhci.c usb: xhci: fix host not responding after suspend and resume 2025-08-19 16:12:13 +02:00
xhci.h usb: xhci: Fix slot_id resource race conflict 2025-08-19 16:12:13 +02:00