linux/drivers/usb/dwc3
Steinar H. Gunderson 4879efb34f usb: dwc3: exynos: Fix deferred probing storm.
dwc3-exynos has two problems during init if the regulators are slow
to come up (for instance if the I2C bus driver is not on the initramfs)
and return probe deferral. First, every time this happens, the driver
leaks the USB phys created; they need to be deallocated on error.

Second, since the phy devices are created before the regulators fail,
this means that there's a new device to re-trigger deferred probing,
which causes it to essentially go into a busy loop of re-probing the
device until the regulators come up.

Move the phy creation to after the regulators have succeeded, and also
fix cleanup on failure. On my ODROID XU4 system (with Debian's initramfs
which doesn't contain the I2C driver), this reduces the number of probe
attempts (for each of the two controllers) from more than 2000 to eight.

Signed-off-by: Steinar H. Gunderson <sesse@google.com>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Reviewed-by: Vivek Gautam <gautam.vivek@samsung.com>
Fixes: d720f057fd ("usb: dwc3: exynos: add nop transceiver support")
Cc: <stable@vger.kernel.org>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
2016-05-31 11:12:42 +03:00
..
core.c usb: changes for v4.7 merge window 2016-04-28 09:32:39 -07:00
core.h usb: dwc3: gadget: fix mask and shift order in DWC3_DCFG_NUMP() 2016-05-03 14:32:07 -07:00
debug.c usb: dwc3: add tracepoints to aid debugging 2014-09-05 09:55:51 -05:00
debug.h usb: dwc3: make dwc3_debugfs_init return value be void 2016-04-19 11:11:53 +03:00
debugfs.c usb: changes for v4.7 merge window 2016-04-28 09:32:39 -07:00
dwc3-exynos.c usb: dwc3: exynos: Fix deferred probing storm. 2016-05-31 11:12:42 +03:00
dwc3-keystone.c usb: dwc3: keystone: drop dma_mask configuration 2016-04-06 16:36:01 +03:00
dwc3-of-simple.c usb: dwc3: Remove impossible check for of_clk_get_parent_count() < 0 2016-02-26 16:01:32 -08:00
dwc3-omap.c usb: changes for v4.7 merge window 2016-04-28 09:32:39 -07:00
dwc3-pci.c usb: dwc3: pci: pass the platform device as a parameter to dwc3_pci_quirks() 2016-04-28 09:01:59 +03:00
dwc3-st.c usb: common: of_usb_get_dr_mode to usb_get_dr_mode 2015-09-27 10:54:31 -05:00
ep0.c usb: dwc3: ep0: sanity check test mode selector 2016-04-28 09:01:34 +03:00
gadget.c usb: changes for v4.7 merge window 2016-04-28 09:32:39 -07:00
gadget.h usb: dwc3: better name for our request management lists 2016-04-14 09:24:38 +03:00
host.c usb: dwc3: make LPM configurable in DT 2015-03-10 15:33:33 -05:00
io.h usb: dwc3: add tracepoints to aid debugging 2014-09-05 09:55:51 -05:00
Kconfig usb: dwc3: remove dwc3-qcom in favor of dwc3-of-simple 2015-12-15 09:12:41 -06:00
Makefile usb: dwc3: remove dwc3-qcom in favor of dwc3-of-simple 2015-12-15 09:12:41 -06:00
platform_data.h usb: dwc3: add disable receiver detection in P3 quirk 2016-04-18 15:23:44 +03:00
trace.c usb: dwc3: add tracepoints to aid debugging 2014-09-05 09:55:51 -05:00
trace.h usb: dwc3: trace: show request flags 2015-12-15 09:12:41 -06:00
ulpi.c usb: dwc3: add ULPI interface support 2015-05-13 12:06:52 -05:00