Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp29303rwb; Wed, 17 Aug 2022 22:01:33 -0700 (PDT) X-Google-Smtp-Source: AA6agR4vAOyy6prRIV3Mlp5w+QoLguCqnRJyh6nQJlnLkLIXZlkh/xfMpblbmGeq1AH3tbbtJT9D X-Received: by 2002:a17:906:6a2a:b0:730:a3f1:aee with SMTP id qw42-20020a1709066a2a00b00730a3f10aeemr818719ejc.387.1660798892951; Wed, 17 Aug 2022 22:01:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660798892; cv=none; d=google.com; s=arc-20160816; b=Kw6eR5v68v2SDlmiPi5EcscxWDZxa+q+43zqWL0tNYRQz0qeou49IsNEcZNnPLHmGk 5ePnYWeV+aynaZBMwPOkvAaANyBl1V+9bVysIlzM9bq/5GnYxcEItUi+Twluv6ykXPqz 6pyLfO1HHCBcsQ6PEufaeWxHhnLpOXExpLkUlwQLMXLHRZ9zIKuNoHO0LuRZPG4gEETn sSUA5RcT4WQF25mW8jL9UZsn6shqa8BDBG3s6BTOQhxkqH6E9Xbw0mxNW99rjiwt4+QB AzlT7jn3Y9wU0OizfR3GCV1EemSAfHdWVm/ljN16+dlqtLb3h8/w7SROcARXT1L65sdA fcRg== 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=qqT+4JMORJiWnl+lSXm/RleQmX5A8hWU2TJwNATi3Ug=; b=AIEYXo2EHNRBejdGBO4MqMP+hTED2Y8JKaoXO4+/BbpCg4irCRJpuQ08oPHxOYqdin Fn2B6HqkmzrlLsCBSgAw3HMn6aYWMRew6fLhaRj31kECvT8OVFE+sLYCWp2Ds4x0oheW nDGCT+mW32rogieT1TpaodPblNgfFl+JZxM9pV3ih+r9bkaNJjs4wNoBh1f148O5b3V/ OXbKs6ZdEwVWB783OB8GS4UImWQubbDmeTnMM6BSZhJfhBffX+MFzKKBoqaMO09NLzgI l7t9O6S6Qc1D6OOs64CRDEh4bl4gof0dpJKnKhIy57hZ9dzWusLSbxfRWNsoCwitS2i0 O9Cg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=QafOA9Xy; 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 l11-20020a50cbcb000000b0043a50fda151si413618edi.434.2022.08.17.22.01.03; Wed, 17 Aug 2022 22:01:32 -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=QafOA9Xy; 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 S243327AbiHREWd (ORCPT + 99 others); Thu, 18 Aug 2022 00:22:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46606 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243292AbiHREWH (ORCPT ); Thu, 18 Aug 2022 00:22:07 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C4FB49B7C; Wed, 17 Aug 2022 21:22:06 -0700 (PDT) Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 27I36qpT028367; Thu, 18 Aug 2022 04:22:03 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=qqT+4JMORJiWnl+lSXm/RleQmX5A8hWU2TJwNATi3Ug=; b=QafOA9XyQ9PMuAcGtg95Qo8cUZYYpj61li2g1bz9NwX24OFRQS34u+pqrqqxc2C2RFRx UH/sAYtlKK9ejm5YqyJtwudGTb6eKsUuMRbA/dHxpjh+qsNX4tBJABLQxXZRuhR4oDHz 5O0hhyqNRLNOU4B4mLUuGZHAWBuPIedSVDxJAaYghxrxp9cCnrGS9wKSlNTgCFyWpb3O /wOYpf0QcVX8Wb+ibbsiyTGzxGqSlgJjKvdn0y8gkTTfm0HTzZgA4m+WG+/jEflQj8NK ZHMV2xo1gHf7JV/jlrNYNaHBb0prsOcZI5T5+Q7HgmBaerb8mTj7zxrP1BbBAqU/k/Z2 6A== Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3j1d8009ub-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 18 Aug 2022 04:22:02 +0000 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 27I4GwiO025629 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 18 Aug 2022 04:17:01 GMT Received: from nalasex01b.na.qualcomm.com (10.47.209.197) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Wed, 17 Aug 2022 19:24:12 -0700 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; Wed, 17 Aug 2022 11:24:11 -0700 From: Wesley Cheng To: , , CC: , , , Wesley Cheng Subject: [PATCH v4 4/9] usb: dwc3: gadget: Continue handling EP0 xfercomplete events Date: Wed, 17 Aug 2022 11:23:54 -0700 Message-ID: <20220817182359.13550-5-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220817182359.13550-1-quic_wcheng@quicinc.com> References: <20220817182359.13550-1-quic_wcheng@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.49.16.6] X-ClientProxiedBy: nalasex01c.na.qualcomm.com (10.47.97.35) 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-GUID: hrHRpWHNm9klBWnCIpdpiTslE0E53ki1 X-Proofpoint-ORIG-GUID: hrHRpWHNm9klBWnCIpdpiTslE0E53ki1 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-18_02,2022-08-16_02,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 priorityscore=1501 impostorscore=0 mlxlogscore=548 mlxscore=0 adultscore=0 lowpriorityscore=0 phishscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2207270000 definitions=main-2208180014 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,URIBL_BLOCKED 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 During soft disconnect, EP0 events are expected to be handled in order to allow the controller to successfully move into the halted state. Since __dwc3_gadget_stop() is executed before polling, EP0 has been disabled, and events are being blocked. Allow xfercomplete events to be handled, so that cached SETUP packets can be read out from the internal controller memory. Without doing so, it will lead to endxfer timeouts, which results to controller halt failures. Reviewed-by: Thinh Nguyen Signed-off-by: Wesley Cheng --- drivers/usb/dwc3/gadget.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 3b83e3c4b932..aff288b7baeb 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2721,6 +2721,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc) dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512); dep = dwc->eps[0]; + dep->flags = 0; ret = __dwc3_gadget_ep_enable(dep, DWC3_DEPCFG_ACTION_INIT); if (ret) { dev_err(dwc->dev, "failed to enable %s\n", dep->name); @@ -2728,6 +2729,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc) } dep = dwc->eps[1]; + dep->flags = 0; ret = __dwc3_gadget_ep_enable(dep, DWC3_DEPCFG_ACTION_INIT); if (ret) { dev_err(dwc->dev, "failed to enable %s\n", dep->name); @@ -3599,11 +3601,12 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc, dep = dwc->eps[epnum]; if (!(dep->flags & DWC3_EP_ENABLED)) { - if (!(dep->flags & DWC3_EP_TRANSFER_STARTED)) + if ((epnum > 1) && !(dep->flags & DWC3_EP_TRANSFER_STARTED)) return; /* Handle only EPCMDCMPLT when EP disabled */ - if (event->endpoint_event != DWC3_DEPEVT_EPCMDCMPLT) + if ((event->endpoint_event != DWC3_DEPEVT_EPCMDCMPLT) && + !(epnum <= 1 && event->endpoint_event == DWC3_DEPEVT_XFERCOMPLETE)) return; }