Index: uspace/drv/bus/usb/xhci/hc.c
===================================================================
--- uspace/drv/bus/usb/xhci/hc.c	(revision aee352ca428c9cc2888b4f9f80203953aec66072)
+++ uspace/drv/bus/usb/xhci/hc.c	(revision a06fd64032f04d90ea9522e695c22b49ca90838b)
@@ -358,4 +358,6 @@
 	async_usleep(1000);
 	xhci_dump_state(hc);
+	async_usleep(10000);
+	xhci_send_no_op_command(hc, NULL);
 
 	xhci_dump_trb(hc->event_ring.dequeue_trb);
@@ -384,4 +386,6 @@
 	xhci_trb_t trb;
 
+	// TODO: Apparently we are supposed to process events until ering is empty
+	//       and then update the erdp?
 	err = xhci_event_ring_dequeue(event_ring, &trb);;
 
@@ -401,7 +405,9 @@
 
 	/* Update the ERDP to make room in the ring */
+	hc->event_ring.dequeue_ptr = host2xhci(64, addr_to_phys(hc->event_ring.dequeue_trb));
 	uint64_t erdp = hc->event_ring.dequeue_ptr;
 	XHCI_REG_WR(intr, XHCI_INTR_ERDP_LO, LOWER32(erdp));
 	XHCI_REG_WR(intr, XHCI_INTR_ERDP_HI, UPPER32(erdp));
+	XHCI_REG_SET(intr, XHCI_INTR_ERDP_EHB, 1);
 }
 
Index: uspace/drv/bus/usb/xhci/hw_struct/regs.h
===================================================================
--- uspace/drv/bus/usb/xhci/hw_struct/regs.h	(revision aee352ca428c9cc2888b4f9f80203953aec66072)
+++ uspace/drv/bus/usb/xhci/hw_struct/regs.h	(revision a06fd64032f04d90ea9522e695c22b49ca90838b)
@@ -461,4 +461,7 @@
 #define XHCI_INTR_ERSTBA_LO  erstba_lo, 32, FIELD
 #define XHCI_INTR_ERSTBA_HI  erstba_hi, 32, FIELD
+#define XHCI_INTR_ERDP_ESI     erdp_lo, 32, RANGE,  2, 0
+#define XHCI_INTR_ERDP_EHB     erdp_lo, 32,  FLAG,  3
+// TODO: ERDP_LO is supposed to be RANGE 31, 4 (section 5.5.2.3.3).
 #define XHCI_INTR_ERDP_LO      erdp_lo, 32, FIELD
 #define XHCI_INTR_ERDP_HI      erdp_hi, 32, FIELD
