Index: uspace/drv/bus/usb/xhci/rh.c
===================================================================
--- uspace/drv/bus/usb/xhci/rh.c	(revision cb6385404a7e6bb2874b9471adfd50a503308af1)
+++ uspace/drv/bus/usb/xhci/rh.c	(revision 58f4c0fc4eecabe73ea09902fd92e2d3098b337b)
@@ -62,4 +62,8 @@
 	XHCI_REG_MASK(XHCI_PORT_CEC);
 
+static const uint32_t port_reset_mask =
+	XHCI_REG_MASK(XHCI_PORT_WRC) |
+	XHCI_REG_MASK(XHCI_PORT_PRC);
+
 typedef struct rh_port {
 	usb_port_t base;
@@ -133,4 +137,9 @@
 		if ((err = usb_port_wait_for_enabled(&port->base)))
 			return err;
+	} else {
+		/* Do the Warm reset to ensure the state is clear. */
+		XHCI_REG_SET(port->regs, XHCI_PORT_WPR, 1);
+		if ((err = usb_port_wait_for_enabled(&port->base)))
+			return err;
 	}
 
@@ -220,9 +229,11 @@
 		XHCI_REG_WR_FIELD(&port->regs->portsc, status & ~XHCI_REG_MASK(XHCI_PORT_PED), 32);
 
+		const bool connected = !!(status & XHCI_REG_MASK(XHCI_PORT_CCS));
+		const bool enabled = !!(status & XHCI_REG_MASK(XHCI_PORT_PED));
+
 		if (status & XHCI_REG_MASK(XHCI_PORT_CSC)) {
 			usb_log_info("Connected state changed on port %u.", port_id);
 			status &= ~XHCI_REG_MASK(XHCI_PORT_CSC);
 
-			const bool connected = !!(status & XHCI_REG_MASK(XHCI_PORT_CCS));
 			if (connected) {
 				usb_port_connected(&port->base, &rh_enumerate_device);
@@ -232,8 +243,7 @@
 		}
 
-		if (status & XHCI_REG_MASK(XHCI_PORT_PRC)) {
-			status &= ~XHCI_REG_MASK(XHCI_PORT_PRC);
-
-			const bool enabled = !!(status & XHCI_REG_MASK(XHCI_PORT_PED));
+		if (status & port_reset_mask) {
+			status &= ~port_reset_mask;
+
 			if (enabled) {
 				usb_port_enabled(&port->base);
