Index: uspace/drv/bus/usb/xhci/commands.c
===================================================================
--- uspace/drv/bus/usb/xhci/commands.c	(revision 2b3547888594843410a5d82a14955a508d74aa1f)
+++ uspace/drv/bus/usb/xhci/commands.c	(revision 3cbc13810aff9f4cf30104fc6ba3bacf0af5eb1b)
@@ -262,18 +262,20 @@
 	}
 
+	/* Semantics of NO_OP_CMD is that success is marked as a TRB error. */
+	if (command->_header.cmd == XHCI_CMD_NO_OP && code == XHCI_TRBC_TRB_ERROR)
+		code = XHCI_TRBC_SUCCESS;
+
 	command->status = code;
 	command->slot_id = TRB_GET_SLOT(*trb);
 
 	usb_log_debug2("Completed command trb: %s", xhci_trb_str_type(TRB_TYPE(command->_header.trb)));
-	if (TRB_TYPE(command->_header.trb) != XHCI_TRB_TYPE_NO_OP_CMD) {
-		if (code != XHCI_TRBC_SUCCESS) {
-			report_error(code);
-			xhci_dump_trb(&command->_header.trb);
-		}
+
+	if (code != XHCI_TRBC_SUCCESS) {
+		report_error(code);
+		xhci_dump_trb(&command->_header.trb);
 	}
 
 	switch (TRB_TYPE(command->_header.trb)) {
 	case XHCI_TRB_TYPE_NO_OP_CMD:
-		assert(code == XHCI_TRBC_TRB_ERROR);
 		break;
 	case XHCI_TRB_TYPE_ENABLE_SLOT_CMD:
@@ -585,5 +587,5 @@
 	}
 
-	return EOK;
+	return cmd->status == XHCI_TRBC_SUCCESS ? EOK : EINVAL;
 }
 
