Index: uspace/drv/bus/usb/xhci/device.c
===================================================================
--- uspace/drv/bus/usb/xhci/device.c	(revision 2aaba7ebd5f555b49a2560fb118593c6920c99e2)
+++ uspace/drv/bus/usb/xhci/device.c	(revision 21885c9201526dd53ff833be308f1e90c8a9284d)
@@ -153,7 +153,10 @@
 	dev->is_hub = 1;
 	dev->num_ports = hub_desc.port_count;
-	dev->tt_think_time = 8 +
-		8  * !!(hub_desc.characteristics & HUB_CHAR_TT_THINK_8) +
-		16 * !!(hub_desc.characteristics & HUB_CHAR_TT_THINK_16);
+
+	if (dev->base.speed == USB_SPEED_HIGH) {
+		dev->tt_think_time = 8 +
+			8  * !!(hub_desc.characteristics & HUB_CHAR_TT_THINK_8) +
+			16 * !!(hub_desc.characteristics & HUB_CHAR_TT_THINK_16);
+	}
 
 	usb_log_debug2("Device(%u): recognised USB hub with %u ports", dev->base.address, dev->num_ports);
Index: uspace/lib/usb/include/usb/classes/hub.h
===================================================================
--- uspace/lib/usb/include/usb/classes/hub.h	(revision 2aaba7ebd5f555b49a2560fb118593c6920c99e2)
+++ uspace/lib/usb/include/usb/classes/hub.h	(revision 21885c9201526dd53ff833be308f1e90c8a9284d)
@@ -71,5 +71,5 @@
 	uint8_t length;
 
-	/** Descriptor type (0x29). */
+	/** Descriptor type (0x29 or 0x2a for superspeed hub). */
 	uint8_t descriptor_type;
 
@@ -116,4 +116,6 @@
 #define HUB_CHAR_OC_PER_PORT_FLAG       (1 << 3)
 #define HUB_CHAR_NO_OC_FLAG             (1 << 4)
+
+/* These are invalid for superspeed hub */
 #define HUB_CHAR_TT_THINK_16            (1 << 5)
 #define HUB_CHAR_TT_THINK_8             (1 << 6)
@@ -164,6 +166,8 @@
     /** This request sets a value reported in the hub status. */
     USB_HUB_REQ_TYPE_SET_HUB_FEATURE = 0x20,
+    /** This request sets the value that the hub uses to determine the index into the Route String Index for the hub. */
+    USB_HUB_REQ_TYPE_SET_HUB_DEPTH = 0x20,
     /** This request sets a value reported in the port status. */
-    USB_HUB_REQ_TYPE_SET_PORT_FEATURE = 0x23
+    USB_HUB_REQ_TYPE_SET_PORT_FEATURE = 0x23,
 } usb_hub_bm_request_type_t;
 
@@ -191,4 +195,6 @@
     /** */
     USB_HUB_STOP_TT = 11,
+    /** USB 3+ only */
+    USB_HUB_REQUEST_SET_HUB_DEPTH = 12,
 } usb_hub_request_t;
 
Index: uspace/lib/usb/include/usb/descriptor.h
===================================================================
--- uspace/lib/usb/include/usb/descriptor.h	(revision 2aaba7ebd5f555b49a2560fb118593c6920c99e2)
+++ uspace/lib/usb/include/usb/descriptor.h	(revision 21885c9201526dd53ff833be308f1e90c8a9284d)
@@ -60,4 +60,5 @@
 	USB_DESCTYPE_HID_PHYSICAL = 0x23,
 	USB_DESCTYPE_HUB = 0x29,
+	USB_DESCTYPE_SSPEED_HUB = 0x2a,
 	USB_DESCTYPE_SSPEED_EP_COMPANION = 0x30
 	/* USB_DESCTYPE_ = */
Index: uspace/lib/usbhost/src/utility.c
===================================================================
--- uspace/lib/usbhost/src/utility.c	(revision 2aaba7ebd5f555b49a2560fb118593c6920c99e2)
+++ uspace/lib/usbhost/src/utility.c	(revision 21885c9201526dd53ff833be308f1e90c8a9284d)
@@ -150,4 +150,7 @@
 	}};
 
+	const usb_descriptor_type_t type = device->speed >= USB_SPEED_SUPER
+		? USB_DESCTYPE_SSPEED_HUB : USB_DESCTYPE_HUB;
+
 	const usb_device_request_setup_packet_t get_hub_desc = {
 		.request_type = SETUP_REQUEST_TYPE_DEVICE_TO_HOST
@@ -155,5 +158,5 @@
 		    | USB_REQUEST_RECIPIENT_DEVICE,
 		.request = USB_DEVREQ_GET_DESCRIPTOR, \
-		.value = uint16_host2usb(USB_DESCTYPE_HUB << 8), \
+		.value = uint16_host2usb(type << 8), \
 		.length = sizeof(*desc),
 	};
