Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp623832pxj; Thu, 20 May 2021 18:13:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy1M2kPgdNnQ00pw44jhxU/hGBHxEYUIDq/1G6CGHTByY41CZYropY5U3n0a7Um1DxaKpTy X-Received: by 2002:a17:906:1496:: with SMTP id x22mr7507745ejc.419.1621559634629; Thu, 20 May 2021 18:13:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621559634; cv=none; d=google.com; s=arc-20160816; b=AKDtu/toFiEqHsyp53uDP8nxIdkH0I1qoUnt9+jxWf5ghMgcO53e5/VXfoANi6EUiB p/slTkB8iGpXHpkU9hIIC9jDM9XJgGofyu49NfXBSugcwa12RGlyg4kwEq4Uc/e47sUX LngC47P9XN6T/Gmf3w8fG00obiaIvDUOX+HDtGP9RSTZw73brJ3s0jceufZ4ujz8QkC8 Tlv2lN9E/YRAEiH7HPCNSMiTG7+XYPVQH1mk/VhRpeseHpcUID81vxGJYqesltEQbpsr bb0IdYAvVXL+JaogbyjJvhp2onsX2eTlg+/24uW1Mu2qEdFxcfXTIVOfM86PWN4F4Au8 v6KA== 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=2DUZx3IXhsPmSG0J5QUrrAyx4hT0BufZNODXlB4Q8JA=; b=Etzw+nxE3w9f+ISbeJSv6Fuf9GnfOijg0SeWvTU2BZ32YRJ409eZ5byw4xZFg6IyTI DYhoE6MLUl0s4uSFF252nVsHcBAfXRJXMLxDnrOxEnPrM2rE1/O5T5UIjjdoUuOXTefz 5ubuDZZ/sgihg2or/tczwurzvnQkc48Wb8nRxpAjKF3tGUv94iSWcjj6BtHNQBXruIQr 6YhJpXWmiqrwXOrxu9PdAKyFeJKU7vIA9229rDphsSGJd2Nmny120cZ5OUDU1v7EpsYA b48DSrgPwBdkrQeRLpjI6gtEPMh6PcncrebyAkjD6m+LW43QtDQgZoL5EOSDLnVOGVKh 1epg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=sSlepIdc; 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 m14si3840402ejr.683.2021.05.20.18.13.31; Thu, 20 May 2021 18:13:54 -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=sSlepIdc; 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 S242052AbhETLnJ (ORCPT + 99 others); Thu, 20 May 2021 07:43:09 -0400 Received: from mail.kernel.org ([198.145.29.99]:43468 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240268AbhETLW0 (ORCPT ); Thu, 20 May 2021 07:22:26 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2856E61D8C; Thu, 20 May 2021 10:11:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621505509; bh=H6MZjVASwCtguj2dAO7EkdaGVNKf0ux6U6hRtsvLc+0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sSlepIdcOesIkvVc0aA/1N3ggvn26lT/ejCVfRtEtU/o1AL8UrXPPC0To/6/W2Rem 9wpo5h1tEllWpJN7zFEiL12cjEt9QAlVFhMQjfTezMyLoQB+cKGDqZVMK+a9CK27RC +4GEtgTBxKNsKW60cE53eNX7HIVLhWBdL9/nDQQs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Minas Harutyunyan , Phil Elwell Subject: [PATCH 4.4 167/190] usb: dwc2: Fix gadget DMA unmap direction Date: Thu, 20 May 2021 11:23:51 +0200 Message-Id: <20210520092107.693295769@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210520092102.149300807@linuxfoundation.org> References: <20210520092102.149300807@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: Phil Elwell commit 75a41ce46bae6cbe7d3bb2584eb844291d642874 upstream. The dwc2 gadget support maps and unmaps DMA buffers as necessary. When mapping and unmapping it uses the direction of the endpoint to select the direction of the DMA transfer, but this fails for Control OUT transfers because the unmap occurs after the endpoint direction has been reversed for the status phase. A possible solution would be to unmap the buffer before the direction is changed, but a safer, less invasive fix is to remember the buffer direction independently of the endpoint direction. Fixes: fe0b94abcdf6 ("usb: dwc2: gadget: manage ep0 state in software") Acked-by: Minas Harutyunyan Cc: stable Signed-off-by: Phil Elwell Link: https://lore.kernel.org/r/20210506112200.2893922-1-phil@raspberrypi.com Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc2/core.h | 2 ++ drivers/usb/dwc2/gadget.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) --- a/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h @@ -144,6 +144,7 @@ struct dwc2_hsotg_req; * @lock: State lock to protect contents of endpoint. * @dir_in: Set to true if this endpoint is of the IN direction, which * means that it is sending data to the Host. + * @map_dir: Set to the value of dir_in when the DMA buffer is mapped. * @index: The index for the endpoint registers. * @mc: Multi Count - number of transactions per microframe * @interval - Interval for periodic endpoints @@ -185,6 +186,7 @@ struct dwc2_hsotg_ep { unsigned short fifo_index; unsigned char dir_in; + unsigned char map_dir; unsigned char index; unsigned char mc; u16 interval; --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -289,7 +289,7 @@ static void dwc2_hsotg_unmap_dma(struct if (hs_req->req.length == 0) return; - usb_gadget_unmap_request(&hsotg->gadget, req, hs_ep->dir_in); + usb_gadget_unmap_request(&hsotg->gadget, req, hs_ep->map_dir); } /** @@ -707,6 +707,7 @@ static int dwc2_hsotg_map_dma(struct dwc if (hs_req->req.length == 0) return 0; + hs_ep->map_dir = hs_ep->dir_in; ret = usb_gadget_map_request(&hsotg->gadget, req, hs_ep->dir_in); if (ret) goto dma_error;