exynos-linux-stable/drivers/usb/dwc3
Roger Quadros 7abf66d78e usb: dwc3: gadget: Fix system suspend/resume on TI platforms
[ Upstream commit 1551e35ea4189c1f7199fe278395fc94196715f2 ]

On TI platforms (dra7, am437x), the DWC3_DSTS_DEVCTRLHLT bit is not set
after the device controller is stopped via DWC3_DCTL_RUN_STOP.

If we don't disconnect and stop the gadget, it stops working after a
system resume with the trace below.

There is no point in preventing gadget disconnect and gadget stop during
system suspend/resume as we're going to suspend in any case, whether
DEVCTRLHLT timed out or not.

[  141.727480] ------------[ cut here ]------------
[  141.732349] WARNING: CPU: 1 PID: 2135 at drivers/usb/dwc3/gadget.c:2384 dwc3_stop_active_transfer.constprop.4+0xc4/0xe4 [dwc3]
[  141.744299] Modules linked in: usb_f_ss_lb g_zero libcomposite xhci_plat_hcd xhci_hcd usbcore dwc3 evdev udc_core m25p80 usb_common spi_nor snd_soc_davinci_mcasp snd_soc_simple_card snd_soc_edma snd_soc_tlv3e
[  141.792163] CPU: 1 PID: 2135 Comm: irq/456-dwc3 Not tainted 4.10.0-rc8 #1138
[  141.799547] Hardware name: Generic DRA74X (Flattened Device Tree)
[  141.805940] [<c01101b4>] (unwind_backtrace) from [<c010c31c>] (show_stack+0x10/0x14)
[  141.814066] [<c010c31c>] (show_stack) from [<c04a0918>] (dump_stack+0xac/0xe0)
[  141.821648] [<c04a0918>] (dump_stack) from [<c013708c>] (__warn+0xd8/0x104)
[  141.828955] [<c013708c>] (__warn) from [<c0137164>] (warn_slowpath_null+0x20/0x28)
[  141.836902] [<c0137164>] (warn_slowpath_null) from [<bf27784c>] (dwc3_stop_active_transfer.constprop.4+0xc4/0xe4 [dwc3])
[  141.848329] [<bf27784c>] (dwc3_stop_active_transfer.constprop.4 [dwc3]) from [<bf27ab14>] (__dwc3_gadget_ep_disable+0x64/0x528 [dwc3])
[  141.861034] [<bf27ab14>] (__dwc3_gadget_ep_disable [dwc3]) from [<bf27c27c>] (dwc3_gadget_ep_disable+0x3c/0xc8 [dwc3])
[  141.872280] [<bf27c27c>] (dwc3_gadget_ep_disable [dwc3]) from [<bf23b428>] (usb_ep_disable+0x11c/0x18c [udc_core])
[  141.883160] [<bf23b428>] (usb_ep_disable [udc_core]) from [<bf342774>] (disable_ep+0x18/0x54 [usb_f_ss_lb])
[  141.893408] [<bf342774>] (disable_ep [usb_f_ss_lb]) from [<bf3437b0>] (disable_endpoints+0x18/0x50 [usb_f_ss_lb])
[  141.904168] [<bf3437b0>] (disable_endpoints [usb_f_ss_lb]) from [<bf343814>] (disable_source_sink+0x2c/0x34 [usb_f_ss_lb])
[  141.915771] [<bf343814>] (disable_source_sink [usb_f_ss_lb]) from [<bf329a9c>] (reset_config+0x48/0x7c [libcomposite])
[  141.927012] [<bf329a9c>] (reset_config [libcomposite]) from [<bf329afc>] (composite_disconnect+0x2c/0x54 [libcomposite])
[  141.938444] [<bf329afc>] (composite_disconnect [libcomposite]) from [<bf23d7dc>] (usb_gadget_udc_reset+0x10/0x34 [udc_core])
[  141.950237] [<bf23d7dc>] (usb_gadget_udc_reset [udc_core]) from [<bf276d70>] (dwc3_gadget_reset_interrupt+0x64/0x698 [dwc3])
[  141.962022] [<bf276d70>] (dwc3_gadget_reset_interrupt [dwc3]) from [<bf27952c>] (dwc3_thread_interrupt+0x618/0x1a3c [dwc3])
[  141.973723] [<bf27952c>] (dwc3_thread_interrupt [dwc3]) from [<c01a7ce8>] (irq_thread_fn+0x1c/0x54)
[  141.983215] [<c01a7ce8>] (irq_thread_fn) from [<c01a7fbc>] (irq_thread+0x120/0x1f0)
[  141.991247] [<c01a7fbc>] (irq_thread) from [<c015ba14>] (kthread+0xf8/0x138)
[  141.998641] [<c015ba14>] (kthread) from [<c01078f0>] (ret_from_fork+0x14/0x24)
[  142.006213] ---[ end trace b4ecfe9f175b9a9c ]---

Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-12-14 09:28:18 +01:00
..
core.c usb: dwc3: Fix error handling for core init 2016-10-31 11:14:27 +02:00
core.h usb: dwc3: gadget: Fix full speed mode 2017-01-12 11:39:18 +01:00
debug.c usb: dwc3: add tracepoints to aid debugging 2014-09-05 09:55:51 -05:00
debug.h usb: dwc3: debug: fix ep name on trace output 2016-08-25 10:36:25 +03:00
debugfs.c usb: dwc3: add DWC3_GUCTL1 reg for debug 2016-06-20 12:32:46 +03:00
dwc3-exynos.c usb: dwc3: exynos fix axius clock error path to do cleanup 2017-06-24 07:11:17 +02: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: of-simple: add compatible for Cavium 2016-09-13 09:28:59 +03:00
dwc3-omap.c usb: dwc3: omap: fix race of pm runtime with irq handler in probe 2017-08-06 18:59:46 -07:00
dwc3-pci.c usb: dwc3: pci: Fix dr_mode misspelling 2017-01-12 11:39:17 +01:00
dwc3-st.c usb: dwc3: replace %p with %pK 2017-07-12 15:01:03 +02:00
ep0.c usb: dwc3: ep0: explicitly call dwc3_ep0_prepare_one_trb() 2017-01-12 11:39:22 +01:00
gadget.c usb: dwc3: gadget: Fix system suspend/resume on TI platforms 2017-12-14 09:28:18 +01:00
gadget.h usb: dwc3: gadget: make Set Endpoint Configuration macros safe 2017-03-18 19:14:31 +08:00
host.c usb: dwc3: host: pass quirk-broken-port-ped property for known broken revisions 2017-04-12 12:41:19 +02:00
io.h usb: dwc3: gadget: add a pointer to endpoint registers 2016-06-20 12:32:35 +03:00
Kconfig usb: remove redundant dependency on USB_SUPPORT 2016-08-09 16:15:44 +02:00
Makefile usb: dwc3: remove dwc3-qcom in favor of dwc3-of-simple 2015-12-15 09:12:41 -06:00
trace.c usb: dwc3: add tracepoints to aid debugging 2014-09-05 09:55:51 -05:00
trace.h usb: dwc3: gadget: keep track of allocated and queued reqs 2016-06-20 12:32:49 +03:00
ulpi.c usb: dwc3: ulpi: make dwc3_ulpi_ops constant 2016-09-06 10:47:26 +03:00