Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp3127746rwb; Mon, 15 Aug 2022 18:49:49 -0700 (PDT) X-Google-Smtp-Source: AA6agR7ECWLlKvOlBDcISObUOnUQfanB4ScagiPjxVBmhZZ0gnp7vdRLeD9xVqN3InlY4wP1gtQg X-Received: by 2002:aa7:d7cc:0:b0:43d:775:ee17 with SMTP id e12-20020aa7d7cc000000b0043d0775ee17mr17093512eds.54.1660614589352; Mon, 15 Aug 2022 18:49:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660614589; cv=none; d=google.com; s=arc-20160816; b=YfLuEiWRbiO6ph6JXqcYbW25tVby5JPgdnLzGfo+lQmuNwm6PxhhwX454gD8KCk035 HVlGovbSIMVjGxy09GyfGyJrepqZEhLvpRPHEKC6XLP0UfdCOcLLhfbaKq08TRsS+e8Y rIlItbLKIc0pEMKTYvy8mmCKuJzrbMGxVjpQeG5IhorCpgQgYNN43VlZLUUqQgVtBnRN KCUruziidfSKiTih1KXL9h502uEe7CDGEF1x8vmf5qk2YpjvHHivhH2Rf0mhJz0R1oJc Doecl+gC17ZKdlTtGeQviWt0Rkwcdn1O9m9uBa4VPsPHjBhSSIUhiE7HSA9q6A6f3aPF k99w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=Va5LSkuKV7/bvEP9hOvFGppqtCuTZ1359oWxoi8Yvng=; b=zxnOG2a6g1gX6Eh8f6Wx1sHk1nPvrp8ravwcsMPj/r+cKkptG7unq1n2XKg2NXvC7f Ffi5xwjQwrYlBSWoBh9Xbge1X25WBrKHg82Ik86x1xhhkq/EvoJSPh0epNQ8hzQT5jnn YQntdR8nP2ezvrUWawZOra95ro03wETFhw7ANRhyLF4elFcZopHO4x2QZXzTg0O11LdB NYyIM9pcsrBMYP8uHjz3iAzUNdahlU93h8QnQ0y5TxI01wlC4/8f4LZWtoUIWolX5a8+ DjiAFRQtoblzLoHnukmb0S1axOliHRnTnNzRbIV6h3p04j2L5MFVTOD8RuiQFG1oVzJs pFHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=SfzjZK1f; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d23-20020a50fe97000000b0043e05d2b2ccsi7885884edt.116.2022.08.15.18.49.22; Mon, 15 Aug 2022 18:49:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=SfzjZK1f; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243316AbiHPBjz (ORCPT + 99 others); Mon, 15 Aug 2022 21:39:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37782 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233940AbiHPBio (ORCPT ); Mon, 15 Aug 2022 21:38:44 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2970BEEF12; Mon, 15 Aug 2022 14:31:59 -0700 (PDT) Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 27FHvpGk006097; Mon, 15 Aug 2022 21:31:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=qcppdkim1; bh=Va5LSkuKV7/bvEP9hOvFGppqtCuTZ1359oWxoi8Yvng=; b=SfzjZK1fVTD20TZngTijF4LnIUj9vtFM+V2ynwJM1RhPZKL6BAni5BnbQZ1zN0DqzSvK qX8FUZGJiL7JMx9DYWUSR0eIaVciwj/mGplNslGRvhHBadPtZQ1T5QIAV+n+/9lpfsmo 0WWBhGmwiqLBpahfgBpJDp/AIOpstfkMWHzCag71NdLHHNv9GojRyf7FToY2pNrG0eni 3qBTkiV0vGMOe7ojkzztXjXGgFQNSygof6FvnVIihD1cLr3YB7OGqYLq2dnD4RWt/GxR vUIFQlj3NGHOFYFVdmpRoaf4Ouiamq2uSR0REBqSBqiBqEUxxqO1UYsaeCcOCoWVbCNF GQ== Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3hx4bdpe94-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Aug 2022 21:31:55 +0000 Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA02.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 27FLVsxr012085 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Aug 2022 21:31:54 GMT Received: from hu-wcheng-lv.qualcomm.com (10.49.16.6) by nalasex01b.na.qualcomm.com (10.47.209.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Mon, 15 Aug 2022 14:31:54 -0700 From: Wesley Cheng To: , CC: , , , , Wesley Cheng Subject: [PATCH v3 6/8] usb: dwc3: Increase DWC3 controller halt timeout Date: Mon, 15 Aug 2022 14:31:32 -0700 Message-ID: <20220815213134.23783-7-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220815213134.23783-1-quic_wcheng@quicinc.com> References: <20220815213134.23783-1-quic_wcheng@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.49.16.6] X-ClientProxiedBy: nalasex01b.na.qualcomm.com (10.47.209.197) To nalasex01b.na.qualcomm.com (10.47.209.197) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: bjYuU6aaQKnwVxTqLEIkkwkSdVAIbT-2 X-Proofpoint-GUID: bjYuU6aaQKnwVxTqLEIkkwkSdVAIbT-2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-08-15_08,2022-08-15_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 phishscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 priorityscore=1501 impostorscore=0 mlxlogscore=665 spamscore=0 bulkscore=0 clxscore=1015 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2207270000 definitions=main-2208150082 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since EP0 transactions need to be completed before the controller halt sequence is finished, this may take some time depending on the host and the enabled functions. Increase the controller halt timeout, so that we give the controller sufficient time to handle EP0 transfers. Remove the need for making dwc3_gadget_suspend() and dwc3_gadget_resume() to be called in a spinlock. Suggested-by: Thinh Nguyen Signed-off-by: Wesley Cheng --- drivers/usb/dwc3/core.c | 4 ---- drivers/usb/dwc3/gadget.c | 8 +++++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index c5c238ab3083..23e123a1ab5f 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1976,9 +1976,7 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg) case DWC3_GCTL_PRTCAP_DEVICE: if (pm_runtime_suspended(dwc->dev)) break; - spin_lock_irqsave(&dwc->lock, flags); dwc3_gadget_suspend(dwc); - spin_unlock_irqrestore(&dwc->lock, flags); synchronize_irq(dwc->irq_gadget); dwc3_core_exit(dwc); break; @@ -2039,9 +2037,7 @@ static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg) return ret; dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE); - spin_lock_irqsave(&dwc->lock, flags); dwc3_gadget_resume(dwc); - spin_unlock_irqrestore(&dwc->lock, flags); break; case DWC3_GCTL_PRTCAP_HOST: if (!PMSG_IS_AUTO(msg) && !device_can_wakeup(dwc->dev)) { diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 7b66a54250a0..b2668a83cc29 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2444,7 +2444,7 @@ static void __dwc3_gadget_set_speed(struct dwc3 *dwc) static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) { u32 reg; - u32 timeout = 500; + u32 timeout = 100; if (pm_runtime_suspended(dwc->dev)) return 0; @@ -2477,6 +2477,7 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) dwc3_gadget_dctl_write_safe(dwc, reg); do { + msleep(20); reg = dwc3_readl(dwc->regs, DWC3_DSTS); reg &= DWC3_DSTS_DEVCTRLHLT; } while (--timeout && !(!is_on ^ !reg)); @@ -4520,12 +4521,17 @@ void dwc3_gadget_exit(struct dwc3 *dwc) int dwc3_gadget_suspend(struct dwc3 *dwc) { + unsigned long flags; + if (!dwc->gadget_driver) return 0; dwc3_gadget_run_stop(dwc, false, false); + + spin_lock_irqsave(&dwc->lock, flags); dwc3_disconnect_gadget(dwc); __dwc3_gadget_stop(dwc); + spin_unlock_irqrestore(&dwc->lock, flags); return 0; }