linux/drivers/usb
Stefan Wahren 1cf1bd88f1 usb: dwc2: Fix HCD port connection race
On Raspberry Pis without onboard USB hub frequent device reconnects
can trigger a interrupt storm after DWC2 entered host clock gating.
This is caused by a race between _dwc2_hcd_suspend() and the port
interrupt, which sets port_connect_status. The issue occurs if
port_connect_status is still 1, but there is no connection anymore:

usb 1-1: USB disconnect, device number 25
dwc2 3f980000.usb: _dwc2_hcd_suspend: port_connect_status: 1
dwc2 3f980000.usb: Entering host clock gating.
Disabling IRQ #66
irq 66: nobody cared (try booting with the "irqpoll" option)
CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted 6.12.0-gc1bb81b13202-dirty #322
Hardware name: BCM2835
Call trace:
 unwind_backtrace from show_stack+0x10/0x14
 show_stack from dump_stack_lvl+0x50/0x64
 dump_stack_lvl from __report_bad_irq+0x38/0xc0
 __report_bad_irq from note_interrupt+0x2ac/0x2f4
 note_interrupt from handle_irq_event+0x88/0x8c
 handle_irq_event from handle_level_irq+0xb4/0x1ac
 handle_level_irq from generic_handle_domain_irq+0x24/0x34
 generic_handle_domain_irq from bcm2836_chained_handle_irq+0x24/0x28
 bcm2836_chained_handle_irq from generic_handle_domain_irq+0x24/0x34
 generic_handle_domain_irq from generic_handle_arch_irq+0x34/0x44
 generic_handle_arch_irq from __irq_svc+0x88/0xb0
 Exception stack(0xc1d01f20 to 0xc1d01f68)
 1f20: 0004ef3c 00000001 00000000 00000000 c1d09780 c1f6bb5c c1d04e54 c1c60ca8
 1f40: c1d04e94 00000000 00000000 c1d092a8 c1f6af20 c1d01f70 c1211b98 c1212f40
 1f60: 60000013 ffffffff
 __irq_svc from default_idle_call+0x1c/0xb0
 default_idle_call from do_idle+0x21c/0x284
 do_idle from cpu_startup_entry+0x28/0x2c
 cpu_startup_entry from kernel_init+0x0/0x12c
handlers:
 [<e3a25c00>] dwc2_handle_common_intr
 [<58bf98a3>] usb_hcd_irq
Disabling IRQ #66

So avoid this by reading the connection status directly.

Fixes: 113f86d0c3 ("usb: dwc2: Update partial power down entering by system suspend")
Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Link: https://lore.kernel.org/r/20241202001631.75473-4-wahrenst@gmx.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-12-04 16:30:05 +01:00
..
atm Merge 6.12-rc3 into usb-next 2024-10-14 08:03:44 +02:00
c67x00 usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
cdns3 usb: cdns3: Synchronise PCI IDs via common data base 2024-11-13 07:16:31 +01:00
chipidea usb: chipidea: imx: add imx8ulp support 2024-11-12 12:15:04 +01:00
class move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
common USB: make single lock for all usb dynamic id lists 2024-11-14 17:05:20 +01:00
core usb: core: hcd: only check primary hcd skip_phy_initialization 2024-12-04 16:26:44 +01:00
dwc2 usb: dwc2: Fix HCD port connection race 2024-12-04 16:30:05 +01:00
dwc3 usb: dwc3: xilinx: make sure pipe clock is deselected in usb2 only mode 2024-12-04 16:26:54 +01:00
early
fotg210 Merge 6.12-rc3 into usb-next 2024-10-14 08:03:44 +02:00
gadget usb: gadget: u_serial: Fix the issue that gs_start_io crashed due to accessing null pointer 2024-12-04 16:27:23 +01:00
host usb: host: max3421-hcd: Correctly abort a USB request. 2024-12-04 16:25:30 +01:00
image scsi: core: Add a dma_alignment field to the host and host template 2024-04-11 21:37:48 -04:00
isp1760 Kbuild updates for v6.13 2024-11-30 13:41:50 -08:00
misc usb: misc: onboard_usb_dev: skip suspend/resume sequence for USB5744 SMBus support 2024-12-04 16:27:04 +01:00
mon drivers/usb/mon: refactor min with min_t 2024-11-13 15:09:51 +01:00
mtu3 Kbuild updates for v6.13 2024-11-30 13:41:50 -08:00
musb Kbuild updates for v6.13 2024-11-30 13:41:50 -08:00
phy usb: Use (of|device)_property_present() for non-boolean properties 2024-11-05 13:29:26 +01:00
renesas_usbhs usb: Use (of|device)_property_present() for non-boolean properties 2024-11-05 13:29:26 +01:00
roles usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
serial USB / Thunderbolt (USB4) changes for 6.13-rc1 2024-11-29 11:19:31 -08:00
storage module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
typec usb: typec: anx7411: fix OF node reference leaks in anx7411_typec_switch_probe() 2024-12-04 16:25:54 +01:00
usbip usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
Kconfig usb: pci-quirks: handle HAS_IOPORT dependency for AMD quirk 2023-10-02 16:19:12 +02:00
Makefile USB: xen-hcd: Traverse host/ when CONFIG_USB_XEN_HCD is selected 2024-06-04 15:33:38 +02:00
usb-skeleton.c