From: Benjamin Herrenschmidt <benh@kernel.crashing.org> To: rentao.bupt@gmail.com, Felipe Balbi <balbi@kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Joel Stanley <joel@jms.id.au>, Andrew Jeffery <andrew@aj.id.au>, Chunfeng Yun <chunfeng.yun@mediatek.com>, Colin Ian King <colin.king@canonical.com>, Stephen Boyd <swboyd@chromium.org>, Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, openbmc@lists.ozlabs.org, taoren@fb.com Subject: Re: [PATCH v4 1/7] usb: gadget: aspeed: support per-vhub usb descriptors Date: Thu, 27 Feb 2020 15:01:47 +1100 [thread overview] Message-ID: <e76edda178cd83c4aa5d0282c481425c34653f5e.camel@kernel.crashing.org> (raw) In-Reply-To: <20200226230346.672-2-rentao.bupt@gmail.com> On Wed, 2020-02-26 at 15:03 -0800, rentao.bupt@gmail.com wrote: > From: Tao Ren <rentao.bupt@gmail.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@gmail.com> Acked-by: Benjamin Herrenschmidt <benh@kernel.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 */
WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Herrenschmidt <benh@kernel.crashing.org> To: rentao.bupt@gmail.com, Felipe Balbi <balbi@kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Joel Stanley <joel@jms.id.au>, Andrew Jeffery <andrew@aj.id.au>, Chunfeng Yun <chunfeng.yun@mediatek.com>, Colin Ian King <colin.king@canonical.com>, Stephen Boyd <swboyd@chromium.org>, Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, openbmc@lists.ozlabs.org, taoren@fb.com Subject: Re: [PATCH v4 1/7] usb: gadget: aspeed: support per-vhub usb descriptors Date: Thu, 27 Feb 2020 15:01:47 +1100 [thread overview] Message-ID: <e76edda178cd83c4aa5d0282c481425c34653f5e.camel@kernel.crashing.org> (raw) In-Reply-To: <20200226230346.672-2-rentao.bupt@gmail.com> On Wed, 2020-02-26 at 15:03 -0800, rentao.bupt@gmail.com wrote: > From: Tao Ren <rentao.bupt@gmail.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@gmail.com> Acked-by: Benjamin Herrenschmidt <benh@kernel.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 */ _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-02-27 4:02 UTC|newest] Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-26 23:03 [PATCH v4 0/7] aspeed-g6: enable usb support rentao.bupt 2020-02-26 23:03 ` rentao.bupt 2020-02-26 23:03 ` [PATCH v4 1/7] usb: gadget: aspeed: support per-vhub usb descriptors rentao.bupt 2020-02-26 23:03 ` rentao.bupt 2020-02-27 4:01 ` Benjamin Herrenschmidt [this message] 2020-02-27 4:01 ` Benjamin Herrenschmidt 2020-02-26 23:03 ` [PATCH v4 2/7] usb: gadget: aspeed: read vhub properties from device tree rentao.bupt 2020-02-26 23:03 ` rentao.bupt 2020-02-27 4:09 ` Benjamin Herrenschmidt 2020-02-27 4:09 ` Benjamin Herrenschmidt 2020-02-27 22:29 ` Tao Ren 2020-02-27 22:29 ` Tao Ren 2020-02-26 23:03 ` [PATCH v4 3/7] usb: gadget: aspeed: add ast2600 vhub support rentao.bupt 2020-02-26 23:03 ` rentao.bupt 2020-02-27 4:09 ` Benjamin Herrenschmidt 2020-02-27 4:09 ` Benjamin Herrenschmidt 2020-02-26 23:03 ` [PATCH v4 4/7] ARM: dts: aspeed-g6: add usb functions rentao.bupt 2020-02-26 23:03 ` rentao.bupt 2020-02-27 4:10 ` Benjamin Herrenschmidt 2020-02-27 4:10 ` Benjamin Herrenschmidt 2020-02-27 5:54 ` Joel Stanley 2020-02-27 5:54 ` Joel Stanley 2020-02-27 5:54 ` Joel Stanley 2020-02-26 23:03 ` [PATCH v4 5/7] ARM: dts: aspeed-g5: add vhub port and endpoint properties rentao.bupt 2020-02-26 23:03 ` rentao.bupt 2020-02-27 4:10 ` Benjamin Herrenschmidt 2020-02-27 4:10 ` Benjamin Herrenschmidt 2020-02-27 5:54 ` Joel Stanley 2020-02-27 5:54 ` Joel Stanley 2020-02-27 5:54 ` Joel Stanley 2020-02-26 23:03 ` [PATCH v4 6/7] ARM: dts: aspeed-g4: " rentao.bupt 2020-02-26 23:03 ` rentao.bupt 2020-02-27 4:10 ` Benjamin Herrenschmidt 2020-02-27 4:10 ` Benjamin Herrenschmidt 2020-02-27 5:54 ` Joel Stanley 2020-02-27 5:54 ` Joel Stanley 2020-02-27 5:54 ` Joel Stanley 2020-02-27 22:34 ` Tao Ren 2020-02-27 22:34 ` Tao Ren 2020-02-26 23:03 ` [PATCH v4 7/7] dt-bindings: usb: add documentation for aspeed usb-vhub rentao.bupt 2020-02-26 23:03 ` rentao.bupt 2020-02-27 4:04 ` Benjamin Herrenschmidt 2020-02-27 4:04 ` Benjamin Herrenschmidt 2020-02-27 5:52 ` Joel Stanley 2020-02-27 5:52 ` Joel Stanley 2020-02-27 5:52 ` Joel Stanley 2020-02-27 16:55 ` Rob Herring 2020-02-27 16:55 ` Rob Herring 2020-02-27 22:42 ` Tao Ren 2020-02-27 22:42 ` Tao Ren 2020-02-27 23:10 ` Tao Ren 2020-02-27 23:10 ` Tao Ren 2020-02-28 2:17 ` Tao Ren 2020-02-28 2:17 ` Tao Ren
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=e76edda178cd83c4aa5d0282c481425c34653f5e.camel@kernel.crashing.org \ --to=benh@kernel.crashing.org \ --cc=andrew@aj.id.au \ --cc=balbi@kernel.org \ --cc=chunfeng.yun@mediatek.com \ --cc=colin.king@canonical.com \ --cc=devicetree@vger.kernel.org \ --cc=gregkh@linuxfoundation.org \ --cc=joel@jms.id.au \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-aspeed@lists.ozlabs.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-usb@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=openbmc@lists.ozlabs.org \ --cc=rentao.bupt@gmail.com \ --cc=robh+dt@kernel.org \ --cc=swboyd@chromium.org \ --cc=taoren@fb.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.