linux_dsm_epyc7002/drivers/usb/dwc2
Douglas Anderson 6a6595318a usb: dwc2: host: Fix missing device insertions
If you've got your interrupt signals bouncing a bit as you insert your
USB device, you might end up in a state when the device is connected but
the driver doesn't know it.

Specifically, the observed order is:
 1. hardware sees connect
 2. hardware sees disconnect
 3. hardware sees connect
 4. dwc2_port_intr() - clears connect interrupt
 5. dwc2_handle_common_intr() - calls dwc2_hcd_disconnect()

Now you'll be stuck with the cable plugged in and no further interrupts
coming in but the driver will think we're disconnected.

We'll fix this by checking for the missing connect interrupt and
re-connecting after the disconnect is posted.  We don't skip the
disconnect because if there is a transitory disconnect we really want to
de-enumerate and re-enumerate.

Notes:
1. As part of this change we add a "force" parameter to
   dwc2_hcd_disconnect() so that when we're unloading the module we
   avoid the new behavior.  The need for this was pointed out by John
   Youn.
2. The bit of code needed at the end of dwc2_hcd_disconnect() is
   exactly the same bit of code from dwc2_port_intr().  To avoid
   duplication, we refactor that code out into a new function
   dwc2_hcd_connect().

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Acked-by: John Youn <johnyoun@synopsys.com>
Tested-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
2015-12-15 09:12:41 -06:00
..
core_intr.c usb: dwc2: host: Fix missing device insertions 2015-12-15 09:12:41 -06:00
core.c usb: dwc2: host: fix descriptor list address masking 2015-12-15 09:12:41 -06:00
core.h usb: dwc2: host: Fix missing device insertions 2015-12-15 09:12:41 -06:00
debug.h usb: dwc2: move debugfs code to a separate file 2015-04-29 15:18:25 -05:00
debugfs.c usb: dwc2: Use platform endianness when accessing registers 2015-09-27 10:54:31 -05:00
gadget.c usb: dwc2: refactor common low-level hw code to platform.c 2015-10-14 08:40:15 -05:00
hcd_ddma.c usb: dwc2: host: use kmem cache to allocate descriptors 2015-12-15 09:12:41 -06:00
hcd_intr.c usb: dwc2: host: Fix missing device insertions 2015-12-15 09:12:41 -06:00
hcd_queue.c usb: dwc2: host: enable descriptor dma for fs devices 2015-12-15 09:12:41 -06:00
hcd.c usb: dwc2: host: Fix missing device insertions 2015-12-15 09:12:41 -06:00
hcd.h usb: dwc2: host: avoid usage of dma_alloc_coherent with irqs disabled 2015-12-15 09:12:41 -06:00
hw.h usb: dwc2: host: fix descriptor list address masking 2015-12-15 09:12:41 -06:00
Kconfig usb: dwc2: remove dwc2_platform.ko 2015-04-29 15:20:11 -05:00
Makefile usb: dwc2: remove dwc2_platform.ko 2015-04-29 15:20:11 -05:00
pci.c usb: dwc2: pci: Add device mode to the dwc2-pci driver 2015-03-11 15:08:17 -05:00
platform.c usb: dwc2: add support of hi6220 2015-12-15 09:12:41 -06:00