Index: uspace/drv/bus/usb/xhci/commands.c
===================================================================
--- uspace/drv/bus/usb/xhci/commands.c	(revision e7f21884042a1982eca8bad23a6e3328530c1d9a)
+++ uspace/drv/bus/usb/xhci/commands.c	(revision fb28cde1075c08986da7cc9359ec7b201058d6d2)
@@ -546,8 +546,4 @@
 	TRB_SET_DEQUEUE_PTR(cmd->_header.trb, cmd->dequeue_ptr);
 
-	/**
-	 * TODO: Set DCS (see section 4.6.10).
-	 */
-
 	return enqueue_command(hc, cmd);
 }
Index: uspace/drv/bus/usb/xhci/hc.c
===================================================================
--- uspace/drv/bus/usb/xhci/hc.c	(revision e7f21884042a1982eca8bad23a6e3328530c1d9a)
+++ uspace/drv/bus/usb/xhci/hc.c	(revision fb28cde1075c08986da7cc9359ec7b201058d6d2)
@@ -477,7 +477,6 @@
 	XHCI_REG_WR(hc->op_regs, XHCI_OP_MAX_SLOTS_EN, hc->max_slots);
 
-	uint64_t crcr = xhci_trb_ring_get_dequeue_ptr(&hc->cr.trb_ring);
-	if (hc->cr.trb_ring.pcs)
-		crcr |= XHCI_REG_MASK(XHCI_OP_RCS);
+	uintptr_t crcr;
+	xhci_trb_ring_reset_dequeue_state(&hc->cr.trb_ring, &crcr);
 	XHCI_REG_WR(hc->op_regs, XHCI_OP_CRCR_LO, LOWER32(crcr));
 	XHCI_REG_WR(hc->op_regs, XHCI_OP_CRCR_HI, UPPER32(crcr));
Index: uspace/drv/bus/usb/xhci/trb_ring.c
===================================================================
--- uspace/drv/bus/usb/xhci/trb_ring.c	(revision e7f21884042a1982eca8bad23a6e3328530c1d9a)
+++ uspace/drv/bus/usb/xhci/trb_ring.c	(revision fb28cde1075c08986da7cc9359ec7b201058d6d2)
@@ -272,4 +272,14 @@
 }
 
+void xhci_trb_ring_reset_dequeue_state(xhci_trb_ring_t *ring, uintptr_t *addr)
+{
+	assert(ring);
+
+	ring->dequeue = trb_ring_enqueue_phys(ring);
+
+	if (addr)
+		*addr = ring->dequeue | ring->pcs;
+}
+
 /**
  * Initializes an event ring.
Index: uspace/drv/bus/usb/xhci/trb_ring.h
===================================================================
--- uspace/drv/bus/usb/xhci/trb_ring.h	(revision e7f21884042a1982eca8bad23a6e3328530c1d9a)
+++ uspace/drv/bus/usb/xhci/trb_ring.h	(revision fb28cde1075c08986da7cc9359ec7b201058d6d2)
@@ -79,11 +79,5 @@
 int xhci_trb_ring_enqueue_multiple(xhci_trb_ring_t *, xhci_trb_t *, size_t, uintptr_t *);
 
-/**
- * Get the initial value to fill into CRCR.
- */
-static inline uintptr_t xhci_trb_ring_get_dequeue_ptr(xhci_trb_ring_t *ring)
-{
-	return ring->dequeue;
-}
+void xhci_trb_ring_reset_dequeue_state(xhci_trb_ring_t *ring, uintptr_t *addr);
 
 /**
@@ -94,6 +88,4 @@
 	ring->dequeue = phys;
 }
-
-uintptr_t xhci_trb_ring_get_dequeue_ptr(xhci_trb_ring_t *);
 
 /**
