Index: uspace/drv/bus/usb/xhci/hc.c
===================================================================
--- uspace/drv/bus/usb/xhci/hc.c	(revision b19131c5be03b6e707aa8ef10e4edfec19f0a4d6)
+++ uspace/drv/bus/usb/xhci/hc.c	(revision 3256a6cb834a903c2e4e360b9e5739bd11cf76a6)
@@ -401,5 +401,5 @@
 	}
 
-	/* Update the ERDP to make room inthe ring */
+	/* Update the ERDP to make room in the ring */
 	uint64_t erstptr = addr_to_phys(hc->event_ring.erst);
 	XHCI_REG_WR(intr, XHCI_INTR_ERDP_LO, LOWER32(erstptr));
@@ -433,9 +433,26 @@
 }
 
+static void hc_dcbaa_fini(xhci_hc_t *hc)
+{
+	xhci_scratchpad_free(hc);
+
+	/**
+	 * Idx 0 already deallocated by xhci_scratchpad_free.
+	 */
+	for (int i = 1; i < hc->max_slots + 1; ++i) {
+		if (hc->dcbaa[i] != NULL) {
+			free32(hc->dcbaa[i]);
+			hc->dcbaa[i] = NULL;
+		}
+	}
+
+	free32(hc->dcbaa);
+}
+
 void hc_fini(xhci_hc_t *hc)
 {
 	xhci_trb_ring_fini(&hc->command_ring);
 	xhci_event_ring_fini(&hc->event_ring);
-	xhci_scratchpad_free(hc);
+	hc_dcbaa_fini(hc);
 	pio_disable(hc->base, RNGSZ(hc->mmio_range));
 	usb_log_info("HC(%p): Finalized.", hc);
