Index: uspace/drv/bus/usb/xhci/hc.c
===================================================================
--- uspace/drv/bus/usb/xhci/hc.c	(revision 2c0564c67df2bfa02f0f8a115f7c2a3028a3b21a)
+++ uspace/drv/bus/usb/xhci/hc.c	(revision 0577066660ce1e30ed4d91fc1335280501a120db)
@@ -504,9 +504,5 @@
 	XHCI_REG_SET(hc->op_regs, XHCI_OP_RS, 1);
 
-	/* The reset changed status of all ports, and SW originated reason does
-	 * not cause an interrupt.
-	 */
-	for (uint8_t port = 1; port <= hc->rh.max_ports; ++port)
-		xhci_rh_handle_port_change(&hc->rh, port);
+	xhci_rh_startup(&hc->rh);
 
 	return EOK;
Index: uspace/drv/bus/usb/xhci/rh.c
===================================================================
--- uspace/drv/bus/usb/xhci/rh.c	(revision 2c0564c67df2bfa02f0f8a115f7c2a3028a3b21a)
+++ uspace/drv/bus/usb/xhci/rh.c	(revision 0577066660ce1e30ed4d91fc1335280501a120db)
@@ -224,5 +224,5 @@
 			status &= ~XHCI_REG_MASK(XHCI_PORT_CSC);
 
-			bool connected = !!(status & XHCI_REG_MASK(XHCI_PORT_CCS));
+			const bool connected = !!(status & XHCI_REG_MASK(XHCI_PORT_CCS));
 			if (connected) {
 				usb_port_connected(&port->base, &rh_enumerate_device);
@@ -234,6 +234,6 @@
 		if (status & XHCI_REG_MASK(XHCI_PORT_PRC)) {
 			status &= ~XHCI_REG_MASK(XHCI_PORT_PRC);
-			bool enabled = !!(status & XHCI_REG_MASK(XHCI_PORT_PED));
-
+
+			const bool enabled = !!(status & XHCI_REG_MASK(XHCI_PORT_PED));
 			if (enabled) {
 				usb_port_enabled(&port->base);
@@ -258,4 +258,24 @@
 }
 
+void xhci_rh_startup(xhci_rh_t *rh)
+{
+	/* The reset changed status of all ports, and SW originated reason does
+	 * not cause an interrupt.
+	 */
+	for (uint8_t i = 1; i < rh->max_ports; ++i) {
+		xhci_rh_handle_port_change(rh, i + 1);
+
+		rh_port_t * const port = &rh->ports[i];
+
+		/*
+		 * When xHCI starts, for some reasons USB 3 ports do not have
+		 * the CSC bit, even though they are connected. Try to find
+		 * such ports.
+		 */
+		if (XHCI_REG_RD(port->regs, XHCI_PORT_CCS) && port->base.state == PORT_DISABLED)
+			usb_port_connected(&port->base, &rh_enumerate_device);
+	}
+}
+
 /**
  * @}
Index: uspace/drv/bus/usb/xhci/rh.h
===================================================================
--- uspace/drv/bus/usb/xhci/rh.h	(revision 2c0564c67df2bfa02f0f8a115f7c2a3028a3b21a)
+++ uspace/drv/bus/usb/xhci/rh.h	(revision 0577066660ce1e30ed4d91fc1335280501a120db)
@@ -80,4 +80,5 @@
 void xhci_rh_handle_port_change(xhci_rh_t *, uint8_t);
 void xhci_rh_set_ports_protocol(xhci_rh_t *, unsigned, unsigned, unsigned);
+void xhci_rh_startup(xhci_rh_t *);
 
 #endif
