From patchwork Tue Feb 28 20:21:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wesley Cheng X-Patchwork-Id: 62594 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp3237987wrd; Tue, 28 Feb 2023 12:30:21 -0800 (PST) X-Google-Smtp-Source: AK7set8pNX+I/qt3qGYRVUWjozA2tyG8wuPMB4bSDUGAxmfaxhtZC7HN3t1yXAjOl0OmhF87QcJv X-Received: by 2002:a17:907:25c2:b0:8e1:12b6:a8fc with SMTP id ae2-20020a17090725c200b008e112b6a8fcmr4874847ejc.4.1677616221132; Tue, 28 Feb 2023 12:30:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677616221; cv=none; d=google.com; s=arc-20160816; b=aAMbRfY52Zy8RPD+U6Kr0U6PyDMO8UhDccbOtaS7VQCvy3ktgcFoi9EvDNkR7H9rXt d1wWbk/Qyz5y1iFg9uj+2hOocehB/KKtLRCF2q5bbv7JnWmBnBVIjBUr7FbU6o5tpM3J YbGj2CX+ML/7nRIYzd62WxdWWKYbhSML7U0W7lGIu7INb2KlLpkiuahJKVYvysobSlpV WjcZtfso611hSAGEG6m9VNEeRUICf4h7PRVpOTyPAYjLFXfa9FO9E4U0Bz1QebfmAYkS Ph1j44fsfJropnkezFYmI0fLMJfjl7M76AJWlDlIFbr5/5nXNzlZITbihIDs36NdyrLf uelg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from :dkim-signature; bh=KqAA328qaVjXlvcYQNwLhnwxT1t42qPLrs/l7EKKBFY=; b=N2hPNg8Z2faAfKTgIcB1fpiQRPFqumVBZ26tvwOytWkB9kmjEcmWpbIZhGvmm3QXdf FGujmAQ5sAlGL7PdGr5Tn5sDwqauSSGb8OrkXk+/rLQY8M7BmP3843edLJVWwjrNOIyY LdL/BHe6lbH0qH3oSgkguj8+bX3HjQrVAmyRWV25KzNwC7J3U6bo6KlbZuK3k0z2r3cm uihtgPvNbGtJ9J0k7kJfkhCKPaDCzJSB90VYp4M0xKxDwHQqQT5mqJm3oenQhR26LVSR dEdkDZ0PLtckm9VhlHOX7XdhcZfuHCxCcC6tP+Zyjo9y6dDBrpjXbtKtYEfIJEEj4oJG fuFw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=C4JH9s5r; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sg35-20020a170907a42300b008d581b1aafesi15294185ejc.784.2023.02.28.12.29.57; Tue, 28 Feb 2023 12:30:21 -0800 (PST) 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=C4JH9s5r; 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 S229817AbjB1UVW (ORCPT + 99 others); Tue, 28 Feb 2023 15:21:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41946 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229437AbjB1UVV (ORCPT ); Tue, 28 Feb 2023 15:21:21 -0500 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D5B03252B; Tue, 28 Feb 2023 12:21:20 -0800 (PST) Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31SJK58e002226; Tue, 28 Feb 2023 20:21:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : mime-version : content-type; s=qcppdkim1; bh=KqAA328qaVjXlvcYQNwLhnwxT1t42qPLrs/l7EKKBFY=; b=C4JH9s5rIOwcsHwkU+xYJU8DTisWgA535mLvXLie7Bzbi9uedymI3G1Rtg4IAjjb6M3/ rF5bGzEfUvvwCcGBBeUdJKwz9SLbANIaRy34cVEiD4bAJGGWKApn1GMXifXwyGr7jdBl GhBSD2agdUMsxQGSACtJexjXDHIpLOKAEuEuGD3kBBRWo1Jcb3TCXsEgMCnmlUymnsXp tWevy0oovT8skxX10NrcDSONoQWohuC54ZnnZRUYU3dIrA0wQIb7oNYBn6QFD0I/1bD/ N9VTlafY/7pQsMdTp0FTDO0dehiqvvZbQK2yxsrh6zKK8R0uVBnlGslDAz/6h4mn9xF8 Kg== Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3p0u3jvwns-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 28 Feb 2023 20:21:17 +0000 Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA05.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 31SKLG1d010654 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 28 Feb 2023 20:21:16 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.41; Tue, 28 Feb 2023 12:21:16 -0800 From: Wesley Cheng To: , CC: , , , Wesley Cheng Subject: [PATCH v2] usb: dwc3: gadget: Add 100uS delay after end transfer command without IOC Date: Tue, 28 Feb 2023 12:21:04 -0800 Message-ID: <20230228202104.7813-1-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-Originating-IP: [10.49.16.6] X-ClientProxiedBy: nalasex01a.na.qualcomm.com (10.47.209.196) 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: VNiOy2RGsv2Z_FnizWTb-D5Tj0Z_vIl3 X-Proofpoint-GUID: VNiOy2RGsv2Z_FnizWTb-D5Tj0Z_vIl3 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-02-28_17,2023-02-28_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 bulkscore=0 impostorscore=0 adultscore=0 suspectscore=0 mlxlogscore=468 spamscore=0 mlxscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302280168 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759030118665563345?= X-GMAIL-MSGID: =?utf-8?q?1759108106644625947?= Previously, there was a 100uS delay inserted after issuing an end transfer command for specific controller revisions. This was due to the fact that there was a GUCTL2 bit field which enabled synchronous completion of the end transfer command once the CMDACT bit was cleared in the DEPCMD register. Since this bit does not exist for all controller revisions, add the delay back in. An issue was seen where the USB request buffer was unmapped while the DWC3 controller was still accessing the TRB. However, it was confirmed that the end transfer command was successfully submitted. (no end transfer timeout) In situations, such as dwc3_gadget_soft_disconnect() and __dwc3_gadget_ep_disable(), the dwc3_remove_request() is utilized, which will issue the end transfer command, and follow up with dwc3_gadget_giveback(). At least for the USB ep disable path, it is required for any pending and started requests to be completed and returned to the function driver in the same context of the disable call. Without the GUCTL2 bit, it is not ensured that the end transfer is completed before the buffers are unmapped. Signed-off-by: Wesley Cheng --- Changes in v2: - Increase delay value to 1ms - Make this applicable to DWC32 revisions as well drivers/usb/dwc3/gadget.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 3c63fa97a680..15adf07a4df4 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1699,6 +1699,7 @@ static int __dwc3_gadget_get_frame(struct dwc3 *dwc) */ static int __dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, bool interrupt) { + struct dwc3 *dwc = dep->dwc; struct dwc3_gadget_ep_cmd_params params; u32 cmd; int ret; @@ -1722,10 +1723,14 @@ static int __dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, bool int WARN_ON_ONCE(ret); dep->resource_index = 0; - if (!interrupt) + if (!interrupt) { + if (DWC3_IP_IS(DWC32) || DWC3_IP_IS(DWC31) || + DWC3_VER_IS_PRIOR(DWC3, 310A)) + mdelay(1); dep->flags &= ~DWC3_EP_TRANSFER_STARTED; - else if (!ret) + } else if (!ret) { dep->flags |= DWC3_EP_END_TRANSFER_PENDING; + } dep->flags &= ~DWC3_EP_DELAY_STOP; return ret; @@ -3774,7 +3779,11 @@ void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, * enabled, the EndTransfer command will have completed upon * returning from this function. * - * This mode is NOT available on the DWC_usb31 IP. + * This mode is NOT available on the DWC_usb31 IP. In this + * case, if the IOC bit is not set, then delay by 100uS + * after issuing the EndTransfer command. This allows for the + * controller to handle the command completely before DWC3 + * remove requests attempts to unmap USB request buffers. */ __dwc3_stop_active_transfer(dep, force, interrupt);