mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
usb: hub: Send correct wValue to get hub descriptor of a USB 3.0 hub
Testing a USB 3.0 hub by connecting it to the xHCI port on Intel MinnowMax, when issuing 'get hub descriptor' to the hub, xHCI reports a transfer event TRB with a completion code 6 which means 'Stall Error'. In fact super speed USB hub descriptor type is 0x2a, not 0x29. Sending correct SETUP packet to the hub makes it not stall anymore. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Stefan Roese <sr@denx.de> Tested-by: Stefan Roese <sr@denx.de>
This commit is contained in:
parent
f7a9e5dd03
commit
f342119602
3 changed files with 13 additions and 1 deletions
|
@ -65,11 +65,21 @@ __weak void usb_hub_reset_devices(int port)
|
|||
return;
|
||||
}
|
||||
|
||||
static inline bool usb_hub_is_superspeed(struct usb_device *hdev)
|
||||
{
|
||||
return hdev->descriptor.bDeviceProtocol == 3;
|
||||
}
|
||||
|
||||
static int usb_get_hub_descriptor(struct usb_device *dev, void *data, int size)
|
||||
{
|
||||
unsigned short dtype = USB_DT_HUB;
|
||||
|
||||
if (usb_hub_is_superspeed(dev))
|
||||
dtype = USB_DT_SS_HUB;
|
||||
|
||||
return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
|
||||
USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
|
||||
USB_DT_HUB << 8, 0, data, size, USB_CNTL_TIMEOUT);
|
||||
dtype << 8, 0, data, size, USB_CNTL_TIMEOUT);
|
||||
}
|
||||
|
||||
static int usb_clear_port_feature(struct usb_device *dev, int port, int feature)
|
||||
|
|
|
@ -727,6 +727,7 @@ static int xhci_submit_root(struct usb_device *udev, unsigned long pipe,
|
|||
case USB_REQ_GET_DESCRIPTOR | ((USB_DIR_IN | USB_RT_HUB) << 8):
|
||||
switch (le16_to_cpu(req->value) >> 8) {
|
||||
case USB_DT_HUB:
|
||||
case USB_DT_SS_HUB:
|
||||
debug("USB_DT_HUB config\n");
|
||||
srcptr = &descriptor.hub;
|
||||
srclen = 0x8;
|
||||
|
|
|
@ -93,6 +93,7 @@
|
|||
#define USB_DT_REPORT (USB_TYPE_CLASS | 0x02)
|
||||
#define USB_DT_PHYSICAL (USB_TYPE_CLASS | 0x03)
|
||||
#define USB_DT_HUB (USB_TYPE_CLASS | 0x09)
|
||||
#define USB_DT_SS_HUB (USB_TYPE_CLASS | 0x0a)
|
||||
|
||||
/* Descriptor sizes per descriptor type */
|
||||
#define USB_DT_DEVICE_SIZE 18
|
||||
|
|
Loading…
Reference in a new issue