lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <e76edda178cd83c4aa5d0282c481425c34653f5e.camel@kernel.crashing.org>
Date:   Thu, 27 Feb 2020 15:01:47 +1100
From:   Benjamin Herrenschmidt <benh@...nel.crashing.org>
To:     rentao.bupt@...il.com, Felipe Balbi <balbi@...nel.org>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        Joel Stanley <joel@....id.au>,
        Andrew Jeffery <andrew@...id.au>,
        Chunfeng Yun <chunfeng.yun@...iatek.com>,
        Colin Ian King <colin.king@...onical.com>,
        Stephen Boyd <swboyd@...omium.org>,
        Rob Herring <robh+dt@...nel.org>,
        Mark Rutland <mark.rutland@....com>, linux-usb@...r.kernel.org,
        linux-arm-kernel@...ts.infradead.org,
        linux-aspeed@...ts.ozlabs.org, devicetree@...r.kernel.org,
        linux-kernel@...r.kernel.org, openbmc@...ts.ozlabs.org,
        taoren@...com
Subject: Re: [PATCH v4 1/7] usb: gadget: aspeed: support per-vhub usb
 descriptors

On Wed, 2020-02-26 at 15:03 -0800, rentao.bupt@...il.com wrote:
> From: Tao Ren <rentao.bupt@...il.com>
> 
> This patch store vhub's standard usb descriptors in struct "ast_vhub"
> so
> it's more convenient to customize descriptors and potentially support
> multiple vhub instances in the future.
> 
> Signed-off-by: Tao Ren <rentao.bupt@...il.com>

