Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp1401679rwl; Fri, 7 Apr 2023 15:43:05 -0700 (PDT) X-Google-Smtp-Source: AKy350Y44JX1K9FHrl5CZsbmV9tyElg5ZZq9QcqGrTy1sgrrc5FekrPemQ1VtQ2MAyz8HhqqhVIo X-Received: by 2002:aa7:de18:0:b0:502:961d:b46b with SMTP id h24-20020aa7de18000000b00502961db46bmr3637345edv.12.1680907384990; Fri, 07 Apr 2023 15:43:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680907384; cv=none; d=google.com; s=arc-20160816; b=spPBS7yG7t+N3p/9NWzoqoLrAl2JnB6wKZL3chsy3kHF6r7g8Cc5cwoVMIVxAL713e M8OKI5oUzSnDjTBuW4wDU7BmScOu+LYoXfRLxJg0sGiMIoXdhZ6MUl5G81QFLytv13un WcIjNA8XHKIHPyL6L9pwC5+axSOUNBkUi+5wCwm50qiOXehDN1kW7m0kAth58Vkb82hp +DwjqtkM9pe36KS17L4wuurmiwB1lNK9fv2RmtfXjsEZhgMqoIzn6wqMMaM/VAVgLuR6 JbRZN3BHnrU1rJidwL7miMUzEAzgHEZLQBIxXEN0/MYrF6IM0RPszNxFhPnyFFlMr6Ux YcvA== 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=VV1HyI3BY9JBkw/VShtTUOpXS/70QguiTs+CLdeBcVA=; b=aZTFYRoFMc0LEKny2EyagcY/Z6Hlfpkd0WfpBDkX+UgVnCFmu6UPPMKhLlDrdPOMTF kPP57QwgMmOLDBB6hlj6TiE/8NYA21ADf/V2/xofIUYuRbvs9mpvIqPn6pTRPJFJKwUY 3f6W54+pzP2iLio8APP4iARArhbURMdtXQLnYlQtmH9ViQOWhoJECim2aNJp8cGh75ye WDxQ9ob7DNPgfxoWf2O+XSfUaoO5svNrGBFNs9FxEx/a88m31uZREqEHBW4iSQVtqiFK uIOKhBbDYFsUVkT/s456xctHPbi+8cEFv6R6qOeCpFt6/W2k7GIeC23MHdk8y0xl4wml apOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=IWvfsJnE; 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 o14-20020a1709061b0e00b00948fd62ad4esi4009620ejg.759.2023.04.07.15.42.40; Fri, 07 Apr 2023 15:43:04 -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=IWvfsJnE; 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 S231182AbjDGWlV (ORCPT + 99 others); Fri, 7 Apr 2023 18:41:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231251AbjDGWlR (ORCPT ); Fri, 7 Apr 2023 18:41:17 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8C0F4D52B; Fri, 7 Apr 2023 15:41:03 -0700 (PDT) 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 337MK2RX002387; Fri, 7 Apr 2023 22:40:57 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=VV1HyI3BY9JBkw/VShtTUOpXS/70QguiTs+CLdeBcVA=; b=IWvfsJnEesxJsc+pnS1ZtVP3hmelobLpespxL6B2bK7p7onyspg1hw2V9nHOIm3qGdha l3Wh7W4vPxNuV7hPtp2IQs6mxhnn5nmFrsfkglhoh/acqfQpAdLhf2d4trUCWUbGc32h n7ad/45aUaLy6TvSVe8xK2aMJ0xoxUwdUiLSvHvJvNXOVUwQ3URvxVF9ZUchhI+w6Se8 R+mTCtyy9TGDIgt1xTAv1lmz/ChIbFirZrKB1DcG1ZXavs91sDZMMMjWvKubBXrZDNHY QFpGUyGCHCkDCtCJgsjtaiPAY+ErcMh30RZdUnYlYaFJ8bP0X+9ewGzs5EWXK+jWMmea BQ== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3ptb2428bd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 07 Apr 2023 22:40:57 +0000 Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA04.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 337Mecl0005239 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 7 Apr 2023 22:40:38 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; Fri, 7 Apr 2023 15:40:38 -0700 From: Wesley Cheng To: , CC: , , , , Wesley Cheng Subject: [PATCH v2 1/3] usb: dwc3: gadget: Refactor EP0 forced stall/restart into a separate API Date: Fri, 7 Apr 2023 15:40:23 -0700 Message-ID: <20230407224025.22315-2-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230407224025.22315-1-quic_wcheng@quicinc.com> References: <20230407224025.22315-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: 0CeV-N7FHn1ihptVoLDqH4JEHw7lyWl7 X-Proofpoint-GUID: 0CeV-N7FHn1ihptVoLDqH4JEHw7lyWl7 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-07_14,2023-04-06_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 spamscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 mlxscore=0 bulkscore=0 mlxlogscore=912 impostorscore=0 priorityscore=1501 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304070205 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 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. Fixes: c96683798e27 ("usb: dwc3: ep0: Don't prepare beyond Setup stage") Signed-off-by: Wesley Cheng --- 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