From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [4.4,44/72] usb: dwc2: Improve gadget state disconnection handling From: Greg Kroah-Hartman Message-Id: <20180406084308.925396942@linuxfoundation.org> Date: Fri, 6 Apr 2018 15:23:45 +0200 To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wei Xu , Guodong Xu , Amit Pundir , YongQin Liu , John Youn , Minas Harutyunyan , Douglas Anderson , Chen Yu , Felipe Balbi , linux-usb@vger.kernel.org, Minas Harutyunyan , John Stultz , Ben Hutchings List-ID: NC40LXN0YWJsZSByZXZpZXcgcGF0Y2guICBJZiBhbnlvbmUgaGFzIGFueSBvYmplY3Rpb25zLCBw bGVhc2UgbGV0IG1lIGtub3cuCgotLS0tLS0tLS0tLS0tLS0tLS0KCkZyb206IEpvaG4gU3R1bHR6 IDxqb2huLnN0dWx0ekBsaW5hcm8ub3JnPgoKY29tbWl0IGQyNDcxZDRhMjRkZmJmZjVlNDYzZDM4 MmUyYzZmZWM3ZDdlMjVhMDkgdXBzdHJlYW0uCgpJbiB0aGUgZWFybGllciBjb21taXQgZGFkM2Y3 OTNmMjBmICgidXNiOiBkd2MyOiBNYWtlIHN1cmUgd2UKZGlzY29ubmVjdCB0aGUgZ2FkZ2V0IHN0 YXRlIiksIEkgd2FzIHRyeWluZyB0byBmaXggdXAgdGhlCmZhY3QgdGhhdCB3ZSBzb21laG93IHdl cmVuJ3QgZGlzY29ubmVjdGluZyB0aGUgZ2FkZ2V0IHN0YXRlLApzbyB0aGF0IHdoZW4gdGhlIE9U RyBwb3J0IHdhcyBwbHVnZ2VkIGluIHRoZSBzZWNvbmQgdGltZSB3ZQp3b3VsZCBnZXQgd2Fybmlu Z3MgYWJvdXQgdGhlIHN0YXRlIHRyYWNraW5nIGJlaW5nIHdyb25nLgoKKFRoaXMgc2VlbXMgdG8g YmUgZHVlIHRvIGEgcXVpcmsgb2YgdGhlIEhpS2V5IGJvYXJkIHdoZXJlCndlIGRvIG5vdCBldmVy IGdldCBhbnkgb3RnIGludGVycnVwdHMsIHBhcnRpY3VsYXJseSB0aGUgc2Vzc2lvbgplbmQgZGV0 ZWN0ZWQgc2lnbmFsLiBJbnN0ZWFkIHdlIG9ubHkgc2VlIHN0YXR1cyBjaGFuZ2UKaW50ZXJydXB0 LikKClRoZSBmaXggdGhlcmUgd2FzIHNvbWV3aGF0IHNpbXBsZSwgYXMgaXQganVzdCBtYWRlIHN1 cmUgdG8KY2FsbCBkd2MyX2hzb3RnX2Rpc2Nvbm5lY3QoKSBiZWZvcmUgd2UgY29ubmVjdGVkIHRo aW5ncyB1cAppbiBPVEcgbW9kZSwgZW5zdXJpbmcgdGhlIHN0YXRlIGhhbmRsaW5nIGRpZG4ndCB0 aHJvdyBlcnJvcnMuCgpCdXQgaW4gbG9va2luZyBhdCBhIGRpZmZlcmVudCBpc3N1ZSBJIHdhcyBz ZWVpbmcgd2l0aCBVREMKc3RhdGUgaGFuZGxpbmcsIEkgcmVhbGl6ZWQgdGhhdCBpdCB3b3VsZCBi ZSBtdWNoIGJldHRlcgp0byBjYWxsIGR3YzJfaHNvdGdfZGlzY29ubmVjdCB3aGVuIHdlIGdldCB0 aGUgc3RhdGUgY2hhbmdlCnNpZ25hbCBtb3ZpbmcgdG8gaG9zdCBtb2RlLgoKVGh1cywgdGhpcyBw YXRjaCByZW1vdmVzIHRoZSBlYXJsaWVyIGRpc2Nvbm5lY3QgY2FsbCBJIGFkZGVkCmFuZCBtb3Zl cyBpdCAoYW5kIHRoZSBuZWVkZWQgbG9ja2luZykgdG8gdGhlIGhvc3QgbW9kZQp0cmFuc2l0aW9u LgoKQ2M6IFdlaSBYdSA8eHV3ZWk1QGhpc2lsaWNvbi5jb20+CkNjOiBHdW9kb25nIFh1IDxndW9k b25nLnh1QGxpbmFyby5vcmc+CkNjOiBBbWl0IFB1bmRpciA8YW1pdC5wdW5kaXJAbGluYXJvLm9y Zz4KQ2M6IFlvbmdRaW4gTGl1IDx5b25ncWluLmxpdUBsaW5hcm8ub3JnPgpDYzogSm9obiBZb3Vu IDxqb2hueW91bkBzeW5vcHN5cy5jb20+CkNjOiBNaW5hcyBIYXJ1dHl1bnlhbiA8TWluYXMuSGFy dXR5dW55YW5Ac3lub3BzeXMuY29tPgpDYzogRG91Z2xhcyBBbmRlcnNvbiA8ZGlhbmRlcnNAY2hy b21pdW0ub3JnPgpDYzogQ2hlbiBZdSA8Y2hlbnl1NTZAaHVhd2VpLmNvbT4KQ2M6IEZlbGlwZSBC YWxiaSA8ZmVsaXBlLmJhbGJpQGxpbnV4LmludGVsLmNvbT4KQ2M6IEdyZWcgS3JvYWgtSGFydG1h biA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CkNjOiBsaW51eC11c2JAdmdlci5rZXJuZWwu b3JnCkFja2VkLWJ5OiBNaW5hcyBIYXJ1dHl1bnlhbiA8aG1pbmFzQHN5bm9wc3lzLmNvbT4KVGVz dGVkLWJ5OiBNaW5hcyBIYXJ1dHl1bnlhbiA8aG1pbmFzQHN5bm9wc3lzLmNvbT4KU2lnbmVkLW9m Zi1ieTogSm9obiBTdHVsdHogPGpvaG4uc3R1bHR6QGxpbmFyby5vcmc+ClNpZ25lZC1vZmYtYnk6 IEZlbGlwZSBCYWxiaSA8ZmVsaXBlLmJhbGJpQGxpbnV4LmludGVsLmNvbT4KQ2M6IEJlbiBIdXRj aGluZ3MgPGJlbi5odXRjaGluZ3NAY29kZXRoaW5rLmNvLnVrPgpTaWduZWQtb2ZmLWJ5OiBHcmVn IEtyb2FoLUhhcnRtYW4gPGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPgotLS0KIGRyaXZlcnMv dXNiL2R3YzIvaGNkLmMgfCAgICA3ICsrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlv bnMoKyksIDIgZGVsZXRpb25zKC0pCgoKCi0tClRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0 OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC11c2IiIGluCnRoZSBib2R5IG9mIGEg bWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8g YXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAoKLS0tIGEvZHJp dmVycy91c2IvZHdjMi9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9kd2MyL2hjZC5jCkBAIC0xMzg1 LDcgKzEzODUsNiBAQCBzdGF0aWMgdm9pZCBkd2MyX2Nvbm5faWRfc3RhdHVzX2NoYW5nZShzCiAJ CWR3YzJfY29yZV9pbml0KGhzb3RnLCBmYWxzZSwgLTEpOwogCQlkd2MyX2VuYWJsZV9nbG9iYWxf aW50ZXJydXB0cyhoc290Zyk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoc290Zy0+bG9jaywgZmxh Z3MpOwotCQlkd2MyX2hzb3RnX2Rpc2Nvbm5lY3QoaHNvdGcpOwogCQlkd2MyX2hzb3RnX2NvcmVf aW5pdF9kaXNjb25uZWN0ZWQoaHNvdGcsIGZhbHNlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmaHNvdGctPmxvY2ssIGZsYWdzKTsKIAkJZHdjMl9oc290Z19jb3JlX2Nvbm5lY3QoaHNvdGcp OwpAQCAtMTQwMyw4ICsxNDAyLDEyIEBAIHN0YXRpYyB2b2lkIGR3YzJfY29ubl9pZF9zdGF0dXNf Y2hhbmdlKHMKIAkJaWYgKGNvdW50ID4gMjUwKQogCQkJZGV2X2Vycihoc290Zy0+ZGV2LAogCQkJ CSJDb25uZWN0aW9uIGlkIHN0YXR1cyBjaGFuZ2UgdGltZWQgb3V0XG4iKTsKLQkJaHNvdGctPm9w X3N0YXRlID0gT1RHX1NUQVRFX0FfSE9TVDsKIAorCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHNvdGct PmxvY2ssIGZsYWdzKTsKKwkJZHdjMl9oc290Z19kaXNjb25uZWN0KGhzb3RnKTsKKwkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaHNvdGctPmxvY2ssIGZsYWdzKTsKKworCQloc290Zy0+b3Bfc3Rh dGUgPSBPVEdfU1RBVEVfQV9IT1NUOwogCQkvKiBJbml0aWFsaXplIHRoZSBDb3JlIGZvciBIb3N0 IG1vZGUgKi8KIAkJZHdjMl9jb3JlX2luaXQoaHNvdGcsIGZhbHNlLCAtMSk7CiAJCWR3YzJfZW5h YmxlX2dsb2JhbF9pbnRlcnJ1cHRzKGhzb3RnKTsK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-1404550-1523021475-2-16568452765815843735 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.25, ME_NOAUTH 0.01, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='org', MailFrom='org' X-Spam-charsets: plain='UTF-8' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: stable-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=fm2; t= 1523021474; b=GIG8MmAmLwtBTU8skb2rDWLDGfcHyAZ5P0S8kwHm1coA/sbJ7m BP2beKntOiQJ49/FFOFLVS1Vkzxbz0OW9qwp0nwZ18Ceh1Q9zFpOIdnb1cluWLTl NQebjErTbK4GdxAuKYXbrW+hGqH4L7mZdBEGo3HLus/pH2Sh4SlLfw+sAWcxtpYn 9Mp0rc1Z4oHGLUmJ4M22X0LBKyP0+BzoYNhJfnGg7qP53mr/oZSMo4wFJiKkLWxp Ccy3LysdW2+CFiM8Mpl1RN6T/dNppJkNQ35ObbNpK4ikLjFtkdGt9rdjWQprZjcN SVtqv7Y6XQRzX+0c78WxSdDJDToLfoe5EcEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-type:sender :list-id; s=fm2; t=1523021474; bh=cMP88SlrwVrRPUJ3452lVnEl5twt8I xQaU69p+GtL5c=; b=ZHwpiCkffAtdLtycsfJFb2ymwNQZvLjE9229TowmKcp2Na uwZtXDl9wPZLglkFeMTv7Z2+0UaX38SeViJVx8kIYAsOJE2duFJSIbcNvDJ5oCK/ g8s5HqL4tOGVq7TazQOKvaM0FqJxGUTbNk3+WL7Ow0g9JDpVAUXJCAE4Gd1Wp9Qm C0KN0iMninXutcTILWxT/++CW16pJQhL0O40XAwYN6n7GSOCNRZeueim9w/JEOMj KoEAx9yp/Ar5XLDlZsbWNvB87Cg24daXHCsHDvI4T5pIcpO1WF8SeryKqFwGdVXn wl7X1KI05N5Ate76Ct1olx/AHJeHGa5VSZUZg92g== ARC-Authentication-Results: i=1; mx6.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=linuxfoundation.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-cm=none score=0; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=linuxfoundation.org header.result=pass header_is_org_domain=yes; x-vs=clean score=-100 state=0 Authentication-Results: mx6.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=linuxfoundation.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-cm=none score=0; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=linuxfoundation.org header.result=pass header_is_org_domain=yes; x-vs=clean score=-100 state=0 X-ME-VSCategory: clean X-CM-Envelope: MS4wfJXxULKB3rF0iuAdJHKP4nBo3L5cmIkzGRS5pF6ghg3tH5lLWbB/DH2N5Ns/XxvJ3PeiEjoIFWfKYV7qao5r3jrs3AiFs9vYnW8CwWVMRz/CrP9SI+9C 43UIiBMEHdXFha0QOECziF+7o+dPM6qjK+Dam+a/lU8pTmrdofvq43qQSS02gHZ/38RqYilgXIYNOldPmClPL2zpZ/1vwWq6O4wt5fbSSkZ6N6y/5NezfTTK X-CM-Analysis: v=2.3 cv=FKU1Odgs c=1 sm=1 tr=0 a=UK1r566ZdBxH71SXbqIOeA==:117 a=UK1r566ZdBxH71SXbqIOeA==:17 a=IkcTkHD0fZMA:10 a=Kd1tUaAdevIA:10 a=KKAkSRfTAAAA:8 a=BTeA3XvPAAAA:8 a=jIQo8A4GAAAA:8 a=cm27Pg_UAAAA:8 a=i0EeH86SAAAA:8 a=QyXUC8HyAAAA:8 a=ag1SF4gXAAAA:8 a=VwQbUJbxAAAA:8 a=1EsaE_6oAAAA:8 a=wn-MoGzFkvxOkHmv7jEA:9 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 a=tafbbOV3vt1XuEhzTjGK:22 a=Lf5xNeLK5dgiOs8hzIjU:22 a=xmb-EsYY8bH0VWELuYED:22 a=Yupwre4RP9_Eg_Bd0iYG:22 a=AjGcO6oz07-iQ99wixmX:22 a=3ZumFrijQQ-2J9H5h8ct:22 X-ME-CMScore: 0 X-ME-CMCategory: none Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755052AbeDFNbH (ORCPT ); Fri, 6 Apr 2018 09:31:07 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:56342 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755037AbeDFNbE (ORCPT ); Fri, 6 Apr 2018 09:31:04 -0400 From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wei Xu , Guodong Xu , Amit Pundir , YongQin Liu , John Youn , Minas Harutyunyan , Douglas Anderson , Chen Yu , Felipe Balbi , linux-usb@vger.kernel.org, Minas Harutyunyan , John Stultz , Ben Hutchings Subject: [PATCH 4.4 44/72] usb: dwc2: Improve gadget state disconnection handling Date: Fri, 6 Apr 2018 15:23:45 +0200 Message-Id: <20180406084308.925396942@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180406084305.210085169@linuxfoundation.org> References: <20180406084305.210085169@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: stable-owner@vger.kernel.org X-Mailing-List: stable@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ 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 @@ -1385,7 +1385,6 @@ static void dwc2_conn_id_status_change(s dwc2_core_init(hsotg, false, -1); 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); @@ -1403,8 +1402,12 @@ static void dwc2_conn_id_status_change(s 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, -1); dwc2_enable_global_interrupts(hsotg);