diff mbox series

[v2,1/4] usb: aspeed-vhub: add qualifier descriptor

Message ID 20211130104256.3106797-2-neal_liu@aspeedtech.com (mailing list archive)
State New, archived
Headers show
Series Refactor Aspeed USB vhub driver | expand

Commit Message

Neal Liu Nov. 30, 2021, 10:42 a.m. UTC
Support qualifier descriptor to pass USB30CV compliance test.

Signed-off-by: Neal Liu <neal_liu@aspeedtech.com>
---
 drivers/usb/gadget/udc/aspeed-vhub/hub.c  | 24 +++++++++++++++++++++++
 drivers/usb/gadget/udc/aspeed-vhub/vhub.h |  1 +
 2 files changed, 25 insertions(+)

Comments

Neal Liu Dec. 1, 2021, 5:43 a.m. UTC | #1
> -----Original Message-----
> From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Sent: Tuesday, November 30, 2021 7:45 PM
> To: Neal Liu <neal_liu@aspeedtech.com>
> Cc: Felipe Balbi <balbi@kernel.org>; Joel Stanley <joel@jms.id.au>; Andrew
> Jeffery <andrew@aj.id.au>; Cai Huoqing <caihuoqing@baidu.com>; Tao Ren
> <rentao.bupt@gmail.com>; Julia Lawall <julia.lawall@inria.fr>; kernel test
> robot <lkp@intel.com>; Sasha Levin <sashal@kernel.org>;
> linux-usb@vger.kernel.org; linux-kernel@vger.kernel.org;
> linux-arm-kernel@lists.infradead.org; linux-aspeed@lists.ozlabs.org; BMC-SW
> <BMC-SW@aspeedtech.com>
> Subject: Re: [PATCH v2 1/4] usb: aspeed-vhub: add qualifier descriptor
> 
> On Tue, Nov 30, 2021 at 06:42:53PM +0800, Neal Liu wrote:
> > Support qualifier descriptor to pass USB30CV compliance test.
> 
> Please provide more information here in this description.  This does not
> explain what is happening here very well.
> 
> Also, what is "USB30CV"?
> 

USB 3 Command Verifier (USB3CV) is the official tool for USB 3 Hub and Device Framework testing.
The USB3CV tool includes the xHCI Compliance Drivers for use with the USB3CV.

We would like to pass USB3CV - Chapter 9 Test [USB 2 devices] - Device Qualifier Tests.
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, and the host will retrieve it through Get Descriptor request.

> >
> > Signed-off-by: Neal Liu <neal_liu@aspeedtech.com>
> > ---
> >  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,
> 
> Fields that are to be set to zero do not need to be set here, the compiler does it
> for you.
> 
> thanks,
> 
> greg k-h

This is more clear that we specify each member's value.
Thanks

-Neal
Greg KH Dec. 1, 2021, 6:18 a.m. UTC | #2
On Wed, Dec 01, 2021 at 05:43:16AM +0000, Neal Liu wrote:
> > -----Original Message-----
> > From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Sent: Tuesday, November 30, 2021 7:45 PM
> > To: Neal Liu <neal_liu@aspeedtech.com>
> > Cc: Felipe Balbi <balbi@kernel.org>; Joel Stanley <joel@jms.id.au>; Andrew
> > Jeffery <andrew@aj.id.au>; Cai Huoqing <caihuoqing@baidu.com>; Tao Ren
> > <rentao.bupt@gmail.com>; Julia Lawall <julia.lawall@inria.fr>; kernel test
> > robot <lkp@intel.com>; Sasha Levin <sashal@kernel.org>;
> > linux-usb@vger.kernel.org; linux-kernel@vger.kernel.org;
> > linux-arm-kernel@lists.infradead.org; linux-aspeed@lists.ozlabs.org; BMC-SW
> > <BMC-SW@aspeedtech.com>
> > Subject: Re: [PATCH v2 1/4] usb: aspeed-vhub: add qualifier descriptor
> > 
> > On Tue, Nov 30, 2021 at 06:42:53PM +0800, Neal Liu wrote:
> > > Support qualifier descriptor to pass USB30CV compliance test.
> > 
> > Please provide more information here in this description.  This does not
> > explain what is happening here very well.
> > 
> > Also, what is "USB30CV"?
> > 
> 
> USB 3 Command Verifier (USB3CV) is the official tool for USB 3 Hub and Device Framework testing.
> The USB3CV tool includes the xHCI Compliance Drivers for use with the USB3CV.

