Index: uspace/lib/usbdev/src/pipes.c
===================================================================
--- uspace/lib/usbdev/src/pipes.c	(revision 95c675b4aa3fea7b424b73892a90b052c673cfd3)
+++ uspace/lib/usbdev/src/pipes.c	(revision f668d602a75538d4476f1df11550b29c815f0af8)
@@ -254,6 +254,8 @@
 int usb_pipe_initialize(usb_pipe_t *pipe, usb_endpoint_t endpoint_no,
     usb_transfer_type_t transfer_type, size_t max_packet_size,
-    usb_direction_t direction, unsigned packets, usb_dev_session_t *bus_session)
-{
+    usb_direction_t direction, unsigned packets,
+    unsigned max_burst, unsigned max_streams, usb_dev_session_t *bus_session)
+{
+	// FIXME refactor this function
 	assert(pipe);
 
@@ -263,4 +265,6 @@
 	pipe->desc.max_packet_size = max_packet_size;
 	pipe->desc.direction = direction;
+	pipe->desc.usb3.max_burst = max_burst;
+	pipe->desc.usb3.max_streams = max_streams;
 	pipe->auto_reset_halt = false;
 	pipe->bus_session = bus_session;
@@ -280,5 +284,5 @@
 
 	const int rc = usb_pipe_initialize(pipe, 0, USB_TRANSFER_CONTROL,
-	    CTRL_PIPE_MIN_PACKET_SIZE, USB_DIRECTION_BOTH, 1, bus_session);
+	    CTRL_PIPE_MIN_PACKET_SIZE, USB_DIRECTION_BOTH, 1, 0, 0, bus_session);
 
 	pipe->auto_reset_halt = true;
Index: uspace/lib/usbdev/src/pipesinit.c
===================================================================
--- uspace/lib/usbdev/src/pipesinit.c	(revision 95c675b4aa3fea7b424b73892a90b052c673cfd3)
+++ uspace/lib/usbdev/src/pipesinit.c	(revision f668d602a75538d4476f1df11550b29c815f0af8)
@@ -38,4 +38,5 @@
 #include <usb/dev/request.h>
 #include <usb/usb.h>
+#include <usb/debug.h>
 #include <usb/descriptor.h>
 
@@ -59,4 +60,5 @@
 	NESTING(INTERFACE, HID),
 	NESTING(HID, HID_REPORT),
+	NESTING(ENDPOINT, SSPEED_EP_COMPANION),
 	LAST_NESTING
 };
@@ -70,4 +72,14 @@
 {
 	return descriptor[1] == USB_DESCTYPE_ENDPOINT;
+}
+
+/** Tells whether given descriptor is of superspeed companion type.
+ *
+ * @param descriptor Descriptor in question.
+ * @return Whether the given descriptor is superspeed companion descriptor.
+ */
+static inline bool is_superspeed_companion_descriptor(const uint8_t *descriptor)
+{
+	return descriptor[1] == USB_DESCTYPE_SSPEED_EP_COMPANION;
 }
 
@@ -150,4 +162,5 @@
  * @param interface Interface descriptor under which belongs the @p endpoint.
  * @param endpoint Endpoint descriptor.
+ * @param companion Superspeed companion descriptor.
  * @return Error code.
  */
@@ -156,4 +169,5 @@
     usb_standard_interface_descriptor_t *interface,
     usb_standard_endpoint_descriptor_t *endpoint_desc,
+    usb_superspeed_endpoint_companion_descriptor_t *companion_desc,
     usb_dev_session_t *bus_session)
 {
@@ -194,9 +208,16 @@
 	}
 
+	unsigned max_burst = 0;
+	unsigned max_streams = 0;
+	if(companion_desc) {
+		max_burst = companion_desc->max_burst;
+		max_streams = SS_COMPANION_MAX_STREAMS(companion_desc->attributes);
+	}
+
 	int rc = usb_pipe_initialize(&ep_mapping->pipe,
 	    ep_no, description.transfer_type,
 	    ED_MPS_PACKET_SIZE_GET(
 	        uint16_usb2host(endpoint_desc->max_packet_size)),
-	    description.direction,
+	    description.direction, max_burst, max_streams,
 	    ED_MPS_TRANS_OPPORTUNITIES_GET(
 	        uint16_usb2host(endpoint_desc->max_packet_size)), bus_session);
@@ -207,4 +228,5 @@
 	ep_mapping->present = true;
 	ep_mapping->descriptor = endpoint_desc;
+	ep_mapping->companion_descriptor = companion_desc;
 	ep_mapping->interface = interface;
 
@@ -235,4 +257,12 @@
 	do {
 		if (is_endpoint_descriptor(descriptor)) {
+			/* Check if companion descriptor is present too, it should immediatelly follow. */
+			const uint8_t *companion_desc = usb_dp_get_nested_descriptor(parser,
+				parser_data, descriptor);
+			if (companion_desc && !is_superspeed_companion_descriptor(companion_desc)) {
+				/* Not what we wanted, don't pass it further. */
+				companion_desc = NULL;
+			}
+
 			(void) process_endpoint(mapping, mapping_count,
 			    (usb_standard_interface_descriptor_t *)
@@ -240,4 +270,6 @@
 			    (usb_standard_endpoint_descriptor_t *)
 			        descriptor,
+			    (usb_superspeed_endpoint_companion_descriptor_t *)
+			        companion_desc,
 			    bus_session);
 		}
