Index: uspace/drv/bus/usb/xhci/hw_struct/trb.h
===================================================================
--- uspace/drv/bus/usb/xhci/hw_struct/trb.h	(revision 41df71f99dd4001594df602dcc612186bdf02430)
+++ uspace/drv/bus/usb/xhci/hw_struct/trb.h	(revision 887c9de5f836c82ec8e346f31ea8cdcb96c40903)
@@ -40,4 +40,5 @@
 
 #include "common.h"
+#include <libarch/barrier.h>
 
 /**
@@ -169,5 +170,5 @@
 }
 
-static inline void xhci_trb_copy(xhci_trb_t *dst, xhci_trb_t *src)
+static inline void xhci_trb_copy_to_pio(xhci_trb_t *dst, xhci_trb_t *src)
 {
 	/*
@@ -177,4 +178,7 @@
 	dst->parameter = src->parameter;
 	dst->status = src->status;
+
+	write_barrier();
+
 	dst->control = src->control;
 }
Index: uspace/drv/bus/usb/xhci/trb_ring.c
===================================================================
--- uspace/drv/bus/usb/xhci/trb_ring.c	(revision 41df71f99dd4001594df602dcc612186bdf02430)
+++ uspace/drv/bus/usb/xhci/trb_ring.c	(revision 887c9de5f836c82ec8e346f31ea8cdcb96c40903)
@@ -218,5 +218,5 @@
 	for (size_t i = 0; i < trbs; ++i, ++trb) {
 		TRB_SET_CYCLE(*trb, ring->pcs);
-		xhci_trb_copy(ring->enqueue_trb, trb);
+		xhci_trb_copy_to_pio(ring->enqueue_trb, trb);
 
 		usb_log_debug2("TRB ring(%p): Enqueued TRB %p", ring, trb);
