lkml.org 
[lkml]   [2021]   [Dec]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v3 1/4] usb: aspeed-vhub: add qualifier descriptor
    From
    Date
    On Wed, 2021-12-08 at 18:05 +0800, Neal Liu wrote:
    > USB3 Command Verifier (USB3CV) is the official tool for
    > USB3 Hub and Device Framework testing.
    >
    > A high-speed capable device that has different device information
    > for full-speed and high-speed must have a Device Qualifier
    > Descriptor.
    >
    > This patch is to support device qualifier to pass
    > USB3CV - Chapter 9 Test [USB 2 devices] - Device Qualifier Tests.
    >
    > Signed-off-by: Neal Liu <neal_liu@aspeedtech.com>
    > ---

    Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

    > drivers/usb/gadget/udc/aspeed-vhub/hub.c | 24
    > +++++++++++++++++++++++
    > drivers/usb/gadget/udc/aspeed-vhub/vhub.h | 1 +
    > 2 files changed, 25 insertions(+)
    >
    > diff --git a/drivers/usb/gadget/udc/aspeed-vhub/hub.c
    > b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
    > index b9960fdd8a51..93f27a745760 100644
    > --- a/drivers/usb/gadget/udc/aspeed-vhub/hub.c
    > +++ b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
    > @@ -68,6 +68,18 @@ static const struct usb_device_descriptor
    > ast_vhub_dev_desc = {
    > .bNumConfigurations = 1,
    > };
    >
    > +static const struct usb_qualifier_descriptor ast_vhub_qual_desc = {
    > + .bLength = 0xA,
    > + .bDescriptorType = USB_DT_DEVICE_QUALIFIER,
    > + .bcdUSB = cpu_to_le16(0x0200),
    > + .bDeviceClass = USB_CLASS_HUB,
    > + .bDeviceSubClass = 0,
    > + .bDeviceProtocol = 0,
    > + .bMaxPacketSize0 = 64,
    > + .bNumConfigurations = 1,
    > + .bRESERVED = 0,
    > +};
    > +
    > /*
    > * Configuration descriptor: same comments as above
    > * regarding handling USB1 mode.
    > @@ -271,9 +283,11 @@ static int ast_vhub_rep_desc(struct ast_vhub_ep
    > *ep,
    > 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_OTHER_SPEED_CONFIG:
    > case USB_DT_CONFIG:
    > dsize = AST_VHUB_CONF_DESC_SIZE;
    > memcpy(ep->buf, &vhub->vhub_conf_desc, dsize);
    > + ((u8 *)ep->buf)[1] = desc_type;
    > BUILD_BUG_ON(dsize > sizeof(vhub->vhub_conf_desc));
    > BUILD_BUG_ON(AST_VHUB_CONF_DESC_SIZE >=
    > AST_VHUB_EP0_MAX_PACKET);
    > break;
    > @@ -283,6 +297,10 @@ static int ast_vhub_rep_desc(struct ast_vhub_ep
    > *ep,
    > BUILD_BUG_ON(dsize > sizeof(vhub->vhub_hub_desc));
    > BUILD_BUG_ON(AST_VHUB_HUB_DESC_SIZE >=
    > AST_VHUB_EP0_MAX_PACKET);
    > break;
    > + case USB_DT_DEVICE_QUALIFIER:
    > + dsize = sizeof(vhub->vhub_qual_desc);
    > + memcpy(ep->buf, &vhub->vhub_qual_desc, dsize);
    > + break;
    > default:
    > return std_req_stall;
    > }
    > @@ -428,6 +446,8 @@ enum std_req_rc ast_vhub_std_hub_request(struct
    > ast_vhub_ep *ep,
    > switch (wValue >> 8) {
    > case USB_DT_DEVICE:
    > case USB_DT_CONFIG:
    > + case USB_DT_DEVICE_QUALIFIER:
    > + case USB_DT_OTHER_SPEED_CONFIG:
    > return ast_vhub_rep_desc(ep, wValue >> 8,
    > wLength);
    > case USB_DT_STRING:
    > @@ -1033,6 +1053,10 @@ static int ast_vhub_init_desc(struct ast_vhub
    > *vhub)
    > else
    > ret = ast_vhub_str_alloc_add(vhub, &ast_vhub_strings);
    >
    > + /* Initialize vhub Qualifier Descriptor. */
    > + memcpy(&vhub->vhub_qual_desc, &ast_vhub_qual_desc,
    > + sizeof(vhub->vhub_qual_desc));
    > +
    > return ret;
    > }
    >
    > diff --git a/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
    > b/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
    > index 87a5dea12d3c..6b9dfa6e10eb 100644
    > --- a/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
    > +++ b/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
    > @@ -425,6 +425,7 @@ struct ast_vhub {
    > struct ast_vhub_full_cdesc vhub_conf_desc;
    > struct usb_hub_descriptor vhub_hub_desc;
    > struct list_head vhub_str_desc;
    > + struct usb_qualifier_descriptor vhub_qual_desc;
    > };
    >
    > /* Standard request handlers result codes */

    \
     
     \ /
      Last update: 2021-12-09 01:11    [W:2.341 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site