From: Greg Kroah-Hartman Date: Tue, 3 Apr 2018 17:46:42 +0000 (+0200) Subject: 4.14-stable patches X-Git-Tag: v3.18.103~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=561488a235ac7f56e45ee5bec96c8336ff481cc9;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: usb-dwc2-improve-gadget-state-disconnection-handling.patch --- diff --git a/queue-4.14/series b/queue-4.14/series index 33cf9c29159..436e3ea9f5c 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -33,3 +33,4 @@ netfilter-drop-template-ct-when-conntrack-is-skipped.patch netfilter-x_tables-add-and-use-xt_check_proc_name.patch phy-qcom-ufs-add-module_license-tag.patch bluetooth-fix-missing-encryption-refresh-on-security-request.patch +usb-dwc2-improve-gadget-state-disconnection-handling.patch diff --git a/queue-4.14/usb-dwc2-improve-gadget-state-disconnection-handling.patch b/queue-4.14/usb-dwc2-improve-gadget-state-disconnection-handling.patch new file mode 100644 index 00000000000..bd5eaa7e954 --- /dev/null +++ b/queue-4.14/usb-dwc2-improve-gadget-state-disconnection-handling.patch @@ -0,0 +1,79 @@ +From d2471d4a24dfbff5e463d382e2c6fec7d7e25a09 Mon Sep 17 00:00:00 2001 +From: John Stultz +Date: Mon, 23 Oct 2017 14:32:48 -0700 +Subject: usb: dwc2: Improve gadget state disconnection handling + +From: John Stultz + +commit d2471d4a24dfbff5e463d382e2c6fec7d7e25a09 upstream. + +In the earlier commit dad3f793f20f ("usb: dwc2: Make sure we +disconnect the gadget state"), I was trying to fix up the +fact that we somehow weren't disconnecting the gadget state, +so that when the OTG port was plugged in the second time we +would get warnings about the state tracking being wrong. + +(This seems to be due to a quirk of the HiKey board where +we do not ever get any otg interrupts, particularly the session +end detected signal. Instead we only see status change +interrupt.) + +The fix there was somewhat simple, as it just made sure to +call dwc2_hsotg_disconnect() before we connected things up +in OTG mode, ensuring the state handling didn't throw errors. + +But in looking at a different issue I was seeing with UDC +state handling, I realized that it would be much better +to call dwc2_hsotg_disconnect when we get the state change +signal moving to host mode. + +Thus, this patch removes the earlier disconnect call I added +and moves it (and the needed locking) to the host mode +transition. + +Cc: Wei Xu +Cc: Guodong Xu +Cc: Amit Pundir +Cc: YongQin Liu +Cc: John Youn +Cc: Minas Harutyunyan +Cc: Douglas Anderson +Cc: Chen Yu +Cc: Felipe Balbi +Cc: Greg Kroah-Hartman +Cc: linux-usb@vger.kernel.org +Acked-by: Minas Harutyunyan +Tested-by: Minas Harutyunyan +Signed-off-by: John Stultz +Signed-off-by: Felipe Balbi +Cc: Ben Hutchings +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/dwc2/hcd.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/drivers/usb/dwc2/hcd.c ++++ b/drivers/usb/dwc2/hcd.c +@@ -3277,7 +3277,6 @@ static void dwc2_conn_id_status_change(s + dwc2_core_init(hsotg, false); + dwc2_enable_global_interrupts(hsotg); + spin_lock_irqsave(&hsotg->lock, flags); +- dwc2_hsotg_disconnect(hsotg); + dwc2_hsotg_core_init_disconnected(hsotg, false); + spin_unlock_irqrestore(&hsotg->lock, flags); + dwc2_hsotg_core_connect(hsotg); +@@ -3296,8 +3295,12 @@ host: + if (count > 250) + dev_err(hsotg->dev, + "Connection id status change timed out\n"); +- hsotg->op_state = OTG_STATE_A_HOST; + ++ spin_lock_irqsave(&hsotg->lock, flags); ++ dwc2_hsotg_disconnect(hsotg); ++ spin_unlock_irqrestore(&hsotg->lock, flags); ++ ++ hsotg->op_state = OTG_STATE_A_HOST; + /* Initialize the Core for Host mode */ + dwc2_core_init(hsotg, false); + dwc2_enable_global_interrupts(hsotg);