Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp137362pxj; Mon, 17 May 2021 23:13:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyXhwepKT89Lnd2b3SIYLdnDHGEntKn53aFtviW/pRTfAo9U4T4FWnX4xwmDW3l2Y14gOlS X-Received: by 2002:a50:cc8f:: with SMTP id q15mr4972555edi.322.1621318425519; Mon, 17 May 2021 23:13:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621318425; cv=none; d=google.com; s=arc-20160816; b=Y0itP+og0ufTE3ZKBX+AEgZR1SmZ7XUnYORKVQjlnfBII8DSvULdaXy2OSvVvLXadM vg4AFeyTDmGytuWz6LXQvQYO/L33FUb36wsqS+uR4NbChMWGmHskpPKzCd3wUqVKOr1T DLgRIal6NO2+jnWpxqopKoz3xB8rpW8hPIULEuA0/nN1LouI20vjN0p4AxaJUPf2WM2X KC2vi94J8PXs6Twzbg3q5EKHLRTR0E0lGhHXnmqX8Al9ZhLb/0AjkL5eNxmky+GnYThi AoJfsAGCMuOpDDehrshVmsZCmDJkLH6wkZp6fswIrDYrGj8N1KvUFl3MYgERVp5wuL5V HNWg== 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=F3yGL+UIm2L53BQQE+0Laf1TJe5L0xe5PECgVrA/a7w=; b=KRe3pkG25dQQfp6ugJdU10QaO43XlxnxvJlcrqbtJ0q5kOm3au5ATc4egmvNwYa9mL hnHJ/xYDWCa93AcFX1tbNUGEsBYcx0mCi4x8VUKMV0+EX7i0JFdXls+I6WDagYj9VQo0 HUtycSqnKXUenkjmLukLHfZT0ZkkIFtO2C9iUU4WqHXOCJSML3HfKA4iN7Ot0OPqv7sE Lg3idda35T/zeCPA4fdBsr97TRPzZls2/rIvshyzB1UTrjASdv8lYilEjS6sQxVDpaqu MjJo+JeTnj1xqN9U7y5aFIcyHTarOYBQiuFHyD/QIMM5SmeYUN/5rEFKJmCZ+9upufgP SvVQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=cs9gMyFq; 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 r17si5293614edv.361.2021.05.17.23.13.21; Mon, 17 May 2021 23:13:45 -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=cs9gMyFq; 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 S240138AbhEQOsb (ORCPT + 99 others); Mon, 17 May 2021 10:48:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:50800 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241247AbhEQOkK (ORCPT ); Mon, 17 May 2021 10:40:10 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0192F61945; Mon, 17 May 2021 14:18:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621261126; bh=QKOQY0rDLrRV2h/d3hQ+p73SyJPmWV9nPG9rkGfSOsc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cs9gMyFqR1d7oNkCB7HCbvQYHjIKfXL+VwfhVpzXPsly4TVV1VeXuragtviRKWdyc F3Fqs4Kzusgo6+gxjmSRsyC0LW432senWECiYL0zoU9SfAi6NYSCo0raXNFSDje6Bz 7CTcrA8sFcxAqqOs176xTnPm0rjz7ALPx3dBXneg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Minas Harutyunyan , Phil Elwell Subject: [PATCH 5.12 311/363] usb: dwc2: Fix gadget DMA unmap direction Date: Mon, 17 May 2021 16:02:57 +0200 Message-Id: <20210517140313.112811618@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210517140302.508966430@linuxfoundation.org> References: <20210517140302.508966430@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 @@ -112,6 +112,7 @@ struct dwc2_hsotg_req; * @debugfs: File entry for debugfs file for this 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. @@ -161,6 +162,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 @@ -422,7 +422,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); } /* @@ -1242,6 +1242,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;