Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp5876188pxu; Wed, 23 Dec 2020 07:36:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJxXqVbBlhZzSo76tVK4hdLqQWg0Aq+TZtE6BNbl7n8ZpOC5WkL+Y7kIPge96v1zYvKVeKol X-Received: by 2002:a17:906:f153:: with SMTP id gw19mr25053488ejb.272.1608737804259; Wed, 23 Dec 2020 07:36:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1608737804; cv=none; d=google.com; s=arc-20160816; b=GdfrlORHT83WRDnR0HgQyQpJrCJDnmqpVfDe2DgHlhSzT7o0L+f+HjQE7AFM9vxXQP hX+ywtLawpmw3mQ6uePhX2qPdhaL+3LMDklYYokk68esX0p24te2kEsgvB+MzJnbUpYi G4dnJnAG8CIG2TGcQ3xbOu6teIVqPNveBdTWOKQXqr2R5lvHonm+p7RYZUA763A5IGmb xNTpj9UA+H8ki9Iac0Eyx7eA2RqOz59I5nSlTaMZmirtVVEtX6BVRekwS1PaLILB9uWu R4JjeQBjINfoPwxXj1DrhaQlqaTmRUGtC0XzVlnEJzWif9puEvXLGkiKOATywBBq+cRY WHIA== 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=o6mwqM7qV1zvCSmVtgMgFFoZRPgramPZ4XfDStn5/cc=; b=V5Mxuzm4tN/LwSippidBdHzAsGBG2ytc3igGasQfyU9HSq0lR/NethO5AXS9nqPkOQ DwpF2IvwYNkvD9ASvV5C8r/I4FIStIZHFzT1nCE5tPndS8rU/3Ll4pA9Qk3LO8vchlAN bwsaMbybQz4Cj0zDjYaFGbh/0YDqdUkop8v6HkWe2gl2qavxm0XuGK/ukNSypONdP1Ui iaCnxIn39D19VsF9XQnpKg+4P2X5IV/STm3zvT07r5bOVwGBQJPJJHejD+n6uElCg0e7 WmZQzRk1SfzXZS9G4LUXdT2PiknIMhzSNkMbUpURerKs/aext5jaqzrOOQ+lndlt5ets 2YDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=s8f3chXP; 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 n3si11966881ejx.102.2020.12.23.07.36.21; Wed, 23 Dec 2020 07:36:44 -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=@linuxfoundation.org header.s=korg header.b=s8f3chXP; 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 S1729025AbgLWPfG (ORCPT + 99 others); Wed, 23 Dec 2020 10:35:06 -0500 Received: from mail.kernel.org ([198.145.29.99]:46262 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729019AbgLWPer (ORCPT ); Wed, 23 Dec 2020 10:34:47 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 923A8233EA; Wed, 23 Dec 2020 15:33:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1608737625; bh=k2sdzDft9pfZIDZAckbIgL09QsWZaL313YFaeHulEmw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=s8f3chXPQQOm6kcYXnqE4afL07EHKcVOgIoBgDzY9pz/0osoU7ct9Kiq1skUklRsH Kp/0LmHtAbU1dC2wmKTdOHcOBJM12pYbDIjGw7uc7XfH2ug7wjZnMTUr/mbjr/oRU7 cQs4ECf6/0JjL1u3SS7XAOpIFwqpH+30siyTOi/c= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jack Pham Subject: [PATCH 5.10 09/40] usb: gadget: f_fs: Re-use SS descriptors for SuperSpeedPlus Date: Wed, 23 Dec 2020 16:33:10 +0100 Message-Id: <20201223150516.018817294@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201223150515.553836647@linuxfoundation.org> References: <20201223150515.553836647@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: Jack Pham commit a353397b0d5dfa3c99b372505db3378fc919c6c6 upstream. In many cases a function that supports SuperSpeed can very well operate in SuperSpeedPlus, if a gadget controller supports it, as the endpoint descriptors (and companion descriptors) are generally identical and can be re-used. This is true for two commonly used functions: Android's ADB and MTP. So we can simply assign the usb_function's ssp_descriptors array to point to its ss_descriptors, if available. Similarly, we need to allow an epfile's ioctl for FUNCTIONFS_ENDPOINT_DESC to correctly return the corresponding SuperSpeed endpoint descriptor in case the connected speed is SuperSpeedPlus as well. The only exception is if a function wants to implement an Isochronous endpoint capable of transferring more than 48KB per service interval when operating at greater than USB 3.1 Gen1 speed, in which case it would require an additional SuperSpeedPlus Isochronous Endpoint Companion descriptor to be returned as part of the Configuration Descriptor. Support for that would need to be separately added to the userspace-facing FunctionFS API which may not be a trivial task--likely a new descriptor format (v3?) may need to be devised to allow for separate SS and SSP descriptors to be supplied. Signed-off-by: Jack Pham Cc: stable Link: https://lore.kernel.org/r/20201027230731.9073-1-jackp@codeaurora.org Signed-off-by: Greg Kroah-Hartman --- drivers/usb/gadget/function/f_fs.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -1328,6 +1328,7 @@ static long ffs_epfile_ioctl(struct file switch (epfile->ffs->gadget->speed) { case USB_SPEED_SUPER: + case USB_SPEED_SUPER_PLUS: desc_idx = 2; break; case USB_SPEED_HIGH: @@ -3174,7 +3175,8 @@ static int _ffs_func_bind(struct usb_con } if (likely(super)) { - func->function.ss_descriptors = vla_ptr(vlabuf, d, ss_descs); + func->function.ss_descriptors = func->function.ssp_descriptors = + vla_ptr(vlabuf, d, ss_descs); ss_len = ffs_do_descs(ffs->ss_descs_count, vla_ptr(vlabuf, d, raw_descs) + fs_len + hs_len, d_raw_descs__sz - fs_len - hs_len, @@ -3584,6 +3586,7 @@ static void ffs_func_unbind(struct usb_c func->function.fs_descriptors = NULL; func->function.hs_descriptors = NULL; func->function.ss_descriptors = NULL; + func->function.ssp_descriptors = NULL; func->interfaces_nums = NULL; ffs_event_add(ffs, FUNCTIONFS_UNBIND);