Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp798903pxb; Tue, 3 Nov 2020 12:51:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJxf1YPItd6B4H6sy0xSTnUAV+/YZQiibb8dhRi3CdH65/lz3tLqiKKp0Z+9M6kC/+ZfAgLv X-Received: by 2002:a50:d615:: with SMTP id x21mr22104749edi.200.1604436703693; Tue, 03 Nov 2020 12:51:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604436703; cv=none; d=google.com; s=arc-20160816; b=VaViPBmTFyCQ9qHvFY5xwUKB9T+/P9zxhUsGsM7NMCvJH1yvPw6i6EuRqkDQwT4NKk mA1dMEWrlNC6Six6oz4wfmxev6AvxtHfEOAtxRYdGtxxXNwVjCwJkBHZ+hvShE9AnNYH eZqwmisD6njuDFeVCjc7ZQ4CbRJ4tQGBWT0ZMeqpTIliajWSQzVyN2aMy6U7tpAmw/cE T8OMS+qP24FJ6sfgRio8G+M2K/h7YBigOei46SLW9BK1pC/ybOuUvSyCl4F2ETln37OI 3cng74TBb9qx1rUMKj34G5uEFip1KF3AwPIvxfIB8Xh7t62gIJHKQzhmCpLzHyuRt6T4 sgiA== 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=7b7aCue6ZEwgCTWZQnBuJBTGOc7ywEdPSLtzQ5GjwPM=; b=Pk5SWOwPYzNWs+IVzf1xEUwxjmsmZ8xs9KyOwG5zEDyCN6VqXPTdB7k5+2Bw78Z20O mFaJkyIf+cz/ioqEI/5arotNJ5d128n03UOsDM2fw1BPD4c4Ew4CsPUv7VfiSPOE9t8g MqINFKvY3UcWWTwp+9FxDDZKIpMZVPSWnZPJcxizXRI4FsGVaKxQKEX4S4NmMiHdb9yG f4r7kyCgAk64hejUoB2OUWLVX+rF8rpZc7Ftk8tKcsjRtXRyhoRsQRhmdnpZ3LVhYjLX ARZSDm9rYENt8Mgwoy8ERp+X9i1076jgOglqL+O4XGip+6/HzYAfhFa3gosRkmA8r6KQ /mHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=TyK3qJJN; 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=fail (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 y6si14048396edm.295.2020.11.03.12.51.20; Tue, 03 Nov 2020 12:51:43 -0800 (PST) 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=@kernel.org header.s=default header.b=TyK3qJJN; 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=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730540AbgKCUq5 (ORCPT + 99 others); Tue, 3 Nov 2020 15:46:57 -0500 Received: from mail.kernel.org ([198.145.29.99]:36780 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730006AbgKCUqz (ORCPT ); Tue, 3 Nov 2020 15:46:55 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (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 78DCC20719; Tue, 3 Nov 2020 20:46:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604436414; bh=ETAY37V9+jSoGTqnl9UcgPunUWhPQ0cJvaAKy8DAllg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TyK3qJJN31RpE2WvSoVmNisRPqflDXFiqaGFiFJd76Y1ZbvdELaNN4tjBDTpryBwZ vQU1i12U/xWvt9Rf/0bNyeZ4rbp4TMkNB+bg+edRibbDhytBJ/7fGCLKJgZzdXpl8b QRJvaHhBePpVpdc8uGdUgHRuKzNKXE24OXxKssFM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thinh Nguyen , Felipe Balbi Subject: [PATCH 5.9 240/391] usb: dwc3: ep0: Fix ZLP for OUT ep0 requests Date: Tue, 3 Nov 2020 21:34:51 +0100 Message-Id: <20201103203403.200683135@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201103203348.153465465@linuxfoundation.org> References: <20201103203348.153465465@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 66706077dc89c66a4777a4c6298273816afb848c upstream. The current ZLP handling for ep0 requests is only for control IN requests. For OUT direction, DWC3 needs to check and setup for MPS alignment. Usually, control OUT requests can indicate its transfer size via the wLength field of the control message. So usb_request->zero is usually not needed for OUT direction. To handle ZLP OUT for control endpoint, make sure the TRB is MPS size. Cc: stable@vger.kernel.org Fixes: c7fcdeb2627c ("usb: dwc3: ep0: simplify EP0 state machine") Fixes: d6e5a549cc4d ("usb: dwc3: simplify ZLP handling") Signed-off-by: Thinh Nguyen Signed-off-by: Felipe Balbi Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc3/ep0.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -942,12 +942,16 @@ static void dwc3_ep0_xfer_complete(struc static void __dwc3_ep0_do_control_data(struct dwc3 *dwc, struct dwc3_ep *dep, struct dwc3_request *req) { + unsigned int trb_length = 0; int ret; req->direction = !!dep->number; if (req->request.length == 0) { - dwc3_ep0_prepare_one_trb(dep, dwc->ep0_trb_addr, 0, + if (!req->direction) + trb_length = dep->endpoint.maxpacket; + + dwc3_ep0_prepare_one_trb(dep, dwc->bounce_addr, trb_length, DWC3_TRBCTL_CONTROL_DATA, false); ret = dwc3_ep0_start_trans(dep); } else if (!IS_ALIGNED(req->request.length, dep->endpoint.maxpacket) @@ -994,9 +998,12 @@ static void __dwc3_ep0_do_control_data(s req->trb = &dwc->ep0_trb[dep->trb_enqueue - 1]; + if (!req->direction) + trb_length = dep->endpoint.maxpacket; + /* Now prepare one extra TRB to align transfer size */ dwc3_ep0_prepare_one_trb(dep, dwc->bounce_addr, - 0, DWC3_TRBCTL_CONTROL_DATA, + trb_length, DWC3_TRBCTL_CONTROL_DATA, false); ret = dwc3_ep0_start_trans(dep); } else {