Please put that information in the changelog text.

> We would like to pass USB3CV - Chapter 9 Test [USB 2 devices] - Device Qualifier Tests.
> 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, and the host will retrieve it through Get Descriptor request.

Again, this type of information needs to go into the changelog text.

thanks,

greg k-h
Neal Liu Dec. 1, 2021, 6:31 a.m. UTC | #3
> -----Original Message-----
> From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Sent: Wednesday, December 1, 2021 2:18 PM
> To: Neal Liu <neal_liu@aspeedtech.com>
> Cc: Felipe Balbi <balbi@kernel.org>; Joel Stanley <joel@jms.id.au>; Andrew
> Jeffery <andrew@aj.id.au>; Cai Huoqing <caihuoqing@baidu.com>; Tao Ren
> <rentao.bupt@gmail.com>; Julia Lawall <julia.lawall@inria.fr>; kernel test
> robot <lkp@intel.com>; Sasha Levin <sashal@kernel.org>;
> linux-usb@vger.kernel.org; linux-kernel@vger.kernel.org;
> linux-arm-kernel@lists.infradead.org; linux-aspeed@lists.ozlabs.org; BMC-SW
> <BMC-SW@aspeedtech.com>
> Subject: Re: [PATCH v2 1/4] usb: aspeed-vhub: add qualifier descriptor
> 
> On Wed, Dec 01, 2021 at 05:43:16AM +0000, Neal Liu wrote:
> > > -----Original Message-----
> > > From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > > Sent: Tuesday, November 30, 2021 7:45 PM
> > > To: Neal Liu <neal_liu@aspeedtech.com>
> > > Cc: Felipe Balbi <balbi@kernel.org>; Joel Stanley <joel@jms.id.au>;
> > > Andrew Jeffery <andrew@aj.id.au>; Cai Huoqing
> > > <caihuoqing@baidu.com>; Tao Ren <rentao.bupt@gmail.com>; Julia
> > > Lawall <julia.lawall@inria.fr>; kernel test robot <lkp@intel.com>;
> > > Sasha Levin <sashal@kernel.org>; linux-usb@vger.kernel.org;
> > > linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
> > > linux-aspeed@lists.ozlabs.org; BMC-SW <BMC-SW@aspeedtech.com>
> > > Subject: Re: [PATCH v2 1/4] usb: aspeed-vhub: add qualifier
> > > descriptor
> > >
> > > On Tue, Nov 30, 2021 at 06:42:53PM +0800, Neal Liu wrote:
> > > > Support qualifier descriptor to pass USB30CV compliance test.
> > >
> > > Please provide more information here in this description.  This does
> > > not explain what is happening here very well.
> > >
> > > Also, what is "USB30CV"?
> > >
> >
> > USB 3 Command Verifier (USB3CV) is the official tool for USB 3 Hub and
> Device Framework testing.
> > The USB3CV tool includes the xHCI Compliance Drivers for use with the
> USB3CV.
> 
> Please put that information in the changelog text.
> 
> > We would like to pass USB3CV - Chapter 9 Test [USB 2 devices] - Device
> Qualifier Tests.
> > 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, and the host will retrieve it through
> Get Descriptor request.
> 
> Again, this type of information needs to go into the changelog text.
> 
> thanks,
> 
> greg k-h

Okay, I'll put it in next patch. Thanks

-Neal
diff mbox series

Patch

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 */