Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp461577pxj; Thu, 20 May 2021 13:30:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxcSkEzOCabMMZKsqDUZPvjHHJSrTsgNdr43ZOWUCebsJ9uQ9bFoVR5gpC70Mf7CP3pjTbz X-Received: by 2002:a02:c73a:: with SMTP id h26mr8553128jao.95.1621542659388; Thu, 20 May 2021 13:30:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621542659; cv=none; d=google.com; s=arc-20160816; b=c1BhTA2NOuB9F1BrJSL2SrznzlNwi+oCGmwIbP4trx2fiNgkotLbIsOumwAMqB021d UxMZpFyHkmFitUGh9KssLr7lGqOVwO7l0Q6Fd9KNGY8bX72ssJKj2Uvns7P3XvLJPxai 7fRoIh+yfR125PZ16SRXTvaxZbOHgi+/HMzSPbdVFGVQNPuEw4unUgbFyrkipqHOQL2e ruAXoU+oJQQWAq1RxVEpm0SFa+n9sJau1G/U4b+oH0O6cZMtrJk7ujijJ4QgwrdDJJVF yt3Q0JqXnPLiuAM1luyYSbX95yjaWxMKEqp30WFBpFn7sZzS277k0YEGZsu3ClXk+fHW RQ3A== 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=T9Zd2Zr8XMPiNJ22nAMnkDzq0TI7gvQZRxCsT3ZSPCc=; b=XbpYed4hjP+/8XnzeYB3wqaRzXnPaugMcCL43zREFNbRgn6mSkBsLN9ruxXOFENFUn u0s+LzOxRZFEDt1WsfdNcgOKM7Y9w7UPGdgNWLmBScdCn3slmzFW32mngJrlTmEytWO6 9R9arsGpchasAaCmdM8sILA6YysW8IO3Jq5kUtVOEivTDzlm2hCTBw8ALLZp+oZMD+Ls GfqxOqs3oAr5JxNmNkqeEeW0m1SQGaVpuL9c4LJRJ4tH6e3XmryLP3fBohsVOW1NDjTu ci7CxT3fqJehdA727j5pLvxXG7Rrpi7c8uwyYTXVytPECYCmdkxkfTCiNvSc0C/vbLRY wr/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=IhL+HiKS; 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 x14si3096837jat.74.2021.05.20.13.30.46; Thu, 20 May 2021 13:30:59 -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=IhL+HiKS; 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 S238504AbhETKzL (ORCPT + 99 others); Thu, 20 May 2021 06:55:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:42054 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238328AbhETKjp (ORCPT ); Thu, 20 May 2021 06:39:45 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9833961C7E; Thu, 20 May 2021 09:55:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621504530; bh=4+NpStLaTBZCx2bdwMaGYPXOVhxWz6xLxkKaJpEYUIg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IhL+HiKSkQ+FzDXNx2fhlRWCvGsp0tdH3m8YaMM1pP+RJMLsJD91ROoD028p/qRmS NTJ3q/qgl05cGLVcoqzsNtp98Jod3ASSTAFSw50RjxDQBfoW+vpIK244p5LxRiwT7m 4HBcPnKsm5Tz0+5gZv8y37DxFlz4uY+Tm9ih3Y38= 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.14 288/323] usb: dwc2: Fix gadget DMA unmap direction Date: Thu, 20 May 2021 11:23:00 +0200 Message-Id: <20210520092130.087760061@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210520092120.115153432@linuxfoundation.org> References: <20210520092120.115153432@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 @@ -166,6 +166,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, in frames or microframes. @@ -214,6 +215,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 @@ -413,7 +413,7 @@ static void dwc2_hsotg_unmap_dma(struct { struct usb_request *req = &hs_req->req; - usb_gadget_unmap_request(&hsotg->gadget, req, hs_ep->dir_in); + usb_gadget_unmap_request(&hsotg->gadget, req, hs_ep->map_dir); } /* @@ -1213,6 +1213,7 @@ static int dwc2_hsotg_map_dma(struct dwc { int ret; + 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;