From patchwork Thu Aug 12 17:16:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 496035 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:396:0:0:0:0 with SMTP id y22csp595361jap; Thu, 12 Aug 2021 10:17:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxschE0YSIoO3vEQ0iBY35HGkuMRTy0HApBKIWX4+MwErweTEHtnVdr0Ov298eQmU1JEl0U X-Received: by 2002:a50:d795:: with SMTP id w21mr6796311edi.112.1628788622685; Thu, 12 Aug 2021 10:17:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628788622; cv=none; d=google.com; s=arc-20160816; b=MTaz/QlnQxOMQETZVxj8Td2mPATo01nqr8M4nUlkXhsC7SIxQlzuPKPT++KQgHHE9W NJSnxi26oxSAl6jPOZfYHHbqH+6ul2+Cmf15jwpZjvZXLg7PR7K/CqC+s7wXwDt2uXOF a3BbSo4RakgHZuvSxNQv9MH1kDikzRBJd8BCIdVDe0jd4nCVYO4H4IRwUqHBZRE3N11o No9sPbuB2IIVUoCkmV8nI6iC9yg6+DU/IHFzsYeXbHwjX+YmcOKM7cv7wS6sDm/RCBR6 PNVLpdCFS1x4kWLmbOmu+fdRThIOS34soNPWtVUIIbYcXh9CGcfPjAqXaXlwT7HSoJpY CWaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=zHvbBW4lV0QizVxi+vaN4KwZHXd+SWvkHulD44y2YEs=; b=h37zQCylmQ8DoM+zyglMBcDyL6sjjtE/0HLERgC/TdP4nOaWepc2x9coiEmqYykk/S GqmGrY5yY3yt/l6WBHXWBChwYtCsiPSLTePGSWHj08+VD6bZVIq6YOy9CoXlZYMIC+Bw 5B6WFz9AqkxTNeO1ZJE4NBavFh4hxiEdDHq9OuhbCKgMB7HRUux0tkrkdhdH57qMF0FF KSj/gcHgc/UWPsHk8qHyH3hAtFJglxTq+1a4EBwvxluomUFA6XCxa2If9W1gjo3+C0Kv SOclv7m2G5nctfUNOcxcZxp5CKC4b848TopLRQI51fZ7Ie0eOokfLYcM3WZ3iM8ArTYP og/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=E53g7PYc; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a3si3226044edy.351.2021.08.12.10.17.02; Thu, 12 Aug 2021 10:17:02 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=E53g7PYc; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235378AbhHLRR0 (ORCPT + 12 others); Thu, 12 Aug 2021 13:17:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235249AbhHLRRW (ORCPT ); Thu, 12 Aug 2021 13:17:22 -0400 Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B0FD6C061756 for ; Thu, 12 Aug 2021 10:16:56 -0700 (PDT) Received: by mail-lj1-x233.google.com with SMTP id m17so7823916ljp.7 for ; Thu, 12 Aug 2021 10:16:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zHvbBW4lV0QizVxi+vaN4KwZHXd+SWvkHulD44y2YEs=; b=E53g7PYcPF+Fyb6+TRDW5Ox6YNr3Gl3QL6i/I6cEjn8jkkFFv0sJ9xmGbfDUTPcP5o q74i8RfxtRJHJf6QUsBJkx7dZztqyzt0kdQI8aJbZQopTmitsJRslmLdZ0Ifalgs0J+d sD9FSVB39UeTKUBSsvWGDktT3XgARl3gKqJSGVmJHfMIqRSVzE3UxxiYwxBdDIMqyd+G +RXFUAG6ztp3dpwCDYTLQn+AvPcQryChpLAEZtmEzY42oR57i5njnjvO+r/AEp3tbD8i LyWyVRCF4EHl/UVajBW+cRx0dICZaoP/VUcHRLE5Z/pK9bE78OuJzTzGmLDi+JuZvNHr gOCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zHvbBW4lV0QizVxi+vaN4KwZHXd+SWvkHulD44y2YEs=; b=mO7FAt/w6FuOe1lCSTVXB+RqdFs5+2qFpjTxAhFQKx43EuNykmMlR3zCFUKvxey7gf ZbDvXJMXfbikxNVegGp6/kNPJe78dbKDBZUiGEChjix8uAnpY94FzHwmT3dZ2M9j1yV9 zbJKCzBup/hbOMMk33/IxwoZXJ84js7senPVsx7oR8rVgxJKHrNa1TdorQ8ejrQxA5wt kdESesmP0xxvou3LEbUYRzxkIvFwFQEn2F7KJX/uhvIkHelMz5AQK6nNIw6yU9rbsh+G QsBkQaUWuICj+imDAE0QYzkfpMX6VO9hiOhIJ1F0ysh8eEyFDh8ngnJl/05qKTe4kbgn 7Wiw== X-Gm-Message-State: AOAM532duwPLQJjXAvTjLqj9OyXV1ycctVsXsKnl9Tj/OxfafA5dSR5Q qktNVdI+WHVHZyrWS6uJvb6iiA== X-Received: by 2002:a2e:9956:: with SMTP id r22mr3790854ljj.68.1628788615058; Thu, 12 Aug 2021 10:16:55 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id j1sm372905lji.124.2021.08.12.10.16.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Aug 2021 10:16:54 -0700 (PDT) From: Sam Protsenko To: Greg Kroah-Hartman Cc: stable@vger.kernel.org, Wesley Cheng Subject: [PATCH 5.4 1/7] usb: dwc3: Stop active transfers before halting the controller Date: Thu, 12 Aug 2021 20:16:46 +0300 Message-Id: <20210812171652.23803-2-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210812171652.23803-1-semen.protsenko@linaro.org> References: <20210812171652.23803-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Wesley Cheng [ Upstream commit ae7e86108b12351028fa7e8796a59f9b2d9e1774 ] In the DWC3 databook, for a device initiated disconnect or bus reset, the driver is required to send dependxfer commands for any pending transfers. In addition, before the controller can move to the halted state, the SW needs to acknowledge any pending events. If the controller is not halted properly, there is a chance the controller will continue accessing stale or freed TRBs and buffers. Signed-off-by: Wesley Cheng Reviewed-by: Thinh Nguyen Signed-off-by: Felipe Balbi --- drivers/usb/dwc3/ep0.c | 2 +- drivers/usb/dwc3/gadget.c | 66 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) -- 2.30.2 diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 03b444f753aa..4f28122f1bb8 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -197,7 +197,7 @@ int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request, int ret; spin_lock_irqsave(&dwc->lock, flags); - if (!dep->endpoint.desc) { + if (!dep->endpoint.desc || !dwc->pullups_connected) { dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n", dep->name); ret = -ESHUTDOWN; diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 9cf66636b19d..94c430dcce5d 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1511,7 +1511,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) { struct dwc3 *dwc = dep->dwc; - if (!dep->endpoint.desc) { + if (!dep->endpoint.desc || !dwc->pullups_connected) { dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n", dep->name); return -ESHUTDOWN; @@ -1931,6 +1931,21 @@ static int dwc3_gadget_set_selfpowered(struct usb_gadget *g, return 0; } +static void dwc3_stop_active_transfers(struct dwc3 *dwc) +{ + u32 epnum; + + for (epnum = 2; epnum < dwc->num_eps; epnum++) { + struct dwc3_ep *dep; + + dep = dwc->eps[epnum]; + if (!dep) + continue; + + dwc3_remove_requests(dwc, dep); + } +} + static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) { u32 reg; @@ -1976,6 +1991,9 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) return 0; } +static void dwc3_gadget_disable_irq(struct dwc3 *dwc); +static void __dwc3_gadget_stop(struct dwc3 *dwc); + static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) { struct dwc3 *dwc = gadget_to_dwc(g); @@ -1999,7 +2017,46 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) } } + /* + * Synchronize any pending event handling before executing the controller + * halt routine. + */ + if (!is_on) { + dwc3_gadget_disable_irq(dwc); + synchronize_irq(dwc->irq_gadget); + } + spin_lock_irqsave(&dwc->lock, flags); + + if (!is_on) { + u32 count; + + /* + * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a + * Section 4.1.8 Table 4-7, it states that for a device-initiated + * disconnect, the SW needs to ensure that it sends "a DEPENDXFER + * command for any active transfers" before clearing the RunStop + * bit. + */ + dwc3_stop_active_transfers(dwc); + __dwc3_gadget_stop(dwc); + + /* + * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a + * Section 1.3.4, it mentions that for the DEVCTRLHLT bit, the + * "software needs to acknowledge the events that are generated + * (by writing to GEVNTCOUNTn) while it is waiting for this bit + * to be set to '1'." + */ + count = dwc3_readl(dwc->regs, DWC3_GEVNTCOUNT(0)); + count &= DWC3_GEVNTCOUNT_MASK; + if (count > 0) { + dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), count); + dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) % + dwc->ev_buf->length; + } + } + ret = dwc3_gadget_run_stop(dwc, is_on, false); spin_unlock_irqrestore(&dwc->lock, flags); @@ -3038,6 +3095,13 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) } dwc3_reset_gadget(dwc); + /* + * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a + * Section 4.1.2 Table 4-2, it states that during a USB reset, the SW + * needs to ensure that it sends "a DEPENDXFER command for any active + * transfers." + */ + dwc3_stop_active_transfers(dwc); reg = dwc3_readl(dwc->regs, DWC3_DCTL); reg &= ~DWC3_DCTL_TSTCTRL_MASK; From patchwork Thu Aug 12 17:16:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 496037 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:396:0:0:0:0 with SMTP id y22csp595382jap; Thu, 12 Aug 2021 10:17:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxCNnIFtRUoTthZZ+d9zB5N8uH33oreFBuE6bnzLOWPNA1cM0uiVURQFwb5LVMYePPQZlx8 X-Received: by 2002:a5d:490b:: with SMTP id x11mr5174412wrq.322.1628788623610; Thu, 12 Aug 2021 10:17:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628788623; cv=none; d=google.com; s=arc-20160816; b=jkjOO4wiRWAvKccZx9WBVktcCWYjdF5pXGkkFCc5mokUSHv9R9U+HMgBwhm6fp2yWB g4Si6HJ+Qk4VFH9v3ovWDWsb6ebpX88xVVDTb5echd3VUx/YUp8JRLQ2BpkqWPk3vPdF jrYWPxm8UAkUBPE87AiFXb0K2VL/SaSA20hTS9nH/CLaNyUjtqphXp/kBxGKak0YKoQl Iv5sYF8yL/1eJvvyKKxqqL2QX5BZ0KZD4RGYlBnzXmVpaRtbZ4maF4zpkR6NCPl3tDL0 FlwdFB8ukELQEPfZ4kTHXmPtsj+wftXPxXMIex2kr8xagQPWuoyZ5csp+/AbMeQEDL9y 79HQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xdyO31aY5oJHXthF/yLNWPoKfzIGPWGA/V6iR9KxXtc=; b=ugQti6cKfxAy+6ynljjuoTKXb6PziAYvOSVxsBi2rbSAc0dgp3IMhaOXbuleLfAWzV RBOIZWC+ruCUuRSTtfk+6jhzaylMC0OfBrvyyg5OJT0AurxtlA8xKctO1PhHnfqTeerv kZYDSa4qtnxzA7Jn1MgZoVmeyjUdG87UEmds2ztjDkePbKVeAJxd/9Vfg/puC3U7UpU8 PuUsK1h9ZfIutICM/f0Y6yzwGlTnrJu9DnmhDYf8iRHALiSLJy4cDBGEQHM2rYS5fzPi 8oO9eDWffKLk8W1xj7p9FSqkNg88VeSDtzF1qSxFECUCH41nvcpQPMazYIfYZ15W4hEh VsNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="Exo/K0Y1"; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a3si3226044edy.351.2021.08.12.10.17.03; Thu, 12 Aug 2021 10:17:03 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="Exo/K0Y1"; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235375AbhHLRR1 (ORCPT + 12 others); Thu, 12 Aug 2021 13:17:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59272 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235368AbhHLRRY (ORCPT ); Thu, 12 Aug 2021 13:17:24 -0400 Received: from mail-lf1-x12f.google.com (mail-lf1-x12f.google.com [IPv6:2a00:1450:4864:20::12f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B4754C0613D9 for ; Thu, 12 Aug 2021 10:16:58 -0700 (PDT) Received: by mail-lf1-x12f.google.com with SMTP id n17so14689444lft.13 for ; Thu, 12 Aug 2021 10:16:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xdyO31aY5oJHXthF/yLNWPoKfzIGPWGA/V6iR9KxXtc=; b=Exo/K0Y16AuohmBll0LChadNE8QI0TmR/PqlAwBwzKe+YOqY978WAmVjYn2WVKY2bp 5q11NHKiUBcZ8owq4qGv6qoPYDVu9E3yJzKLU6M6yAn+2ag7eiyXH3JzjWDV1O6Y5xhx XUZj+3wz1f02gqNdcZy8yT2bPzPqoNd4nzCLw8gP9euYQRlWbSrfS/OlzBTdPW1i4rdy JUuzy/gyDfsBVodcigX627xzNMj8zFIww+LZajhsbsC5Xn0KLd6IKndm5Z72VPKp+J09 3GIjzWmxlxOFcszzp0KyfS2AiQ7CrlC+grwEOMu1RIhccxRCfjfIuLk4Ulg8i6+xBdl5 CnvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xdyO31aY5oJHXthF/yLNWPoKfzIGPWGA/V6iR9KxXtc=; b=mbubLdVocURHNH5LyEmRkOHw7CatmGOGyxxdgcxLiA3/g2y71jIY4ua6DYWILKnMSS eOofBDFOf9LvQ4r5nDLUZygGn4e7gH//O/EgZ178emBNyNIMRcAAGFjvjJFTfunbJh+9 cUkSiriozqKHEwPG2t4aEvCS/AaJpGZRzCMvvAa8WsOXwlCUIkqviWe7SmPJ9kAHm2Xb gNRNlU9neWc0v6gl8Z8UNXxXUiqUvzb/JDFBwUAv7pno/pZKVQapsuWHkKoAxv8z24LN CnziQ9cXRc2h/gL/Jckdzcub62uP4Fv1KjsahYHjS5WEUyuPLHGkHMvxD/4EilmQqFEc NPgw== X-Gm-Message-State: AOAM530k0PPN5Wk9UU1tdOE+t2waMJgbYBTtvP8DLGrsPBX5yaDibZaK PeX74E5UGqXWFkjMYukP742nrg== X-Received: by 2002:a19:6403:: with SMTP id y3mr3245781lfb.120.1628788617123; Thu, 12 Aug 2021 10:16:57 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id r3sm319731lfc.114.2021.08.12.10.16.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Aug 2021 10:16:56 -0700 (PDT) From: Sam Protsenko To: Greg Kroah-Hartman Cc: stable@vger.kernel.org, Wesley Cheng Subject: [PATCH 5.4 2/7] usb: dwc3: gadget: Allow runtime suspend if UDC unbinded Date: Thu, 12 Aug 2021 20:16:47 +0300 Message-Id: <20210812171652.23803-3-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210812171652.23803-1-semen.protsenko@linaro.org> References: <20210812171652.23803-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Wesley Cheng [ Upstream commit 77adb8bdf4227257e26b7ff67272678e66a0b250 ] The DWC3 runtime suspend routine checks for the USB connected parameter to determine if the controller can enter into a low power state. The connected state is only set to false after receiving a disconnect event. However, in the case of a device initiated disconnect (i.e. UDC unbind), the controller is halted and a disconnect event is never generated. Set the connected flag to false if issuing a device initiated disconnect to allow the controller to be suspended. Signed-off-by: Wesley Cheng Link: https://lore.kernel.org/r/1609283136-22140-2-git-send-email-wcheng@codeaurora.org Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc3/gadget.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) -- 2.30.2 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 94c430dcce5d..bc655d637b86 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2017,6 +2017,17 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) } } + /* + * Check the return value for successful resume, or error. For a + * successful resume, the DWC3 runtime PM resume routine will handle + * the run stop sequence, so avoid duplicate operations here. + */ + ret = pm_runtime_get_sync(dwc->dev); + if (!ret || ret < 0) { + pm_runtime_put(dwc->dev); + return 0; + } + /* * Synchronize any pending event handling before executing the controller * halt routine. @@ -2055,10 +2066,12 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) % dwc->ev_buf->length; } + dwc->connected = false; } ret = dwc3_gadget_run_stop(dwc, is_on, false); spin_unlock_irqrestore(&dwc->lock, flags); + pm_runtime_put(dwc->dev); return ret; } From patchwork Thu Aug 12 17:16:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 496036 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:396:0:0:0:0 with SMTP id y22csp595375jap; Thu, 12 Aug 2021 10:17:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyhDVoS/p7PcH6D9lWaIPZtfrhKF3qVf9djUHKo88VrNLM/8/fbL5MBlT27e8X+DpKJ5QEn X-Received: by 2002:a17:906:9c84:: with SMTP id fj4mr4763419ejc.356.1628788623157; Thu, 12 Aug 2021 10:17:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628788623; cv=none; d=google.com; s=arc-20160816; b=nAdvWyGojbHRYSKKG4dWLStP6I7045Pn3Kz+YDuegIyOYCs1ImVlnd0vnRBtH2sM8X IhwokDI1DHY+5aRc8od7vy7SrzW8vvb+PSiyiHm95ipv9bIgwSO90AkFlaoXgHzQ/8z4 ssF5ihVLmEGpLlB/KYLNTsEBXz33BlrD0A+GIRK47SQwBIMvfjGpU6PoWo0zJK6euXBM Nc119lHY7QithWOOhFRPepfqaTmS/luNunRS92bSggLfPzvJiBCpb9MgSGgcr915iinY t8Ao385sotvVRE27lG3qgJ0mhgIiSlB4JhYIdRz+PIDYFdpXK9++CTM5lw94T7Mca2CK 0wLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=b0JgbTAX05rhKAcAoEa4I+TuhbaN7/BKvLWyPaT2ewA=; b=azJkvFcwhu77h6qL4YEQ6Jr/SxBO6BlobQNvfh2S3bGyhyxmGwL2RRiqmbtVcpMs4M I8BTRj9eKsWV8XWOR3ADuyqQdYuD+uiLBS/q2Y0H9SvhIqVqbxwAQDM5rtiW8aLOIYbx WD9ktbx/sA1DzgSugGoS5au4cTre+KjfPfgMLUTlMRKUmSKNjSdqkYM4unTw/04Hy61I GakN5km1DsgsL/XegsFgT38CtCStsXVnhHocz7Pjjx0u0OG5EKsA/2+7VBH+8ZuSkMCU gnfZ6P0ImWAKhLOXTMWPt0lyvfy1DNnJUTPR86aYJ2eVVUBDITcCWR9CeaznkdyUOj4h I2Rw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=tXxWh2R7; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a3si3226044edy.351.2021.08.12.10.17.02; Thu, 12 Aug 2021 10:17:03 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=tXxWh2R7; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235249AbhHLRR1 (ORCPT + 12 others); Thu, 12 Aug 2021 13:17:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59280 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235375AbhHLRRZ (ORCPT ); Thu, 12 Aug 2021 13:17:25 -0400 Received: from mail-lj1-x230.google.com (mail-lj1-x230.google.com [IPv6:2a00:1450:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40DE0C061756 for ; Thu, 12 Aug 2021 10:17:00 -0700 (PDT) Received: by mail-lj1-x230.google.com with SMTP id n7so11682994ljq.0 for ; Thu, 12 Aug 2021 10:17:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b0JgbTAX05rhKAcAoEa4I+TuhbaN7/BKvLWyPaT2ewA=; b=tXxWh2R7Q04fvFaOX4Mi1p4yAIlSeLynJyvVgFTdgLI0nGusTh7Ex4px8x/dAwFBYP z6UvrIPr7fZ+SBmZEJrUerxYOX2YRDiPJAKqCtvzTv2aPaq4YKgv3hsp+4EpjW3U0/PC arl+Vn8vKrzx3SomkcD/mvO3z0qVrdaZNvIJak2r8UR+V8/POU+hikhHY8zuIi40jlTJ MdP+w4a02g9VUf0Ga9QIZkdCdVC1R/+zZ417WCoHELYIEh0QPEcF+sjr7EJnJpbVTo0a UPyuO7QIKH4Wy77hnM0P1TRrsvRXQ7OW/K3qrKeymyu/wU936uylC4lSTTTVQpDicF7I c1fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=b0JgbTAX05rhKAcAoEa4I+TuhbaN7/BKvLWyPaT2ewA=; b=X8+ShRP7lUkV4+fSGn9bfS+EewU+JV7n55DoxXziE17NWoPHNnQzjCdydDj//1L+t+ 5MWOI43TBinHpr6X9PfhnA05eoueKjgSGKRTT6wcBrOl0dwZrIp+ODoUrIh7dDdqtZsY eXLSfRhSxqyI4BhMBCf5OD3sxS99KmtT0TUFCR2QzvNGeuz29Ca+KofE8E+4iWj4VtQ7 gL06Nz7k0h1KvQJ0f1yHloziXL4Q3V4LOtQddxjMgS09iItrn5UWl7ABjbx5PuNX3ZgN FfftCfKwWKzLM1npkw9+/YliCOTKk+YBN8lthneoz98PpqKvc/2S+9ip6O/zmxhTvrUB 96aw== X-Gm-Message-State: AOAM533GWgU/3oubN8pN610wjyIrmPMTzSBPTTdXru6oFPHNlp+EbOUz dBDhHq16DO2sATY+EyCiP/Oosg== X-Received: by 2002:a05:651c:981:: with SMTP id b1mr2885652ljq.281.1628788618611; Thu, 12 Aug 2021 10:16:58 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id k44sm277730lfv.288.2021.08.12.10.16.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Aug 2021 10:16:58 -0700 (PDT) From: Sam Protsenko To: Greg Kroah-Hartman Cc: stable@vger.kernel.org, Wesley Cheng Subject: [PATCH 5.4 3/7] usb: dwc3: gadget: Restart DWC3 gadget when enabling pullup Date: Thu, 12 Aug 2021 20:16:48 +0300 Message-Id: <20210812171652.23803-4-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210812171652.23803-1-semen.protsenko@linaro.org> References: <20210812171652.23803-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Wesley Cheng [ Upstream commit a1383b3537a7bea1c213baa7878ccc4ecf4413b5 ] usb_gadget_deactivate/usb_gadget_activate does not execute the UDC start operation, which may leave EP0 disabled and event IRQs disabled when re-activating the function. Move the enabling/disabling of USB EP0 and device event IRQs to be performed in the pullup routine. Fixes: ae7e86108b12 ("usb: dwc3: Stop active transfers before halting the controller") Tested-by: Michael Tretter Cc: stable Reported-by: Michael Tretter Signed-off-by: Wesley Cheng Link: https://lore.kernel.org/r/1609282837-21666-1-git-send-email-wcheng@codeaurora.org Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc3/gadget.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) -- 2.30.2 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index bc655d637b86..e242174321d1 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1993,6 +1993,7 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) static void dwc3_gadget_disable_irq(struct dwc3 *dwc); static void __dwc3_gadget_stop(struct dwc3 *dwc); +static int __dwc3_gadget_start(struct dwc3 *dwc); static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) { @@ -2067,6 +2068,8 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) dwc->ev_buf->length; } dwc->connected = false; + } else { + __dwc3_gadget_start(dwc); } ret = dwc3_gadget_run_stop(dwc, is_on, false); @@ -2244,10 +2247,6 @@ static int dwc3_gadget_start(struct usb_gadget *g, } dwc->gadget_driver = driver; - - if (pm_runtime_active(dwc->dev)) - __dwc3_gadget_start(dwc); - spin_unlock_irqrestore(&dwc->lock, flags); return 0; @@ -2273,13 +2272,6 @@ static int dwc3_gadget_stop(struct usb_gadget *g) unsigned long flags; spin_lock_irqsave(&dwc->lock, flags); - - if (pm_runtime_suspended(dwc->dev)) - goto out; - - __dwc3_gadget_stop(dwc); - -out: dwc->gadget_driver = NULL; spin_unlock_irqrestore(&dwc->lock, flags); From patchwork Thu Aug 12 17:16:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 496038 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:396:0:0:0:0 with SMTP id y22csp595389jap; Thu, 12 Aug 2021 10:17:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzdxru0xpP2GGqDeTrcEzQtpNEyGN6UHcsP5d3jBRnwcjEV8BqLi078ijgKplQVgyMi1ntq X-Received: by 2002:a17:906:b890:: with SMTP id hb16mr4576507ejb.383.1628788624122; Thu, 12 Aug 2021 10:17:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628788624; cv=none; d=google.com; s=arc-20160816; b=JmyT2ozlOFXCV7dwJ/S9aCWeys6ssletT20pcuP+ej0APUj6B9IxV3QLyiKA5HYEWS KPsY41B/8ebvzE8gNEvy1SBoa3gISND0X/Z0AI347HdN5ZlEydiJ46mtgk/PMyuBcHfA g+92CrS4C5UrL5kXBujHniJhFo1zu/GD6F63EEnLHRkcmHw/6vN0zNLrQDliaD3BET9x Lc4zBqucu8klhfm0/VTsuzE0nNGu4hBenYQT1VUuvrgCuUQHD2UvrAbJUCyN0goi6F/l 34T+/dSCBdBKEQRKcAhE6ttevjZq9q7QxISrq7wLiM68ez80v2pLEmJShj7qKj8mb4CI Hu9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=IbNOLHfCLiIPyAUw3tbdS+8Xfnl4agrw5winPTLu2cs=; b=K+stOnbFJ5hJCFsm7lOpf5IatilAAbGd4loprYPR8Mu5fc8B9m1w8/ec4ZALjrUmH4 U478Xky289qVFEP1sVFOh9f+IP8VXwcaaczbCzAOa2JrMHoQ9XZ7HTTJGiztW0K5lUQR w1lud0HK/iV6ozC0x0dZFE6Q9ggMwOUFr4tyxlzC5S+f0gcGFNXQ3CpLw7EZN4O6jjtS vqIgzFgLgeW2LWvpmvV1QDi5GwVpTN85TRD8Aw/YbvE5RjJotFZU68FyLJl/BmT/C6rK PSzpwGpvAv3eWJ5zulYRiq9npD/kx2yUSthv7iSn74iR1Ra1makT1tvuSR24FJk362S2 twng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TOYfxVH1; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a3si3226044edy.351.2021.08.12.10.17.03; Thu, 12 Aug 2021 10:17:04 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TOYfxVH1; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235368AbhHLRR1 (ORCPT + 12 others); Thu, 12 Aug 2021 13:17:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59288 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235044AbhHLRR1 (ORCPT ); Thu, 12 Aug 2021 13:17:27 -0400 Received: from mail-lf1-x12f.google.com (mail-lf1-x12f.google.com [IPv6:2a00:1450:4864:20::12f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C54D9C061756 for ; Thu, 12 Aug 2021 10:17:01 -0700 (PDT) Received: by mail-lf1-x12f.google.com with SMTP id x27so14769658lfu.5 for ; Thu, 12 Aug 2021 10:17:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IbNOLHfCLiIPyAUw3tbdS+8Xfnl4agrw5winPTLu2cs=; b=TOYfxVH1CWHfVY4ong0sHEBwcxiHyickPUv9tutBwc3EnXOhxb/MdE0lTFVU82HMSX h+ueBFLK7/xDmFccTt+jZ10MydouQAdgsVX3YYbbTCnhYEr5K+joEaXLtiH84n//28UY SGMaVRUkhuk7dM7F+FuS7QbJj1VHwuSjG55FCNub8MKZcjGSQtBDWe91awep9PsBJ7fH megoXp/mfuo/s+pt2WGewia49AwmdGESGc//6QDcS0szQ3QYbiCNi3P57oA0AcYdPj4o Mvj2BoGizhbUmh849p475Xa5R5WWSNYDp0LUiuYnHJBqa1nlTf1zSt9FpPz53cq5NTRY bAQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IbNOLHfCLiIPyAUw3tbdS+8Xfnl4agrw5winPTLu2cs=; b=NmJKPZXv1Jw7YE6wEWvJvvGjgtYgUZoMdCRh/6ohd1uiudsm9BHVBOEbpITUklBdjq geaxBKg4iqgg+O5Hj0baTFSsn7OKeCg3pZ11tSv5plrQML8jFa14JVFMK7wacQB4XNeE /jtoYc6ObeZ+wZYqnguGoy55hlF0rLsVID179sTImOsKL+EbBgrGH3y0fz0xtq+yg6Sz AeDSlEvhPZxsILezhC2j2TAO53H/AumFabykgm2EQ/+vsz+reEFgmxrfKShk+xoJH3qO 1uXP1ZmjLuz+YVJeHkPWHHlhvGWFE5iZxGTkVGGaRAqm5jdnH5hVJpsYcHCT14iZhRSq cvgg== X-Gm-Message-State: AOAM533hvyxp6xjrUeuqz56XfXssutptyIqSoEHocRib4PzlxnScciKU FT0lUfvaPFzJgG7lFuFA76S80w== X-Received: by 2002:ac2:490b:: with SMTP id n11mr3269420lfi.656.1628788620151; Thu, 12 Aug 2021 10:17:00 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id i22sm317969lfv.125.2021.08.12.10.16.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Aug 2021 10:16:59 -0700 (PDT) From: Sam Protsenko To: Greg Kroah-Hartman Cc: stable@vger.kernel.org, Wesley Cheng Subject: [PATCH 5.4 4/7] usb: dwc3: gadget: Prevent EP queuing while stopping transfers Date: Thu, 12 Aug 2021 20:16:49 +0300 Message-Id: <20210812171652.23803-5-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210812171652.23803-1-semen.protsenko@linaro.org> References: <20210812171652.23803-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Wesley Cheng [ Upstream commit f09ddcfcb8c569675066337adac2ac205113471f ] In the situations where the DWC3 gadget stops active transfers, once calling the dwc3_gadget_giveback(), there is a chance where a function driver can queue a new USB request in between the time where the dwc3 lock has been released and re-aquired. This occurs after we've already issued an ENDXFER command. When the stop active transfers continues to remove USB requests from all dep lists, the newly added request will also be removed, while controller still has an active TRB for it. This can lead to the controller accessing an unmapped memory address. Fix this by ensuring parameters to prevent EP queuing are set before calling the stop active transfers API. Fixes: ae7e86108b12 ("usb: dwc3: Stop active transfers before halting the controller") Signed-off-by: Wesley Cheng Link: https://lore.kernel.org/r/1615507142-23097-1-git-send-email-wcheng@codeaurora.org Cc: stable Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc3/gadget.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) -- 2.30.2 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index e242174321d1..8702035d08f1 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -746,8 +746,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) trace_dwc3_gadget_ep_disable(dep); - dwc3_remove_requests(dwc, dep); - /* make sure HW endpoint isn't stalled */ if (dep->flags & DWC3_EP_STALL) __dwc3_gadget_ep_set_halt(dep, 0, false); @@ -766,6 +764,8 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) dep->endpoint.desc = NULL; } + dwc3_remove_requests(dwc, dep); + return 0; } @@ -1511,7 +1511,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) { struct dwc3 *dwc = dep->dwc; - if (!dep->endpoint.desc || !dwc->pullups_connected) { + if (!dep->endpoint.desc || !dwc->pullups_connected || !dwc->connected) { dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n", dep->name); return -ESHUTDOWN; @@ -2043,6 +2043,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) if (!is_on) { u32 count; + dwc->connected = false; /* * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a * Section 4.1.8 Table 4-7, it states that for a device-initiated @@ -2067,7 +2068,6 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) % dwc->ev_buf->length; } - dwc->connected = false; } else { __dwc3_gadget_start(dwc); } @@ -3057,8 +3057,6 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) { u32 reg; - dwc->connected = true; - /* * Ideally, dwc3_reset_gadget() would trigger the function * drivers to stop any active transfers through ep disable. @@ -3107,6 +3105,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) * transfers." */ dwc3_stop_active_transfers(dwc); + dwc->connected = true; reg = dwc3_readl(dwc->regs, DWC3_DCTL); reg &= ~DWC3_DCTL_TSTCTRL_MASK; From patchwork Thu Aug 12 17:16:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 496039 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:396:0:0:0:0 with SMTP id y22csp595406jap; Thu, 12 Aug 2021 10:17:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzzuzt0kz9sHFT9cW4IkKI7erPcScxUVd1Oe1IvYVryWjwlnIPuwWInpr6LgHGidv640M+G X-Received: by 2002:a17:907:2bc1:: with SMTP id gv1mr4888593ejc.58.1628788624684; Thu, 12 Aug 2021 10:17:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628788624; cv=none; d=google.com; s=arc-20160816; b=opm4uaXjCFs/BCcD4FvZkblGRGIVRwauv2FzdyUMMmoYP+Uv8B2g72Few+yFTLaSnG v258C2il0lgBD9QAwPTNHqOQ2AEpNkzl2gN1E3j26PydX2po3+GO3BR1g1b4FiHOQanm 6NYkktRmyznb97jcWqhCqsOEKfLLYyOJiABQETzvfuPjgdkzNRhIAXFlwnCPmdjx78PK JP9jjrMQ9n4YQlVLjBNzXUa5dTO+j3uLyNo7ruEyGrZ3FutvuVylujcsudA2BNgiWTNs QsztFRb0Py5cvt+pRYIfQc4vKbMXg05mhKvxw+HZjInjLpneWoZ455Zps/YIxQQamRXN WwTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=575RKXlVoqe+Vms4/CGvY3NT7USl2X3vSq6hXihEXlY=; b=j1df9IMtXea06Wn0BxmKlw0TdQ6mJIBVBDC5Z+WcfDC1BVEuXtYrcdgJ0vmS2I1MT0 8nORiTVBMDlHt+SpKewCYGkuYijA/VNjElY5oKyboaksEcam5AF5RwRaxov2JlJs3r+O XPs4NEL2gKbPu5W3KXEzG+FzH4PeUkstA3XlemMbooM8/7wWPZqQZFpw+tdFCjaBxAq4 qsSzBK3VmAkJa9tEJycK/YKMjO4dlxCwtPoE5vY0rx2JzqgxWGdA8KPIvOdlYLaLVZwC IF36Hqk3Z+MIbcG4YtKiDZc6IWWCao+tJp5mluTxYUvinS3L/zobSU+xxSSEfuPEA3Qw hKgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="xvX4r/aX"; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a3si3226044edy.351.2021.08.12.10.17.04; Thu, 12 Aug 2021 10:17:04 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="xvX4r/aX"; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235385AbhHLRR3 (ORCPT + 12 others); Thu, 12 Aug 2021 13:17:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59298 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235044AbhHLRR2 (ORCPT ); Thu, 12 Aug 2021 13:17:28 -0400 Received: from mail-lj1-x236.google.com (mail-lj1-x236.google.com [IPv6:2a00:1450:4864:20::236]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 30752C061756 for ; Thu, 12 Aug 2021 10:17:03 -0700 (PDT) Received: by mail-lj1-x236.google.com with SMTP id a7so11548766ljq.11 for ; Thu, 12 Aug 2021 10:17:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=575RKXlVoqe+Vms4/CGvY3NT7USl2X3vSq6hXihEXlY=; b=xvX4r/aX94idi4fHu4lCa7oTqnjNocknJorx4oYDTTT6fAeLHu5ayytkWKbMG1Ll5b K5PX9uUXBSf/dHcYZsSBTNtC/59tQiYnI0qc5tl0e3ly8PEdUdp3xm7Nms0K5RKlhU6/ To5hoHBNfcNaer+3ZrSMRy4Byxg3nU3vLVHeUVZ1J69EyTdILfguOksrOUMC2M7MHvGg nOOQFMOHrAcIgWrh+H0BNLBE+PLgK84UmnpCV7WU9Doz8nhiP3EPkv5jtO+2i/WABSv2 +/8S20yPW2gPCeOSKQOTlYOIF0C0mx3aKq4Fz5by/mKwWW5qZoAetdeq0AK4b1ODpP08 ss+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=575RKXlVoqe+Vms4/CGvY3NT7USl2X3vSq6hXihEXlY=; b=NHW4WCj/lSun4L5WjFaNUYV2Ag2prsQBWMfHO3cTxPI+4sNYMuJVamzrtCJiBwbN1y sjK/A8RK1R746638XnJ2p18TrhHE2l4OnxotG8MKF14jq+ha5W1bUDlfdWqkLWyOjJp1 gk2zpe+UgYXWB/6PvRcorIgqEEmKNZxqK6e50Pscrvu8LmpAJAgtgJ6GZ0OtKpTMSX60 3zVzlBvDEr3NEfmSDOrtyjOzj62QXP4jpkvye7+xiv66YCPaK73GVmTPnQa+fEe7FNdo 4JVfCf4BwOb0vPrCsQMrGlhbjM78NyuSXdh496F0f10rLqIYWbi3lt474EhufQlGjMj+ xmQA== X-Gm-Message-State: AOAM532URxjrJ2Ya4dfiYhan29l/Lr8REPsjNoRs9ui+NusQCaeNvfMw eQJgGJfmvZoba3mo72Vh811f5A== X-Received: by 2002:a2e:a80c:: with SMTP id l12mr3785999ljq.206.1628788621585; Thu, 12 Aug 2021 10:17:01 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id d27sm318979lfq.147.2021.08.12.10.17.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Aug 2021 10:17:01 -0700 (PDT) From: Sam Protsenko To: Greg Kroah-Hartman Cc: stable@vger.kernel.org, Wesley Cheng Subject: [PATCH 5.4 5/7] usb: dwc3: gadget: Clear DEP flags after stop transfers in ep disable Date: Thu, 12 Aug 2021 20:16:50 +0300 Message-Id: <20210812171652.23803-6-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210812171652.23803-1-semen.protsenko@linaro.org> References: <20210812171652.23803-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Wesley Cheng [ Upstream commit 5aef629704ad4d983ecf5c8a25840f16e45b6d59 ] Ensure that dep->flags are cleared until after stop active transfers is completed. Otherwise, the ENDXFER command will not be executed during ep disable. Fixes: f09ddcfcb8c5 ("usb: dwc3: gadget: Prevent EP queuing while stopping transfers") Cc: stable Reported-and-tested-by: Andy Shevchenko Tested-by: Marek Szyprowski Signed-off-by: Wesley Cheng Link: https://lore.kernel.org/r/1616610664-16495-1-git-send-email-wcheng@codeaurora.org Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc3/gadget.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) -- 2.30.2 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 8702035d08f1..5f2e4a2638f5 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -754,10 +754,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) reg &= ~DWC3_DALEPENA_EP(dep->number); dwc3_writel(dwc->regs, DWC3_DALEPENA, reg); - dep->stream_capable = false; - dep->type = 0; - dep->flags = 0; - /* Clear out the ep descriptors for non-ep0 */ if (dep->number > 1) { dep->endpoint.comp_desc = NULL; @@ -766,6 +762,10 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) dwc3_remove_requests(dwc, dep); + dep->stream_capable = false; + dep->type = 0; + dep->flags = 0; + return 0; } From patchwork Thu Aug 12 17:16:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 496040 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:396:0:0:0:0 with SMTP id y22csp595500jap; Thu, 12 Aug 2021 10:17:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyh1cbpngm9LgffVg2aYolhxOa0jDFv5S8Lirxwa8wuwkYaf8Hj0hwHTrrQM8Va0m9OEO5n X-Received: by 2002:a17:906:95ce:: with SMTP id n14mr4448502ejy.130.1628788626421; Thu, 12 Aug 2021 10:17:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628788626; cv=none; d=google.com; s=arc-20160816; b=pv4K3SbcertRC4fBF3bomlTkqgeYUT1uyEADt+AoSFLlQke27jKhT9f7g/7UN0Gugc TidHXCMlos2LlHMtnH267MSdDvqD72UqG+qZEUa6kTsHUd8GQwnKaQ0Jo1qhhrQEk3Jn r/1B4OMCOlFzVBVH//oqxzVaFBhKZ1ZlgcYpe0lIWkGNw2NdwyZvez3b4aQ9giQWoufS ZunVBZ09V4gkQBi0glVmEV2GOD40UJHBr40cgcS2U3VuBUm1akNfKwWlydPmskQI88WS SccDlsDUkfiBd2cw9T5EOypR8/li1kkUBqOph6/LDydDF8zGZRTM3wVSik1HELsgtxXp bwHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=UP7SL7grh8pY0W8Sj4i0+eIen9AAWcvTpps57Rhi1w0=; b=ZM0jSx+TBjJkkcWDu5Vc21bclN2M8pbYPhPl2n90AfVv8Nbl9hRFWKg3GDXMBYumLe Nk2Ws4W1JdnZcA77YmG2DGlK6J5bf4R6PcY5m+E0qrZrfHMm1koHbixXyQU6s5gn0IpY 0m4unUJTkSZwPO9loqjro3wGnzmmtpSXAujsLAj5vnIogbbl03BNYcs4yWU4vkmhfre9 hlHAF3yxArCzBb8v229n8ArQOH6xIKtUEZWE2eys79pj+cGuMtDQ8eE38Db9crsN/uk9 r9dZP9HKos0VnyHjOzFYKt2uyyzd7qFg6n6aoPWDcfYhQtILbAbTFAn2WdysrnScs6hp OQcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NrK3gUco; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a3si3226044edy.351.2021.08.12.10.17.06; Thu, 12 Aug 2021 10:17:06 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NrK3gUco; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235413AbhHLRRa (ORCPT + 12 others); Thu, 12 Aug 2021 13:17:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59304 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235388AbhHLRRa (ORCPT ); Thu, 12 Aug 2021 13:17:30 -0400 Received: from mail-lj1-x231.google.com (mail-lj1-x231.google.com [IPv6:2a00:1450:4864:20::231]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB8D1C0613D9 for ; Thu, 12 Aug 2021 10:17:04 -0700 (PDT) Received: by mail-lj1-x231.google.com with SMTP id h17so11517037ljh.13 for ; Thu, 12 Aug 2021 10:17:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UP7SL7grh8pY0W8Sj4i0+eIen9AAWcvTpps57Rhi1w0=; b=NrK3gUcoU4w5a19APqFfYb7KMufsf/YO0t5C+J+PywZyJ0gEkEz/9Owe5V3ae1/5T4 meAjxD9x5cRo08fC+XPhHAnRRYQgr8izMEssLOEpKzseW2MzzcdgW0uDyhuVhRii/eog 4rbMJuSNggypzV0WMntZJMl4REcfZpsWKVa8CpVHB5c4zdjiH6HYkD4Bu5ZgPeLmkClk TYikJGbAPj3AflW057BZZmWHcHOWT9qvhcE1485A+A8egNyAApEKK977fS0G1cJmen9a B/4Q3LMxKFvME9lePgAiNvHrq+0lzdeNYayO9TS+SsclzLbqGQeZDUQVz26wp1lZLdaU Y4LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UP7SL7grh8pY0W8Sj4i0+eIen9AAWcvTpps57Rhi1w0=; b=TVcOXvpDMyR6zssO83gT+b9a91CRu42ZeFXxWJfFAB5P2MABwvR5UJhwKUAWHxxr2l EfJknoApDU4d81pO3AoQkZh8Fqrl9XST9nlAaG5ivaVeiRyPjvrvjtKS2ZcTY9f5pt4Q U//QDyIcGGYKCBJVikjEyjTgHTDZCn40nxDZsfztRpR2psGO0t3rr6yyc2H7NkDLY4/j 2lwYUSDSglGXTeci9knt/Ouo9jI2Fn9zEfobszFAqzP+pdEgvI+Dg5tSjeONZv7aLQCo R/TkpKR7Ky1VY+B5qLaRbCK/kVGCglyknFI8y5IlG7bSB79gJfd+zedBUKuKP0U4tYkB Rtzw== X-Gm-Message-State: AOAM530SAEje16I+7l/nEOZTKCZU8w1sodju3n2vYl9yQ+wem+kh0hhX Pnz0drq3ZmI+42Si9utm/O+4XA== X-Received: by 2002:a05:651c:b24:: with SMTP id b36mr3625928ljr.223.1628788623069; Thu, 12 Aug 2021 10:17:03 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id o1sm320043lfl.67.2021.08.12.10.17.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Aug 2021 10:17:02 -0700 (PDT) From: Sam Protsenko To: Greg Kroah-Hartman Cc: stable@vger.kernel.org, Wesley Cheng Subject: [PATCH 5.4 6/7] usb: dwc3: gadget: Disable gadget IRQ during pullup disable Date: Thu, 12 Aug 2021 20:16:51 +0300 Message-Id: <20210812171652.23803-7-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210812171652.23803-1-semen.protsenko@linaro.org> References: <20210812171652.23803-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Wesley Cheng [ Upstream commit 8212937305f84ef73ea81036dafb80c557583d4b ] Current sequence utilizes dwc3_gadget_disable_irq() alongside synchronize_irq() to ensure that no further DWC3 events are generated. However, the dwc3_gadget_disable_irq() API only disables device specific events. Endpoint events can still be generated. Briefly disable the interrupt line, so that the cleanup code can run to prevent device and endpoint events. (i.e. __dwc3_gadget_stop() and dwc3_stop_active_transfers() respectively) Without doing so, it can lead to both the interrupt handler and the pullup disable routine both writing to the GEVNTCOUNT register, which will cause an incorrect count being read from future interrupts. Fixes: ae7e86108b12 ("usb: dwc3: Stop active transfers before halting the controller") Signed-off-by: Wesley Cheng Link: https://lore.kernel.org/r/1621571037-1424-1-git-send-email-wcheng@codeaurora.org Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc3/gadget.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) -- 2.30.2 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 5f2e4a2638f5..78a4b9e438b7 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2030,13 +2030,10 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) } /* - * Synchronize any pending event handling before executing the controller - * halt routine. + * Synchronize and disable any further event handling while controller + * is being enabled/disabled. */ - if (!is_on) { - dwc3_gadget_disable_irq(dwc); - synchronize_irq(dwc->irq_gadget); - } + disable_irq(dwc->irq_gadget); spin_lock_irqsave(&dwc->lock, flags); @@ -2074,6 +2071,8 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) ret = dwc3_gadget_run_stop(dwc, is_on, false); spin_unlock_irqrestore(&dwc->lock, flags); + enable_irq(dwc->irq_gadget); + pm_runtime_put(dwc->dev); return ret; From patchwork Thu Aug 12 17:16:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 496041 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:396:0:0:0:0 with SMTP id y22csp595504jap; Thu, 12 Aug 2021 10:17:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxkQmWhP6TAI47Inwx4PH1e6DBQ0TnvuOOHIPUojDnOiCr6c7521QKt7Jsosy4x9Mhovzl6 X-Received: by 2002:a17:906:769a:: with SMTP id o26mr4764045ejm.18.1628788631742; Thu, 12 Aug 2021 10:17:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628788631; cv=none; d=google.com; s=arc-20160816; b=sS/jleAVi1j3aALbLyQCQpNtqXn7l55xrtpqhab3hgNWc76SVmruKTzR/sZWZIiKWN 0d/qzFNuDyBhsSt7tHKFhCK2T/2TTaMQr8zASs+2s8OlhFKTHaXlR0G/kIKhG/IWjOMh DiyVeI235w5VkOB2bcdf9DeIInnPPkqmvN5lZESDm7fkOaI8hhuAhAzfKaUTSqZ/mES1 N9mxSHMyoYks1nkFVti2alYK7jP2/vJrvREjh0bp0AuUQmu21jvfY+gnO0BVWM/1EjVO /lo5qxvs+UIadyuE3YkRZxhkh2aNam7QCFXZazk3jtiPVY8weuQqjxHUvX2rTxvkYGQ4 SVPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LjrU9k0cXOS1w5BQXAwU+RejY/N5vivrkzc/UFmCECk=; b=hRuWTXW90Vh++6t9zrUlNbjCmX135/PLaSMGfZayTDNXkD7w674Jlt00gsapKo0ibC iupAUI3RliiQ9D7vy3FDsoM9LIAtngTCovaJgkrAv+4tUobRwe8OTYeKKF0gjeoDtb3R 4qOvt8qCTXsrRFa5hNJjAOdCg/GRu90DFdPLfvuA3OiTy684lbS/FJ9VtpBaJ/tkYMWz QqTLUwmJQqU2MARGyZkW981MG29+a4RlrlYfE0B1/zuNT1jEX9Px2Rj2J5TCp+a9MTJO jJaSXLl0PLtCLg1ceheAbVlNlBlHiKT8IS7WAunVoISCRuBkVSZhCOHSQpHtFukPKJTj tOyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=vXvZTM5p; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a3si3226044edy.351.2021.08.12.10.17.11; Thu, 12 Aug 2021 10:17:11 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=vXvZTM5p; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235327AbhHLRRc (ORCPT + 12 others); Thu, 12 Aug 2021 13:17:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59322 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235044AbhHLRRb (ORCPT ); Thu, 12 Aug 2021 13:17:31 -0400 Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 55787C061756 for ; Thu, 12 Aug 2021 10:17:06 -0700 (PDT) Received: by mail-lf1-x12b.google.com with SMTP id t9so14793267lfc.6 for ; Thu, 12 Aug 2021 10:17:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LjrU9k0cXOS1w5BQXAwU+RejY/N5vivrkzc/UFmCECk=; b=vXvZTM5pSgzHzFrb56dPXE5fgDfw8i5/bcwGF/ZwWb4JEClBcZAe2v9pLNMa3hRCVN Aaod/ovXAexrExrElPgAWlAAHUglUkkwFAUmR5qsrSucybv+8p6z/DJOUEeS7vQSoreB EvM+gPAg0GftW98ZOrhHaTVwJNeQhomw76bJCCmSUYsl9RkvkCU5B2pI2GdmOENLLkAM G6MrHR5yKbDjLOgU9rTsp+oRlNTj7/CW/yruhlXBcp6BsPtRX3jLtYx1VrmWlAt237o1 TgCnadyKwuuwwcFGYflx+QJfocS/6MpB4DBOa0CT9JePBypms9TnkHVBaw9edXp/2peS Wacg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LjrU9k0cXOS1w5BQXAwU+RejY/N5vivrkzc/UFmCECk=; b=YFu9yi5eFfTepabfdP77mv+7/9XyCUUGaPnPPIlUx8lnGrm3v3jyHtJwbybvlNvj/V rX4OXxI724LQe+yN9WE2N5lKcYm4u4bHjfUVToSQdfnLghPnDWdapDCSNlpZgKoDsxu+ Cdl6B9jSnvNW5ajxf62cg2w/kI19223/8Vcu4DVGyGTqFGoM7DWAYdgeQkOVyID5DwaF gYI9Dm9Qgu12P5cx5QYne2s7bJKCCA0cZF5fEYGpuSk4NKqe0L9bkTyxPaTANGqERuHA cVR0KN3oQ/dIdtyLpljFoPYk6TAcO2FcZpVG1ubih7vJ8h6UabIJZ2zquYKGCKmVLTGn PKEg== X-Gm-Message-State: AOAM5312jUiEIBRVemjoINHzrD0bujLF3gdIs+oUflrCEXjadn8PBCgO 4sYgdZigjrRXbakkM6l0zvHBUg== X-Received: by 2002:ac2:4852:: with SMTP id 18mr862714lfy.214.1628788624697; Thu, 12 Aug 2021 10:17:04 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id u10sm316738lft.252.2021.08.12.10.17.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Aug 2021 10:17:04 -0700 (PDT) From: Sam Protsenko To: Greg Kroah-Hartman Cc: stable@vger.kernel.org, Wesley Cheng Subject: [PATCH 5.4 7/7] usb: dwc3: gadget: Avoid runtime resume if disabling pullup Date: Thu, 12 Aug 2021 20:16:52 +0300 Message-Id: <20210812171652.23803-8-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210812171652.23803-1-semen.protsenko@linaro.org> References: <20210812171652.23803-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Wesley Cheng [ Upstream commit cb10f68ad8150f243964b19391711aaac5e8ff42 ] If the device is already in the runtime suspended state, any call to the pullup routine will issue a runtime resume on the DWC3 core device. If the USB gadget is disabling the pullup, then avoid having to issue a runtime resume, as DWC3 gadget has already been halted/stopped. This fixes an issue where the following condition occurs: usb_gadget_remove_driver() -->usb_gadget_disconnect() -->dwc3_gadget_pullup(0) -->pm_runtime_get_sync() -> ret = 0 -->pm_runtime_put() [async] -->usb_gadget_udc_stop() -->dwc3_gadget_stop() -->dwc->gadget_driver = NULL ... dwc3_suspend_common() -->dwc3_gadget_suspend() -->DWC3 halt/stop routine skipped, driver_data == NULL This leads to a situation where the DWC3 gadget is not properly stopped, as the runtime resume would have re-enabled EP0 and event interrupts, and since we avoided the DWC3 gadget suspend, these resources were never disabled. Fixes: 77adb8bdf422 ("usb: dwc3: gadget: Allow runtime suspend if UDC unbinded") Cc: stable Acked-by: Felipe Balbi Signed-off-by: Wesley Cheng Link: https://lore.kernel.org/r/1628058245-30692-1-git-send-email-wcheng@codeaurora.org Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc3/gadget.c | 11 +++++++++++ 1 file changed, 11 insertions(+) -- 2.30.2 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 78a4b9e438b7..8a3752fcf7b4 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2018,6 +2018,17 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) } } + /* + * Avoid issuing a runtime resume if the device is already in the + * suspended state during gadget disconnect. DWC3 gadget was already + * halted/stopped during runtime suspend. + */ + if (!is_on) { + pm_runtime_barrier(dwc->dev); + if (pm_runtime_suspended(dwc->dev)) + return 0; + } + /* * Check the return value for successful resume, or error. For a * successful resume, the DWC3 runtime PM resume routine will handle