Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp682961ybh; Tue, 10 Mar 2020 06:24:43 -0700 (PDT) X-Google-Smtp-Source: ADFU+vv96PqmVOfJIWI3YerP3GPeh5mvoTZYEply1KNO7OJ3sMShBHp8B00JVN0OX7amIzm8f/fq X-Received: by 2002:a05:6830:2105:: with SMTP id i5mr16307136otc.141.1583846683145; Tue, 10 Mar 2020 06:24:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583846683; cv=none; d=google.com; s=arc-20160816; b=gQXEJTDLHLiIoZ9BSbK0ymWmVTDs1TOrOOHi/EVxPRnQd6czwy8O2UFmj3S5ckPLcu 0zs5x0o2At4hhfTy7J8DZZfejt+0Xi65LBeWAolVRnl2aEZ7WizmHK74Rs1+2Yzj3q5A JFGzmKmbom/0VKkAP/loqsXCa3wrsEMoEXwZrtkfea8gCGo54LbNe2qTpXf5zNHuH9CG W1RoOah9T2XlFrt0eFFCuk9ICt0MBDCzY0kghHWzfzSHfHW4lxNDqyRxdt+/Uwd0kTz0 LUj7UdaHO7ByDoL07rqLMZuahC7+Jh386CLAEujiNEhhlB/wYr7noSt6gS0kddA+F23z +Lxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Wud4+mfjkN+/xmgktTetj7DmI+Ez34wu35bVauOE0+U=; b=TVVIlsW7YMwCmZjvgCDtLbP5KHUFhTe0PIgZip2ilHUOkhmkQ3TQy4FQPZNF68lyCt 8E++I9H0zd6PNkvCZIGMUn0ARMa8vsTlBqXGA+r6GrL7Wj+iQfHGJiC90eGb/1ySYDTy MEWQlzy8C7CEUmwgWsx8bzpU2F6kurivEGdETkifEzuBDO/mV+iFTMlAzeh975kJkkH/ izYNvBGy7PShKNqd3nQfMz7aZddbmBhMfKaDNNStxklo7jJmcPcVEvUZKcUz73BqB6PP yvh6O3/lfESZGk8BgpDMd8X5I0nv3zLV8DVl5fKnRhu9C8fdw3gUKOv42a7NpRqAF2Ya 2jNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wI1RNab9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a59si8326180otb.8.2020.03.10.06.24.30; Tue, 10 Mar 2020 06:24:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wI1RNab9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729801AbgCJM7S (ORCPT + 99 others); Tue, 10 Mar 2020 08:59:18 -0400 Received: from mail.kernel.org ([198.145.29.99]:39604 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726436AbgCJM7O (ORCPT ); Tue, 10 Mar 2020 08:59:14 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1CF8F2253D; Tue, 10 Mar 2020 12:59:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583845153; bh=wGtPODP5oRTLsKphsGUQeHu6ALiA2GFwsmRudaHXPGw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wI1RNab9PXHedPqwqOtoDgkaa1PsW5+VfnT/HA5YuWWqDzcSdtM+pheU1iizynQaX GDY9VAhAiEfn06/DFaRSUj1ehjSKKz/BGjiKttAc4qTNH6b3g9+aAT/F5RSJzabI3s ILzXihIARKB13jb+ALN3lOdXronFpx2NXB6sWg2o= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Peter Chen Subject: [PATCH 5.5 074/189] usb: cdns3: gadget: toggle cycle bit before reset endpoint Date: Tue, 10 Mar 2020 13:38:31 +0100 Message-Id: <20200310123647.093371797@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200310123639.608886314@linuxfoundation.org> References: <20200310123639.608886314@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Peter Chen commit 4bf2dd65135a2d7fe202f7c10d65b51bcf645ac6 upstream. If there are TRBs pending during reset endpoint operation, the DMA will advance after reset operation, but it isn't expected, since the data is not yet available (For OUT, the data is not yet available). After the data is ready, there won't be any interrupt since the EP_TRADDR already points to next TRB entry and doorbell is not set. To fix it, it toggles cycle bit before reset operation, and restores it after reset, it could avoid unexpected DMA advance due to cycle bit is for software during the endpoint reset operation. Fixes: 7733f6c32e36 ("usb: cdns3: Add Cadence USB3 DRD Driver") Signed-off-by: Peter Chen Cc: stable Link: https://lore.kernel.org/r/20200219141455.23257-3-peter.chen@nxp.com Signed-off-by: Greg Kroah-Hartman --- drivers/usb/cdns3/gadget.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) --- a/drivers/usb/cdns3/gadget.c +++ b/drivers/usb/cdns3/gadget.c @@ -2152,11 +2152,21 @@ int __cdns3_gadget_ep_clear_halt(struct { struct cdns3_device *priv_dev = priv_ep->cdns3_dev; struct usb_request *request; + struct cdns3_request *priv_req; + struct cdns3_trb *trb = NULL; int ret; int val; trace_cdns3_halt(priv_ep, 0, 0); + request = cdns3_next_request(&priv_ep->pending_req_list); + if (request) { + priv_req = to_cdns3_request(request); + trb = priv_req->trb; + if (trb) + trb->control = trb->control ^ TRB_CYCLE; + } + writel(EP_CMD_CSTALL | EP_CMD_EPRST, &priv_dev->regs->ep_cmd); /* wait for EPRST cleared */ @@ -2167,10 +2177,11 @@ int __cdns3_gadget_ep_clear_halt(struct priv_ep->flags &= ~(EP_STALLED | EP_STALL_PENDING); - request = cdns3_next_request(&priv_ep->pending_req_list); - - if (request) + if (request) { + if (trb) + trb->control = trb->control ^ TRB_CYCLE; cdns3_rearm_transfer(priv_ep, 1); + } cdns3_start_all_request(priv_dev, priv_ep); return ret;