Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp309901pxj; Thu, 20 May 2021 09:49:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy7GHACqmipLBPa/mo9HAdtaep/h24iHvwcHCuLUym0oN4AFsvwV6TJVefBDx6yi3eft1wC X-Received: by 2002:a05:6402:2044:: with SMTP id bc4mr6187092edb.282.1621529360941; Thu, 20 May 2021 09:49:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621529360; cv=none; d=google.com; s=arc-20160816; b=0FY2XHe45RiYFbVf7JptWpxZtfxwxf2QRvhR1+yvHzEFWR72iACXgvFTHzh7prX0Ic JWwuqR4Y2A89lOgMwnx5O4QD7DVRxiP/pShgws4pcZqOk6JoQM6fKyVd/pDWvatvgIav 8362p0H/ysVjAZ+Yml+BWqAICFbEhnDRwEbK4toVpN46m1ZuXH+ivtx5ljmv6yTwW7Kq 7ePzHi2NZx4D6dF1ue0Mp0SvSr3leGwpkESlGNkrYhwGG44nUw5VzVm42PNe2M6MZJ2z El8Ldm8nmjSHiBo/qMEeLsBTiSpzb11vW+1j07lNn/qLN3EsgqIV+ngjIBoR/4BjCa+u d1kA== 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=44sbHUV62HbD1YIsEJrY3KcmBtYAJJJoMXq8GdBkzZY=; b=ASDYBoIMoKyGvC2Kt0RkvvCoo22VdEGCaGmLGJESBgayQJBoeXZLrrzCTkd+otP4Xs 20elDES4VgoT4a4gBk3TprUkZH0sGuoZhLIsH7mGQAIm54Y1HpQWuRbXMo48/0yGz5LP 6+w4Pl1eWbF2lEPtd2A8cDexaF3/BpSG7uaKyc7i9WHRuqHwqhE76ZkuwWaB7BDnRocO BNaCcw41HfRnCLHitM1ALpt5LruBTQ4nmDlAk1Z4DZhiZz35mPtxcj93dQ3eC9wPfFWh 60gxuZzBifMAVrsc6H/UQM7o+zFlQ5C8ICDV36MIcAoVWkEIiWB1osU+wgu3GeVL1Xoc w2zQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=lxG6XLfQ; 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 g17si2543867ejr.268.2021.05.20.09.48.57; Thu, 20 May 2021 09:49:20 -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=lxG6XLfQ; 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 S233245AbhETJu0 (ORCPT + 99 others); Thu, 20 May 2021 05:50:26 -0400 Received: from mail.kernel.org ([198.145.29.99]:47338 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233654AbhETJr6 (ORCPT ); Thu, 20 May 2021 05:47:58 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6B2976135B; Thu, 20 May 2021 09:34:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621503267; bh=ca9ZHtyAciHSyHADWAfEJEy63yVnJIlg3h2m1XjrPsk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lxG6XLfQvQT8yAOeWMzfc9V8rkRvMdW1uiBo3ff7VteevtYM6MHfeEnBKccz0pPMj lsTd2zc501S8xDAZeyUhdfx/HRJ0Mhnf2+FHrin1Zx59qj24BRV2vhuJrIXgDKcikm VYoaz6cpQPf3RisDJaPZvQuPzNxjtpWXklRkCy7w= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Felipe Balbi , Thinh Nguyen Subject: [PATCH 4.19 110/425] usb: dwc3: gadget: Fix START_TRANSFER link state check Date: Thu, 20 May 2021 11:17:59 +0200 Message-Id: <20210520092135.066273530@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210520092131.308959589@linuxfoundation.org> References: <20210520092131.308959589@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); @@ -1674,6 +1673,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: