Index: uspace/drv/bus/usb/usbhub/main.c
===================================================================
--- uspace/drv/bus/usb/usbhub/main.c	(revision c4ba645d0b223a1f77a1ca0075940ff0a2b2f1f6)
+++ uspace/drv/bus/usb/usbhub/main.c	(revision b303275900cbece2de21309e4325cc6373fd5ecd)
@@ -36,4 +36,5 @@
 #include <async.h>
 #include <stdio.h>
+#include <io/logctl.h>
 
 #include <usb/dev/driver.h>
@@ -67,5 +68,5 @@
 	printf(NAME ": HelenOS USB hub driver.\n");
 	log_init(NAME);
-
+	logctl_set_log_level(NAME, LVL_DEBUG);
 	return usb_driver_main(&usb_hub_driver);
 }
Index: uspace/drv/bus/usb/usbhub/port.c
===================================================================
--- uspace/drv/bus/usb/usbhub/port.c	(revision c4ba645d0b223a1f77a1ca0075940ff0a2b2f1f6)
+++ uspace/drv/bus/usb/usbhub/port.c	(revision b303275900cbece2de21309e4325cc6373fd5ecd)
@@ -122,6 +122,6 @@
 	assert(port);
 	fibril_mutex_lock(&port->mutex);
-	port->reset_completed = true;
-	port->reset_okay = false;
+	if (port->reset_status == IN_RESET)
+		port->reset_status = RESET_FAIL;
 	fibril_condvar_broadcast(&port->reset_cv);
 	fibril_mutex_unlock(&port->mutex);
@@ -139,10 +139,10 @@
 	assert(port);
 	assert(hub);
