Index: uspace/drv/uhci-hcd/uhci_hc.c
===================================================================
--- uspace/drv/uhci-hcd/uhci_hc.c	(revision 87037c4823f8e34bed351cc54a8e4af9af524041)
+++ uspace/drv/uhci-hcd/uhci_hc.c	(revision fcc525d1eff9d820732245a991f6cf99dcba9945)
@@ -97,4 +97,6 @@
 
 	instance->hw_interrupts = interrupts;
+	instance->hw_failures = 0;
+
 	/* Setup UHCI function. */
 	instance->ddf_instance = fun;
@@ -360,10 +362,18 @@
 	/* bits 4 and 5 indicate hc error */
 	if (status & 0x18) {
+		usb_log_error("UHCI hardware failure!.\n");
+		++instance->hw_failures;
 		transfer_list_abort_all(&instance->transfers_interrupt);
 		transfer_list_abort_all(&instance->transfers_control_slow);
 		transfer_list_abort_all(&instance->transfers_control_full);
 		transfer_list_abort_all(&instance->transfers_bulk_full);
-		/* reinitialize hw, this triggers virtual disconnect*/
-		uhci_hc_init_hw(instance);
+
+		if (instance->hw_failures < UHCI_ALLOWED_HW_FAIL) {
+			/* reinitialize hw, this triggers virtual disconnect*/
+			uhci_hc_init_hw(instance);
+		} else {
+			usb_log_fatal("Too many UHCI hardware failures!.\n");
+			uhci_hc_fini(instance);
+		}
 	}
 }
Index: uspace/drv/uhci-hcd/uhci_hc.h
===================================================================
--- uspace/drv/uhci-hcd/uhci_hc.h	(revision 87037c4823f8e34bed351cc54a8e4af9af524041)
+++ uspace/drv/uhci-hcd/uhci_hc.h	(revision fcc525d1eff9d820732245a991f6cf99dcba9945)
@@ -80,4 +80,5 @@
 #define UHCI_CLEANER_TIMEOUT 10000
 #define UHCI_DEBUGER_TIMEOUT 5000000
+#define UHCI_ALLOWED_HW_FAIL 5
 
 typedef struct uhci_hc {
@@ -100,4 +101,5 @@
 	fid_t debug_checker;
 	bool hw_interrupts;
+	unsigned hw_failures;
 
 	ddf_fun_t *ddf_instance;
