From patchwork Mon Apr 10 23:19:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wesley Cheng X-Patchwork-Id: 81672 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2213177vqo; Mon, 10 Apr 2023 16:26:05 -0700 (PDT) X-Google-Smtp-Source: AKy350YU5LAaE3jbjFbx4uZ23VN8IVH+GsiHhJs3nX/we2FuhoZngDLdoDK0B9QfxujGhW8Tb0rB X-Received: by 2002:a50:ed05:0:b0:504:9a52:ea52 with SMTP id j5-20020a50ed05000000b005049a52ea52mr6161613eds.35.1681169165297; Mon, 10 Apr 2023 16:26:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681169165; cv=none; d=google.com; s=arc-20160816; b=Pi9+Xq4ERVk+9dD7ZB61kNGfSyDnyLNM/r8VW4tl0R8IqWcckgS4QRt1pQGcDrhc/y chzZh+pcRR/qv496LPxls7zQErQ/AgoFPbj7X5XkqAyP139QH7hXgF+hPXHXFWXF42hl sbIoUBTQzj3kG/DQksH6wmlOfEVHpI5T0M/cZ/NkYYdRESADR1nUmjThDDTTYxUvqIqV o8oz40vro5h5T4YzwRAV8K81JYUMzKTL0lS0RSnru95HeKZ2IkyB4Ds7ZfYoK7w6pYcv 8r2DZN/EBcpcn63BNK5bk5fIdH+KIq+cmPXzEKSubvOeTpRB/8JiB2RoTtXx19cbx5bD dq5w== 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=f1b+1tX/53/H9yA0GV+5zd3AKuZiGEfcPCqLPKH8vUU=; b=mewXHhjgMyTBNcUCQYVfDl5iIS3U642jvK7NtmyrKmRjWQoYttcNGMaJr3yIQpso9S qUDy/TShEufGeAtLs8NSNfYuQFrlpybOAfVEZtgIxJ3uOAaH7nJex6mK++IHkihrM+m9 W8KAysf5ds2U5/QI3PX+xg5MSo0EztCN5K7nKAfG2qXaBOC7tS2Ian8TdEpGtSve7VMt Ln5F1W3K76euWiM87TXL8JFImBhDlmQkyVWHUdQe8Cit+VI7Pyx889+8yA/90rdan0yU j/rJnIXGzdUIwR1bwMZ2SH6EtCYCXmMF+qulWfLWgzZNmMgFnEFFWfDh3yVv6UR0Tb79 6meQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=SXw0TJw2; 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 h17-20020aa7de11000000b005048c65e064si6504854edv.452.2023.04.10.16.25.41; Mon, 10 Apr 2023 16:26:05 -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=SXw0TJw2; 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 S229977AbjDJXUY (ORCPT + 99 others); Mon, 10 Apr 2023 19:20:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229917AbjDJXUP (ORCPT ); Mon, 10 Apr 2023 19:20:15 -0400 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 64F132698; Mon, 10 Apr 2023 16:20:14 -0700 (PDT) Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 33ANJTol011253; Mon, 10 Apr 2023 23:20:06 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=f1b+1tX/53/H9yA0GV+5zd3AKuZiGEfcPCqLPKH8vUU=; b=SXw0TJw2zMCbXNH0FzBmGwVc221qO7t7NYSNFIrOWBroEcvZkUlV4szwjHrYSIEDFNAb 7aavv3tlCCrmrD/kWJ8wXVbxOKBL98+MB24Q9r/ttF9shQpzDEhxFjE9UXW49xNQjBpQ 1Zdyc24wCvv2nUUXqFiPoemQED9WPPWSufajgeF4BQhkmTiZvcyJx85DXE3HoepsdzT1 egJdj1/WP5G6U1X4Bz5eOhJ7DYqGq8Jkxe0++8maco8vD8DKuQ9TTGfPXGgq16ZxSb1j z3hsLhVTQ6TmK6T7Uc/jjPtvMiDqqMq47S3lHLLYSfH7RfXWuPWycfPnaBzounABbNxC VQ== Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3pvgmesf8b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:20:06 +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 33ANK6e5029460 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:20:06 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.42; Mon, 10 Apr 2023 16:20:05 -0700 From: Wesley Cheng To: , CC: , , , , Wesley Cheng Subject: [PATCH v3 1/3] usb: dwc3: gadget: Refactor EP0 forced stall/restart into a separate API Date: Mon, 10 Apr 2023 16:19:52 -0700 Message-ID: <20230410231954.437-2-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230410231954.437-1-quic_wcheng@quicinc.com> References: <20230410231954.437-1-quic_wcheng@quicinc.com> MIME-Version: 1.0 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: EoaxhN6av2paU6HFxRuoZ9b_k0S9HHQK X-Proofpoint-ORIG-GUID: EoaxhN6av2paU6HFxRuoZ9b_k0S9HHQK X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-10_16,2023-04-06_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 phishscore=0 priorityscore=1501 mlxlogscore=905 impostorscore=0 adultscore=0 mlxscore=0 malwarescore=0 clxscore=1015 bulkscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304100205 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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?1762833638159701956?= X-GMAIL-MSGID: =?utf-8?q?1762833638159701956?= Several sequences utilize the same routine for forcing the control endpoint back into the SETUP phase. This is required, because those operations need to ensure that EP0 is back in the default state. Signed-off-by: Wesley Cheng Acked-by: Thinh Nguyen --- drivers/usb/dwc3/gadget.c | 44 ++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 3c63fa97a680..320e30476c88 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -139,6 +139,24 @@ int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state) return -ETIMEDOUT; } +static void dwc3_ep0_reset_state(struct dwc3 *dwc) +{ + unsigned int dir; + + if (dwc->ep0state != EP0_SETUP_PHASE) { + dir = !!dwc->ep0_expect_in; + if (dwc->ep0state == EP0_DATA_PHASE) + dwc3_ep0_end_control_data(dwc, dwc->eps[dir]); + else + dwc3_ep0_end_control_data(dwc, dwc->eps[!dir]); + + dwc->eps[0]->trb_enqueue = 0; + dwc->eps[1]->trb_enqueue = 0; + + dwc3_ep0_stall_and_restart(dwc); + } +} + /** * dwc3_ep_inc_trb - increment a trb index. * @index: Pointer to the TRB index to increment. @@ -3821,16 +3839,7 @@ static void dwc3_gadget_disconnect_interrupt(struct dwc3 *dwc) dwc->setup_packet_pending = false; usb_gadget_set_state(dwc->gadget, USB_STATE_NOTATTACHED); - if (dwc->ep0state != EP0_SETUP_PHASE) { - unsigned int dir; - - dir = !!dwc->ep0_expect_in; - if (dwc->ep0state == EP0_DATA_PHASE) - dwc3_ep0_end_control_data(dwc, dwc->eps[dir]); - else - dwc3_ep0_end_control_data(dwc, dwc->eps[!dir]); - dwc3_ep0_stall_and_restart(dwc); - } + dwc3_ep0_reset_state(dwc); } static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) @@ -3884,20 +3893,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) * phase. So ensure that EP0 is in setup phase by issuing a stall * and restart if EP0 is not in setup phase. */ - if (dwc->ep0state != EP0_SETUP_PHASE) { - unsigned int dir; - - dir = !!dwc->ep0_expect_in; - if (dwc->ep0state == EP0_DATA_PHASE) - dwc3_ep0_end_control_data(dwc, dwc->eps[dir]); - else - dwc3_ep0_end_control_data(dwc, dwc->eps[!dir]); - - dwc->eps[0]->trb_enqueue = 0; - dwc->eps[1]->trb_enqueue = 0; - - dwc3_ep0_stall_and_restart(dwc); - } + dwc3_ep0_reset_state(dwc); /* * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a From patchwork Mon Apr 10 23:19:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wesley Cheng X-Patchwork-Id: 81671 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2213010vqo; Mon, 10 Apr 2023 16:25:36 -0700 (PDT) X-Google-Smtp-Source: AKy350a2FbXJ0nSqakNHNrGetiAlMa6IjUwdiNTHrQmZgvZ/CFGpjbHNQH4x0R+ZzFoAyPaC9IMl X-Received: by 2002:a17:906:804e:b0:947:cca5:4d5f with SMTP id x14-20020a170906804e00b00947cca54d5fmr8643872ejw.28.1681169136566; Mon, 10 Apr 2023 16:25:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681169136; cv=none; d=google.com; s=arc-20160816; b=nlicHnawzzqoRDcjj4MnUeSU45UmVYi4qvJjf+drSbpLT/eEkKnQt8sb5KLNdBX1oc GkAggFFBS7ZaNdpFdqCRRW85dvDobVKr/Jsdy8V0zlc+Fasc517gQiqrg7uFTC60FuG1 GIodS8FpFblTxMn5fkRRhgqjiHm0sQqW42ZtT0KPGJxcdBWKXOdMq1b48ybiX4b4Bxwb eb2PN1UPKq+bIrPbUWIxKwRf8qHLNG1zyU49uFlgPzr8+mpOdtJoDE0Pjcg3TyHHeq52 OCwbpBPC2o338w42WEZHg97QEYwbpT3z8Ju/38kcudthGfbQtlWBbUggSc3GhMgiMM4/ GOqg== 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=mrzAxL+ALewHXGb7bTnfhweah2z2VemEqbRNLk/lNUA=; b=IAP2WJi320ZayAqTHBFit0nFIAQ3EiiB5OuxQTjCjsbu3NJSf8n+bg5fEo2E7dn6IZ /v3PvOEsUO56FWcFjetWPb03KjMEY1rrC6FGFMQ00JrM1JWV73CqOPXmrKyi9RZPcvEG mLHCI7OceHUeFhm4cF2aTlMz8KBQHJ436+hlo5joJeMKqjv2/n2KKq2T9tproHX1gcoQ rlE7PXDpKp69HszzwaFNT1qVkqN62SFMdN6c1UU8i3CNWE9VESgUYxEQB/VcvoOkiYO0 SHmB7QaU1/96FLTthHheUW0Y6pdozb8RcXQXKrg5qszlf8fgILwDGo1aGptLkjaV48Us TYRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=RfKvcaLi; 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 dn14-20020a17090794ce00b0094b88a53f13si587072ejc.807.2023.04.10.16.25.13; Mon, 10 Apr 2023 16:25:36 -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=RfKvcaLi; 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 S229938AbjDJXUR (ORCPT + 99 others); Mon, 10 Apr 2023 19:20:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229727AbjDJXUL (ORCPT ); Mon, 10 Apr 2023 19:20:11 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 183071717; Mon, 10 Apr 2023 16:20:10 -0700 (PDT) Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 33ANFds3030501; Mon, 10 Apr 2023 23:20:07 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=mrzAxL+ALewHXGb7bTnfhweah2z2VemEqbRNLk/lNUA=; b=RfKvcaLirDRvCfLPByLggfS+B4A7qjBJpEEtwksOkNKlbX23eG/pD6Ghw+T587Ts3rqJ 5qfqgfVlIIZLAvnq0MwQxuB8Vq6UgGQuevatGMUmyOSzkG/5C6ad6DJy2ub26x6Wbw4v VPPpcefDPiWtPLloz3PgNNsJ3uoiio+rUMbZhmf/u0Sj6tLUULP5Re/KL0mKtpyFzknC DHmPqZvK5oMl4Ln449cj1l+sJoFDgF4FB2yH5v9N8wTjDQ0AjOTMjhbqPkFhEvwNvtVv 9jWdvwCRjujtX3SJKFgpp4lM+54Rp9MuVILqyDD+B3MjqvfAgAewQUWc9IuKXekaDhbi SA== Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3pvq4dgga6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:20:07 +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 33ANK6e8029460 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:20:06 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.42; Mon, 10 Apr 2023 16:20:05 -0700 From: Wesley Cheng To: , CC: , , , , Wesley Cheng Subject: [PATCH v3 2/3] usb: dwc3: gadget: Stall and restart EP0 if host is unresponsive Date: Mon, 10 Apr 2023 16:19:53 -0700 Message-ID: <20230410231954.437-3-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230410231954.437-1-quic_wcheng@quicinc.com> References: <20230410231954.437-1-quic_wcheng@quicinc.com> MIME-Version: 1.0 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-ORIG-GUID: D0EbXY6CgSKPSUJYZWD9pCpvWqlKk2Vp X-Proofpoint-GUID: D0EbXY6CgSKPSUJYZWD9pCpvWqlKk2Vp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-10_16,2023-04-06_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 priorityscore=1501 impostorscore=0 mlxlogscore=999 adultscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304100204 X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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?1762833608418673788?= X-GMAIL-MSGID: =?utf-8?q?1762833608418673788?= It was observed that there are hosts that may complete pending SETUP transactions before the stop active transfers and controller halt occurs, leading to lingering endxfer commands on DEPs on subsequent pullup/gadget start iterations. dwc3_gadget_ep_disable name=ep8in flags=0x3009 direction=1 dwc3_gadget_ep_disable name=ep4in flags=1 direction=1 dwc3_gadget_ep_disable name=ep3out flags=1 direction=0 usb_gadget_disconnect deactivated=0 connected=0 ret=0 The sequence shows that the USB gadget disconnect (dwc3_gadget_pullup(0)) routine completed successfully, allowing for the USB gadget to proceed with a USB gadget connect. However, if this occurs the system runs into an issue where: BUG: spinlock already unlocked on CPU spin_bug+0x0 dwc3_remove_requests+0x278 dwc3_ep0_out_start+0xb0 __dwc3_gadget_start+0x25c This is due to the pending endxfers, leading to gadget start (w/o lock held) to execute the remove requests, which will unlock the dwc3 spinlock as part of giveback. To mitigate this, resolve the pending endxfers on the pullup disable path by re-locating the SETUP phase check after stop active transfers, since that is where the DWC3_EP_DELAY_STOP is potentially set. This also allows for handling of a host that may be unresponsive by using the completion timeout to trigger the stall and restart for EP0. Fixes: c96683798e27 ("usb: dwc3: ep0: Don't prepare beyond Setup stage") Signed-off-by: Wesley Cheng Acked-by: Thinh Nguyen --- drivers/usb/dwc3/gadget.c | 42 +++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 320e30476c88..91768f1bdbaf 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2546,29 +2546,17 @@ static int __dwc3_gadget_start(struct dwc3 *dwc); static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc) { unsigned long flags; + int ret; spin_lock_irqsave(&dwc->lock, flags); dwc->connected = false; /* - * Per databook, when we want to stop the gadget, if a control transfer - * is still in process, complete it and get the core into setup phase. + * Attempt to end pending SETUP status phase, and not wait for the + * function to do so. */ - if (dwc->ep0state != EP0_SETUP_PHASE) { - int ret; - - if (dwc->delayed_status) - dwc3_ep0_send_delayed_status(dwc); - - reinit_completion(&dwc->ep0_in_setup); - - spin_unlock_irqrestore(&dwc->lock, flags); - ret = wait_for_completion_timeout(&dwc->ep0_in_setup, - msecs_to_jiffies(DWC3_PULL_UP_TIMEOUT)); - spin_lock_irqsave(&dwc->lock, flags); - if (ret == 0) - dev_warn(dwc->dev, "timed out waiting for SETUP phase\n"); - } + if (dwc->delayed_status) + dwc3_ep0_send_delayed_status(dwc); /* * In the Synopsys DesignWare Cores USB3 Databook Rev. 3.30a @@ -2581,6 +2569,26 @@ static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc) __dwc3_gadget_stop(dwc); spin_unlock_irqrestore(&dwc->lock, flags); + /* + * Per databook, when we want to stop the gadget, if a control transfer + * is still in process, complete it and get the core into setup phase. + * In case the host is unresponsive to a SETUP transaction, forcefully + * stall the transfer, and move back to the SETUP phase, so that any + * pending endxfers can be executed. + */ + if (dwc->ep0state != EP0_SETUP_PHASE) { + reinit_completion(&dwc->ep0_in_setup); + + ret = wait_for_completion_timeout(&dwc->ep0_in_setup, + msecs_to_jiffies(DWC3_PULL_UP_TIMEOUT)); + if (ret == 0) { + dev_warn(dwc->dev, "wait for SETUP phase timed out\n"); + spin_lock_irqsave(&dwc->lock, flags); + dwc3_ep0_reset_state(dwc); + spin_unlock_irqrestore(&dwc->lock, flags); + } + } + /* * Note: if the GEVNTCOUNT indicates events in the event buffer, the * driver needs to acknowledge them before the controller can halt. From patchwork Mon Apr 10 23:19:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wesley Cheng X-Patchwork-Id: 81670 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2212815vqo; Mon, 10 Apr 2023 16:25:15 -0700 (PDT) X-Google-Smtp-Source: AKy350bbMJurt5ZmwNtryGJTppUGjQ5Oqws1o0WAHXgot+qelZ+F8fWL+wyTqgJfqTlq0uuIUh7p X-Received: by 2002:a17:906:2a48:b0:93b:1c78:5796 with SMTP id k8-20020a1709062a4800b0093b1c785796mr7266356eje.43.1681169114894; Mon, 10 Apr 2023 16:25:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681169114; cv=none; d=google.com; s=arc-20160816; b=fNROZezGXROegMaj+YDOuKuNlphr0Pe8voeecTUuNs9h2x21Hs70p/+TZNYAtGFfNj z4LIEg6q0kTjFXO3uwn/a6lnncO+aWyJ2NlV2rT6sUqhx8VI4BAv4ruw6BwqiVzJNrfL F5JP/Kh198LJJ6G3/qemonZ9C2zgCnt7yYUzJ5P3V5k1Hmep/ipIEV6iJh7NKhCS/XFl oswsopLcbv2zYwiX8nsZ3ONRByl2NhqQxzx0uhAJJjivrq8+svZD6NuiVgQ+7YmXlfwG 0GJr42jg39V7nWI+kQhZfoRFPqPxkVJDqD423JIZvU27a90V7zDFG4/rM388ALwrBzNJ mfIg== 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=bI/wZP7ubTjCdHoQXeZS5R4X8U4Eh+xW5LDQQWeAzvw=; b=ijjpBkDh5c3tquZOHtGzrbcqmebZkLMwCbiILPFjEXi1bQc4zAY3uEPHIeKfPjFNe+ SJ7Np5R2IsAwFuZxssvb4+WZvd1KGwyfKfP6212zWMPT75YlhwLnAuyV4o4rMM3O0eW6 JdoDjD6MKuaORjQhb/4eVSSbpoWFME3FsGhRf5d1FIvtdVxY+gmt+C1k47FDBCNxRmx9 QvjPDi1fXi2WqZZyQ56PoNj/570IZ1OOokVNygRfRZoo67a8BDeGwFVMf9R87H4gMNr4 r0aqNyql4xYsivvvYo37oBTqxMSif/OVQYVrQGKqtBlI0+8LViVzddMAvXntPL5GgLE4 a0DA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=AB6JC7lT; 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 qw31-20020a1709066a1f00b00949e20c3981si11308188ejc.6.2023.04.10.16.24.51; Mon, 10 Apr 2023 16:25:14 -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=AB6JC7lT; 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 S229877AbjDJXUM (ORCPT + 99 others); Mon, 10 Apr 2023 19:20:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56068 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229663AbjDJXUK (ORCPT ); Mon, 10 Apr 2023 19:20:10 -0400 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A2A86E4D; Mon, 10 Apr 2023 16:20:09 -0700 (PDT) Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 33ANCdmc032106; Mon, 10 Apr 2023 23:20:07 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=bI/wZP7ubTjCdHoQXeZS5R4X8U4Eh+xW5LDQQWeAzvw=; b=AB6JC7lT307nwfRAxfmYuUEfDHcytjG0e2enSXsuARDS91zFRpMzjQtzHnoKegP5+n9e nOvgIIeHO46V6NnZ3VOqN2vRc4Vez5Ea+XEgZtIHZUtuByBHnirKujunr/FwYkkPPZ7m GQznEANjyRoNDmY2XkD1LmNL4GXyWQT837AGWHtq8Mv31oTj9URVgkmJEop86U3ivD+s +5k5Mq7MP16t2wE85aMXUNu5h6pUyHRJ3hjeNFl5+tBqz5q+HxUkVM/vOgmHAh+rNOYF RyleuwjQsfzMufUBd0H/jLlI518d8uElJBU4XmSBjYYdsQhA1tuUzpXQz7I9DgLCkdkb Wg== Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3pvmnagwpp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:20:07 +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 33ANK6it029474 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:20:06 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.42; Mon, 10 Apr 2023 16:20:06 -0700 From: Wesley Cheng To: , CC: , , , , Wesley Cheng Subject: [PATCH v3 3/3] usb: dwc3: gadget: Execute gadget stop after halting the controller Date: Mon, 10 Apr 2023 16:19:54 -0700 Message-ID: <20230410231954.437-4-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230410231954.437-1-quic_wcheng@quicinc.com> References: <20230410231954.437-1-quic_wcheng@quicinc.com> MIME-Version: 1.0 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-ORIG-GUID: g2aW2SwlmXZO6rK8tP5AbcAGQz405Dx6 X-Proofpoint-GUID: g2aW2SwlmXZO6rK8tP5AbcAGQz405Dx6 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-10_16,2023-04-06_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=627 impostorscore=0 adultscore=0 phishscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304100205 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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?1762833585990475230?= X-GMAIL-MSGID: =?utf-8?q?1762833585990475230?= Do not call gadget stop until the poll for controller halt is completed. DEVTEN is cleared as part of gadget stop, so the intention to allow ep0 events to continue while waiting for controller halt is not happening. Fixes: c96683798e27 ("usb: dwc3: ep0: Don't prepare beyond Setup stage") Signed-off-by: Wesley Cheng Acked-by: Thinh Nguyen --- drivers/usb/dwc3/gadget.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 91768f1bdbaf..9715de8e99bc 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2566,7 +2566,6 @@ static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc) * bit. */ dwc3_stop_active_transfers(dwc); - __dwc3_gadget_stop(dwc); spin_unlock_irqrestore(&dwc->lock, flags); /* @@ -2596,7 +2595,19 @@ static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc) * remaining event generated by the controller while polling for * DSTS.DEVCTLHLT. */ - return dwc3_gadget_run_stop(dwc, false, false); + ret = dwc3_gadget_run_stop(dwc, false, false); + + /* + * Stop the gadget after controller is halted, so that if needed, the + * events to update EP0 state can still occur while the run/stop + * routine polls for the halted state. DEVTEN is cleared as part of + * gadget stop. + */ + spin_lock_irqsave(&dwc->lock, flags); + __dwc3_gadget_stop(dwc); + spin_unlock_irqrestore(&dwc->lock, flags); + + return ret; } static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)