-	usb_log_debug("Interrupt at port %u\n", port->port_number);
+	usb_log_debug2("(%p-%u): Interrupt.\n", hub, port->port_number);
 
 	usb_port_status_t status = 0;
 	const int opResult = get_port_status(port, &status);
 	if (opResult != EOK) {
-		usb_log_error("Failed to get port %u status: %s.\n",
+		usb_log_error("(%p-%u): Failed to get port status: %s.\n", hub,
 		    port->port_number, str_error(opResult));
 		return;
@@ -153,5 +153,5 @@
 		const bool connected =
 		    (status & USB_HUB_PORT_STATUS_CONNECTION) != 0;
-		usb_log_debug("Connection change on port %u: device %s.\n",
+		usb_log_debug("(%p-%u): Connection change: device %s.\n", hub,
 		    port->port_number, connected ? "attached" : "removed");
 
@@ -160,6 +160,7 @@
 		    USB_HUB_FEATURE_C_PORT_CONNECTION);
 		if (opResult != EOK) {
-			usb_log_warning("Failed to clear port-change-connection"
-			    " flag: %s.\n", str_error(opResult));
+			usb_log_warning("(%p-%u): Failed to clear "
+			    "port-change-connection flag: %s.\n", hub,
+			    port->port_number, str_error(opResult));
 		}
 
@@ -168,9 +169,11 @@
 			    usb_port_speed(status));
 			if (opResult != EOK) {
-				usb_log_error(
-				    "Cannot handle change on port %u: %s.\n",
-				    port->port_number, str_error(opResult));
+				usb_log_error("(%p-%u): Cannot handle change on"
+				   " port: %s.\n", hub, port->port_number,
+				   str_error(opResult));
 			}
 		} else {
+			/* Handle the case we were in reset */
+			usb_hub_port_reset_fail(port);
 			/* If enabled change was reported leave the removal
 			 * to that handler, it shall ACK the change too. */
@@ -183,5 +186,6 @@
 	/* Enable change, ports are automatically disabled on errors. */
 	if (status & USB_HUB_PORT_C_STATUS_ENABLED) {
-		usb_log_info("Port %u, disabled because of errors.\n",
+		//TODO: maybe HS reset failed?
+		usb_log_info("(%p-%u): Port disabled because of errors.\n", hub,
 		   port->port_number);
 		usb_hub_port_device_gone(port, hub);
@@ -189,7 +193,7 @@
 		        USB_HUB_FEATURE_C_PORT_ENABLE);
 		if (rc != EOK) {
-			usb_log_error(
-			    "Failed to clear port %u enable change feature: "
-			    "%s.\n", port->port_number, str_error(rc));
+			usb_log_error("(%p-%u): Failed to clear port enable "
+			    "change feature: %s.", hub, port->port_number,
+			    str_error(rc));
 		}
 
@@ -198,13 +202,13 @@
 	/* Suspend change */
 	if (status & USB_HUB_PORT_C_STATUS_SUSPEND) {
-		usb_log_error("Port %u went to suspend state, this should"
-		    "NOT happen as we do not support suspend state!",
+		usb_log_error("(%p-%u): Port went to suspend state, this should"
+		    " NOT happen as we do not support suspend state!", hub,
 		    port->port_number);
 		const int rc = usb_hub_port_clear_feature(port,
 		        USB_HUB_FEATURE_C_PORT_SUSPEND);
 		if (rc != EOK) {
-			usb_log_error(
-			    "Failed to clear port %u suspend change feature: "
-			    "%s.\n", port->port_number, str_error(rc));
+			usb_log_error("(%p-%u): Failed to clear port suspend "
+			    "change feature: %s.", hub, port->port_number,
+			    str_error(rc));
 		}
 	}
@@ -212,4 +216,6 @@
 	/* Over current */
 	if (status & USB_HUB_PORT_C_STATUS_OC) {
+		usb_log_debug("(%p-%u): Port OC reported!.", hub,
+		    port->port_number);
 		/* According to the USB specs:
 		 * 11.13.5 Over-current Reporting and Recovery
@@ -220,7 +226,7 @@
 		    USB_HUB_FEATURE_C_PORT_OVER_CURRENT);
 		if (rc != EOK) {
-			usb_log_error(
-			    "Failed to clear port %u OC change feature: %s.\n",
-			    port->port_number, str_error(rc));
+			usb_log_error("(%p-%u): Failed to clear port OC change "
+			    "feature: %s.\n", hub, port->port_number,
+			    str_error(rc));
 		}
 		if (!(status & ~USB_HUB_PORT_STATUS_OC)) {
@@ -228,7 +234,7 @@
 			    port, USB_HUB_FEATURE_PORT_POWER);
 			if (rc != EOK) {
-				usb_log_error(
-				    "Failed to set port %u power after OC:"
-				    " %s.\n", port->port_number, str_error(rc));
+				usb_log_error("(%p-%u): Failed to set port "
+				    "power after OC: %s.", hub,
+				    port->port_number, str_error(rc));
 			}
 		}
@@ -240,5 +246,5 @@
 	}
 
-	usb_log_debug("Port %u status %#08" PRIx32 "\n",
+	usb_log_debug2("(%p-%u): Port status %#08" PRIx32, hub,
 	    port->port_number, status);
 }
@@ -281,13 +287,13 @@
 	assert(port);
 	fibril_mutex_lock(&port->mutex);
+	const bool enabled = (status & USB_HUB_PORT_STATUS_ENABLED) != 0;
 	/* Finalize device adding. */
-	port->reset_completed = true;
-	port->reset_okay = (status & USB_HUB_PORT_STATUS_ENABLED) != 0;
-
-	if (port->reset_okay) {
+
+	if (enabled) {
+		port->reset_status = RESET_OK;
 		usb_log_debug("Port %u reset complete.\n", port->port_number);
 	} else {
-		usb_log_warning(
-		    "Port %u reset complete but port not enabled.\n",
+		port->reset_status = RESET_FAIL;
+		usb_log_warning("Port %u reset complete but port not enabled.",
 		    port->port_number);
 	}
@@ -298,6 +304,5 @@
 	int rc = usb_hub_port_clear_feature(port, USB_HUB_FEATURE_C_PORT_RESET);
 	if (rc != EOK) {
-		usb_log_error(
-		    "Failed to clear port %u reset change feature: %s.\n",
+		usb_log_error("Failed to clear port %u reset change: %s.",
 		    port->port_number, str_error(rc));
 	}
@@ -352,14 +357,15 @@
 			usb_log_error("Port reset failed: %s.\n",
 			    str_error(rc));
-		} else {
-			/* Wait until reset completes. */
-			fibril_mutex_lock(&port->mutex);
-			while (!port->reset_completed) {
-				fibril_condvar_wait(&port->reset_cv,
-				    &port->mutex);
-			}
-			fibril_mutex_unlock(&port->mutex);
-		}
-		return port->reset_okay ? EOK : ESTALL;
+			return rc;
+		}
+		/* Wait until reset completes. */
+		fibril_mutex_lock(&port->mutex);
+		port->reset_status = IN_RESET;
+		while (port->reset_status == IN_RESET) {
+			fibril_condvar_wait(&port->reset_cv,
+			    &port->mutex);
+		}
+		fibril_mutex_unlock(&port->mutex);
+		return port->reset_status == RESET_OK ? EOK : ESTALL;
 	} else {
 		return usb_hub_port_clear_feature(port,
@@ -387,7 +393,11 @@
 	free(arg);
 
+	usb_log_debug("(%p-%u): New device detected.", hub,
+	    port->port_number);
+
 	async_exch_t *exch = usb_device_bus_exchange_begin(hub->usb_device);
 	if (!exch) {
-		usb_log_error("Failed to begin bus exchange\n");
+		usb_log_error("(%p-%u): Failed to begin bus exchange.", hub,
+		    port->port_number);
 		ret = ENOMEM;
 		goto out;
@@ -399,12 +409,14 @@
 	}
 	if (ret != EOK) {
-		usb_log_error("Failed to reserve default address: %s\n",
-		    str_error(ret));
+		usb_log_error("(%p-%u): Failed to reserve default address: %s",
+		    hub, port->port_number, str_error(ret));
 		goto out;
 	}
 
+	usb_log_debug("(%p-%u): Got default address reseting port.", hub,
+	    port->port_number);
 	/* Reset port */
-	port_enable(port, true);
-	if (!port->reset_completed || !port->reset_okay) {
+	ret = port_enable(port, true);
+	if (ret != EOK) {
 		usb_log_error("Failed to reset port %u\n", port->port_number);
 		if (usb_release_default_address(exch) != EOK)
@@ -413,24 +425,30 @@
 		goto out;
 	}
+	usb_log_debug("(%p-%u): Port reset, enumerating device", hub,
+	    port->port_number);
 
 	ret = usb_device_enumerate(exch, port->port_number);
 	if (ret != EOK) {
-		usb_log_error("Failed to enumerate device on port %u: %s",
+		usb_log_error("(%p-%u): Failed to enumerate device: %s", hub,
 		    port->port_number, str_error(ret));
 		const int ret = port_enable(port, false);
 		if (ret != EOK) {
-			usb_log_warning("Failed to disable port %u (%s), NOT "
-			    "releasing default address.", port->port_number,
-			    str_error(ret));
+			usb_log_warning("(%p-%u)Failed to disable port (%s), "
+			    "NOT releasing default address.", hub,
+			    port->port_number, str_error(ret));
 		} else {
 			const int ret = usb_release_default_address(exch);
 			if (ret != EOK)
-				usb_log_warning("Failed to release default "
-				    "address: %s", str_error(ret));
+				usb_log_warning("(%p-%u): Failed to release "
+				    "default address: %s", hub,
+				    port->port_number, str_error(ret));
 		}
 	} else {
+		usb_log_debug("(%p-%u): Device enumerated", hub,
+		    port->port_number);
 		port->device_attached = true;
 		if (usb_release_default_address(exch) != EOK)
-			usb_log_warning("Failed to release default address\n");
+			usb_log_warning("(%p-%u): Failed to release default "
+			    "address", hub, port->port_number);
 	}
 out:
@@ -469,8 +487,4 @@
 	data->speed = speed;
 
-	fibril_mutex_lock(&port->mutex);
-	port->reset_completed = false;
-	fibril_mutex_unlock(&port->mutex);
-
 	fid_t fibril = fibril_create(add_device_phase1_worker_fibril, data);
 	if (fibril == 0) {
Index: uspace/drv/bus/usb/usbhub/port.h
===================================================================
--- uspace/drv/bus/usb/usbhub/port.h	(revision c4ba645d0b223a1f77a1ca0075940ff0a2b2f1f6)
+++ uspace/drv/bus/usb/usbhub/port.h	(revision b303275900cbece2de21309e4325cc6373fd5ecd)
@@ -52,10 +52,13 @@
 	/** CV for waiting to port reset completion. */
 	fibril_condvar_t reset_cv;
-	/** Whether port reset is completed.
+	/** Port reset status.
 	 * Guarded by @c reset_mutex.
 	 */
-	bool reset_completed;
-	/** Whether to announce the port reset as successful. */
-	bool reset_okay;
+	enum {
+		NO_RESET,
+		IN_RESET,
+		RESET_OK,
+		RESET_FAIL,
+	} reset_status;
 	/** Device reported to USB bus driver */
 	bool device_attached;
@@ -72,6 +75,5 @@
 	port->port_number = port_number;
 	port->control_pipe = control_pipe;
-	port->reset_completed = false;
-	port->reset_okay = false;
+	port->reset_status = NO_RESET;
 	port->device_attached = false;
 	fibril_mutex_initialize(&port->mutex);
