Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2468144pxj; Mon, 10 May 2021 03:50:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJydaYk4dqmlC8UwnY2HgXIi9QQ/eUtyV+VyWe+PDSQr7XL9DcVvTZ7bSnC9H7Mui330B88T X-Received: by 2002:a05:6602:2d8d:: with SMTP id k13mr17560303iow.121.1620643818366; Mon, 10 May 2021 03:50:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620643818; cv=none; d=google.com; s=arc-20160816; b=CGXO2lFSGMyFXoVdrksfSQra1sl3s/kCvVVOEwiTa/spL1wGP1va71GunZ1IEmjPSj mRuC7qe52vQBmhL7ENwDq7/p4VddVAgr3s1ubCOty3pbcNtJlBi7+/KjjgtPO6QfbNM3 Ah08pIY/KqHf32+2aPsg1iZPNK/ipbfJCPPFjNZzGGzysFCtQzyJ+kFokVdB17a3rGsp MmbR9AbD9AxrJKuZ1bGQsO4u8/Q4HqThLoBCKh7e9XZlnidJmvMMb7v73IBshjbtLXGU Hbkv3Q2EdAx3S9ripVst+sC3xNWzt0IOLyA3UKRK2+CP4hsi8Xm/qaa62XMbwPrm7O7x ffGg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/Glx0kNgU+BcPgnP9i2iKnI+1UbPXocy6VOzixFsKaU=; b=VlqVknO/cObXwnO//UQacXBk/sKD5fRI68/DfpRFfvX+nBD6vpbZFwFSeDDZy3DK32 hm+AMiivoiO6Sqq4FoR4jdqkaT0riU/PXzG49Jviw6olfmXzcKG1seAmyCcGzomY03Ji 40ge4ylg0rhhYbqsr5ZQxnW/OPhQ1VXWK9wB2WPqJl9kjQaxBCEGsn4Dk43HM2fDfNaY KsySlNzzP7HyWSkkrUe0ZRm4VSQ2VhvggK9jKW0YwF8qohD954NYQJ8Wwol8Jn0Y3Rp5 fJNWGVQqD+g2AOYaWPceieaiu1U5kFfoRDp7Znic1Zz3Z+8j+3BUoRMHR8H0cLkV0goT hkOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=c6lJPwfm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u11si6784320ill.6.2021.05.10.03.50.05; Mon, 10 May 2021 03:50:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-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=@linuxfoundation.org header.s=korg header.b=c6lJPwfm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233220AbhEJKtw (ORCPT + 99 others); Mon, 10 May 2021 06:49:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:48330 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232357AbhEJKjp (ORCPT ); Mon, 10 May 2021 06:39:45 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id EFD6E61953; Mon, 10 May 2021 10:30:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620642634; bh=ibVnBzgSzFXZ8BDNUFeMqNbg73fRLw1pxvE+LdU2vys=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c6lJPwfm/vulCigvynJsUvTTkTZu6ADzYKePNXFF0PuiFJx59dLc3mQDgBeUrxfUH TEAi7v88tzSkS1bzVpXA3iR5Zab0OEs5cnt2wYOAOvBREkIOZGNXALkDUhUDzeegTC JfzJ8zvEvHkSY3YyYzfiJ8hw4lzThHs85V/9wIYQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Felipe Balbi , Thinh Nguyen Subject: [PATCH 5.4 175/184] usb: dwc3: gadget: Fix START_TRANSFER link state check Date: Mon, 10 May 2021 12:21:09 +0200 Message-Id: <20210510101955.854977660@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510101950.200777181@linuxfoundation.org> References: <20210510101950.200777181@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thinh Nguyen commit c560e76319a94a3b9285bc426c609903408e4826 upstream. The START_TRANSFER command needs to be executed while in ON/U0 link state (with an exception during register initialization). Don't use dwc->link_state to check this since the driver only tracks the link state when the link state change interrupt is enabled. Check the link state from DSTS register instead. Note that often the host already brings the device out of low power before it sends/requests the next transfer. So, the user won't see any issue when the device starts transfer then. This issue is more noticeable in cases when the device delays starting transfer, which can happen during delayed control status after the host put the device in low power. Fixes: 799e9dc82968 ("usb: dwc3: gadget: conditionally disable Link State change events") Cc: Acked-by: Felipe Balbi Signed-off-by: Thinh Nguyen Link: https://lore.kernel.org/r/bcefaa9ecbc3e1936858c0baa14de6612960e909.1618884221.git.Thinh.Nguyen@synopsys.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc3/gadget.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -304,13 +304,12 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ } if (DWC3_DEPCMD_CMD(cmd) == DWC3_DEPCMD_STARTTRANSFER) { - int needs_wakeup; + int link_state; - needs_wakeup = (dwc->link_state == DWC3_LINK_STATE_U1 || - dwc->link_state == DWC3_LINK_STATE_U2 || - dwc->link_state == DWC3_LINK_STATE_U3); - - if (unlikely(needs_wakeup)) { + link_state = dwc3_gadget_get_link_state(dwc); + if (link_state == DWC3_LINK_STATE_U1 || + link_state == DWC3_LINK_STATE_U2 || + link_state == DWC3_LINK_STATE_U3) { ret = __dwc3_gadget_wakeup(dwc); dev_WARN_ONCE(dwc->dev, ret, "wakeup failed --> %d\n", ret); @@ -1862,6 +1861,8 @@ static int __dwc3_gadget_wakeup(struct d case DWC3_LINK_STATE_RESET: case DWC3_LINK_STATE_RX_DET: /* in HS, means Early Suspend */ case DWC3_LINK_STATE_U3: /* in HS, means SUSPEND */ + case DWC3_LINK_STATE_U2: /* in HS, means Sleep (L1) */ + case DWC3_LINK_STATE_U1: case DWC3_LINK_STATE_RESUME: break; default: