Received: by 2002:a05:6a10:6006:0:0:0:0 with SMTP id w6csp1690400pxa; Fri, 28 Aug 2020 23:00:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxAsUhOeACC3oEjrlqNqH5AkMYjzcGlI15pliGuOF1kcBThQ2k2yytwSaK1obeYqq4Y5fLV X-Received: by 2002:a17:907:271a:: with SMTP id w26mr2297235ejk.402.1598680838374; Fri, 28 Aug 2020 23:00:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598680838; cv=none; d=google.com; s=arc-20160816; b=mfm051hhKqbhTafu4l+n9IudARbSzW3PF0Ue45s+tx8ejRr1aIZePEQvJSecJdhXBV 4yvAN1a0zxK63tKP4jf5ktZR+Q7j//oM2D3VtIY1G8aacUAW2hEzyWKCflMvcBAViMPM /FdpUetCZDhQXhY6uKZqvdmklY4LI3P37cC/PP0skU5I0DgbYShsS25k0bJixdE/Ncbk eKHZ/UgUQ3zrId407hDDbuP8kDPElrAcOX7FTnvS9VGy9gwTEiq55Mg3J01nwM4P37Rm tZlkZZG6PyDJ9L+bQ7NnObwBV9Sz7CXdqNS6UgFWtZbEsU8QRCx596qXlshVlWbnyu28 K0RA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dmarc-filter:dkim-signature; bh=JBxLm8OMFKHoxpqehjgR8wTIrJyvPsHzMv6BSVJcvNw=; b=s+2tU1UhjhaeYDtRC6Tf3kSJHEzhQCrHKKf8iQr8Z1olw62DHqRGpCrQGvsP0T61/1 mk+/DRntXftInHvJKsK/PD/8TqcqXxBnfTkKsaaIPT44jpXYQeizJHESDa+Y2MoCfiXo of2HGUdj4CeviMs5dCi9P66G/A3H/MKyL0H38PKErw1/3aSH1CSSh/HAnRJlG6mJPEay FRoYdbAlUiZks7L1M82b2GwBdCEYFo7nsSKi7wi9FBadNmredC/ez0xI2OA3jqGFrhVA jsTGNBha/92hYbEYIOf1wJvXOIVBx7dYqWXLQIhmDpEsGX2V4mQSubuWFrcaI8crSK4b pMFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=U0k5AAdn; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c21si975404edw.84.2020.08.28.23.00.15; Fri, 28 Aug 2020 23:00:38 -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=fail header.i=@mg.codeaurora.org header.s=smtp header.b=U0k5AAdn; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726938AbgH2F71 (ORCPT + 99 others); Sat, 29 Aug 2020 01:59:27 -0400 Received: from m43-7.mailgun.net ([69.72.43.7]:44694 "EHLO m43-7.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726333AbgH2F7X (ORCPT ); Sat, 29 Aug 2020 01:59:23 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1598680763; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=JBxLm8OMFKHoxpqehjgR8wTIrJyvPsHzMv6BSVJcvNw=; b=U0k5AAdn+ASN1OML5umnBHbizB2d8ZrkQx/8Mj2tq6vxHj3URB3GklLmujjl9Y/oeD7tB1qb KUPKxGSS7bXdoCUQ/OJEht3abyzgqork6Ue5kOIehRn6R3ASx73Kmc7jCiPdA6fZAzeCD+Uw PzKp7OfpCItfpeZNitGFZYLA7y0= X-Mailgun-Sending-Ip: 69.72.43.7 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n03.prod.us-west-2.postgun.com with SMTP id 5f49ee9d6a801be9b26ca30f (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Sat, 29 Aug 2020 05:58:53 GMT Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 9780EC43391; Sat, 29 Aug 2020 05:58:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=2.0 tests=ALL_TRUSTED,SPF_NONE, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from wcheng-linux.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: wcheng) by smtp.codeaurora.org (Postfix) with ESMTPSA id D17CBC43387; Sat, 29 Aug 2020 05:58:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org D17CBC43387 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=wcheng@codeaurora.org From: Wesley Cheng To: robh+dt@kernel.org, bjorn.andersson@linaro.org, balbi@kernel.org, gregkh@linuxfoundation.org, agross@kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, jackp@codeaurora.org, Wesley Cheng Subject: [RFC v5 4/6] usb: gadget: configfs: Check USB configuration before adding Date: Fri, 28 Aug 2020 22:58:44 -0700 Message-Id: <20200829055846.19034-5-wcheng@codeaurora.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200829055846.19034-1-wcheng@codeaurora.org> References: <20200829055846.19034-1-wcheng@codeaurora.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Ensure that the USB gadget is able to support the configuration being added based on the number of endpoints required from all interfaces. This is for accounting for any bandwidth or space limitations. Signed-off-by: Wesley Cheng --- drivers/usb/gadget/configfs.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c index 56051bb97349..7c74c04b1d8c 100644 --- a/drivers/usb/gadget/configfs.c +++ b/drivers/usb/gadget/configfs.c @@ -1361,6 +1361,7 @@ static int configfs_composite_bind(struct usb_gadget *gadget, struct usb_function *f; struct usb_function *tmp; struct gadget_config_name *cn; + unsigned long ep_map = 0; if (gadget_is_otg(gadget)) c->descriptors = otg_desc; @@ -1390,7 +1391,28 @@ static int configfs_composite_bind(struct usb_gadget *gadget, list_add(&f->list, &cfg->func_list); goto err_purge_funcs; } + if (f->ss_descriptors) { + struct usb_descriptor_header **d; + + d = f->ss_descriptors; + for (; *d; ++d) { + struct usb_endpoint_descriptor *ep; + int addr; + + if ((*d)->bDescriptorType != USB_DT_ENDPOINT) + continue; + + ep = (struct usb_endpoint_descriptor *)*d; + addr = ((ep->bEndpointAddress & 0x80) >> 3) | + (ep->bEndpointAddress & 0x0f); + set_bit(addr, &ep_map); + } + } } + ret = usb_gadget_check_config(cdev->gadget, ep_map); + if (ret) + goto err_purge_funcs; + usb_ep_autoconfig_reset(cdev->gadget); } if (cdev->use_os_string) { -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project