Acked-by: Benjamin Herrenschmidt <benh@...nel.crashing.org>
---
> ---
>  No change in v2/v3/v4:
>    - the patch is added to the patch series since v4.
> 
>  drivers/usb/gadget/udc/aspeed-vhub/hub.c  | 43 ++++++++++++++++-----
> --
>  drivers/usb/gadget/udc/aspeed-vhub/vhub.h | 15 ++++++++
>  2 files changed, 46 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> index 19b3517e04c0..9c3027306b15 100644
> --- a/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> +++ b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> @@ -93,11 +93,7 @@ static void ast_vhub_patch_dev_desc_usb1(struct
> usb_device_descriptor *desc)
>  				 USB_DT_INTERFACE_SIZE + \
>  				 USB_DT_ENDPOINT_SIZE)
>  
> -static const struct ast_vhub_full_cdesc {
> -	struct usb_config_descriptor	cfg;
> -	struct usb_interface_descriptor intf;
> -	struct usb_endpoint_descriptor	ep;
> -} __attribute__ ((packed)) ast_vhub_conf_desc = {
> +static const struct ast_vhub_full_cdesc ast_vhub_conf_desc = {
>  	.cfg = {
>  		.bLength		= USB_DT_CONFIG_SIZE,
>  		.bDescriptorType	= USB_DT_CONFIG,
> @@ -266,6 +262,7 @@ static int ast_vhub_rep_desc(struct ast_vhub_ep
> *ep,
>  			     u8 desc_type, u16 len)
>  {
>  	size_t dsize;
> +	struct ast_vhub *vhub = ep->vhub;
>  
>  	EPDBG(ep, "GET_DESCRIPTOR(type:%d)\n", desc_type);
>  
> @@ -281,20 +278,20 @@ static int ast_vhub_rep_desc(struct ast_vhub_ep
> *ep,
>  	switch(desc_type) {
>  	case USB_DT_DEVICE:
>  		dsize = USB_DT_DEVICE_SIZE;
> -		memcpy(ep->buf, &ast_vhub_dev_desc, dsize);
> -		BUILD_BUG_ON(dsize > sizeof(ast_vhub_dev_desc));
> +		memcpy(ep->buf, &vhub->vhub_dev_desc, dsize);
> +		BUILD_BUG_ON(dsize > sizeof(vhub->vhub_dev_desc));
>  		BUILD_BUG_ON(USB_DT_DEVICE_SIZE >=
> AST_VHUB_EP0_MAX_PACKET);
>  		break;
>  	case USB_DT_CONFIG:
>  		dsize = AST_VHUB_CONF_DESC_SIZE;
> -		memcpy(ep->buf, &ast_vhub_conf_desc, dsize);
> -		BUILD_BUG_ON(dsize > sizeof(ast_vhub_conf_desc));
> +		memcpy(ep->buf, &vhub->vhub_conf_desc, dsize);
> +		BUILD_BUG_ON(dsize > sizeof(vhub->vhub_conf_desc));
>  		BUILD_BUG_ON(AST_VHUB_CONF_DESC_SIZE >=
> AST_VHUB_EP0_MAX_PACKET);
>  		break;
>  	case USB_DT_HUB:
>  		dsize = AST_VHUB_HUB_DESC_SIZE;
> -		memcpy(ep->buf, &ast_vhub_hub_desc, dsize);
> -		BUILD_BUG_ON(dsize > sizeof(ast_vhub_hub_desc));
> +		memcpy(ep->buf, &vhub->vhub_hub_desc, dsize);
> +		BUILD_BUG_ON(dsize > sizeof(vhub->vhub_hub_desc));
>  		BUILD_BUG_ON(AST_VHUB_HUB_DESC_SIZE >=
> AST_VHUB_EP0_MAX_PACKET);
>  		break;
>  	default:
> @@ -317,7 +314,8 @@ static int ast_vhub_rep_string(struct ast_vhub_ep
> *ep,
>  			       u8 string_id, u16 lang_id,
>  			       u16 len)
>  {
> -	int rc = usb_gadget_get_string (&ast_vhub_strings, string_id,
> ep->buf);
> +	int rc = usb_gadget_get_string(&ep->vhub->vhub_str_desc,
> +					string_id, ep->buf);
>  
>  	/*
>  	 * This should never happen unless we put too big strings in
> @@ -834,9 +832,30 @@ void ast_vhub_hub_reset(struct ast_vhub *vhub)
>  	writel(0, vhub->regs + AST_VHUB_EP1_STS_CHG);
>  }
>  
> +static void ast_vhub_init_desc(struct ast_vhub *vhub)
> +{
> +	/* Initialize vhub Device Descriptor. */
> +	memcpy(&vhub->vhub_dev_desc, &ast_vhub_dev_desc,
> +		sizeof(vhub->vhub_dev_desc));
> +
> +	/* Initialize vhub Configuration Descriptor. */
> +	memcpy(&vhub->vhub_conf_desc, &ast_vhub_conf_desc,
> +		sizeof(vhub->vhub_conf_desc));
> +
> +	/* Initialize vhub Hub Descriptor. */
> +	memcpy(&vhub->vhub_hub_desc, &ast_vhub_hub_desc,
> +		sizeof(vhub->vhub_hub_desc));
> +
> +	/* Initialize vhub String Descriptors. */
> +	memcpy(&vhub->vhub_str_desc, &ast_vhub_strings,
> +		sizeof(vhub->vhub_str_desc));
> +}
> +
>  void ast_vhub_init_hub(struct ast_vhub *vhub)
>  {
>  	vhub->speed = USB_SPEED_UNKNOWN;
>  	INIT_WORK(&vhub->wake_work, ast_vhub_wake_work);
> +
> +	ast_vhub_init_desc(vhub);
>  }
>  
> diff --git a/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
> b/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
> index 761919e220d3..191f9fae7420 100644
> --- a/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
> +++ b/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
> @@ -2,6 +2,9 @@
>  #ifndef __ASPEED_VHUB_H
>  #define __ASPEED_VHUB_H
>  
> +#include <linux/usb.h>
> +#include <linux/usb/ch11.h>
> +
>  /*****************************
>   *                           *
>   * VHUB register definitions *
> @@ -373,6 +376,12 @@ struct ast_vhub_port {
>  	struct ast_vhub_dev	dev;
>  };
>  
> +struct ast_vhub_full_cdesc {
> +	struct usb_config_descriptor	cfg;
> +	struct usb_interface_descriptor intf;
> +	struct usb_endpoint_descriptor	ep;
> +} __packed;
> +
>  /* Global vhub structure */
>  struct ast_vhub {
>  	struct platform_device		*pdev;
> @@ -409,6 +418,12 @@ struct ast_vhub {
>  
>  	/* Upstream bus speed captured at bus reset */
>  	unsigned int			speed;
> +
> +	/* Standard USB Descriptors of the vhub. */
> +	struct usb_device_descriptor	vhub_dev_desc;
> +	struct ast_vhub_full_cdesc	vhub_conf_desc;
> +	struct usb_hub_descriptor	vhub_hub_desc;
> +	struct usb_gadget_strings	vhub_str_desc;
>  };
>  
>  /* Standard request handlers result codes */

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