Index: uspace/drv/bus/usb/ohci/hc.c
===================================================================
--- uspace/drv/bus/usb/ohci/hc.c	(revision 19746a9652979f3c98e4a326025b7ecd1261599d)
+++ uspace/drv/bus/usb/ohci/hc.c	(revision f8dfb40e4825d7bc700afd6df75981fc2bc4c435)
@@ -565,5 +565,5 @@
 
 	/*Init HCCA */
-	instance->hcca = malloc32(sizeof(hcca_t));
+	instance->hcca = hcca_get();
 	if (instance->hcca == NULL)
 		return ENOMEM;
Index: uspace/drv/bus/usb/ohci/hw_struct/hcca.h
===================================================================
--- uspace/drv/bus/usb/ohci/hw_struct/hcca.h	(revision 19746a9652979f3c98e4a326025b7ecd1261599d)
+++ uspace/drv/bus/usb/ohci/hw_struct/hcca.h	(revision f8dfb40e4825d7bc700afd6df75981fc2bc4c435)
@@ -36,4 +36,5 @@
 
 #include <stdint.h>
+#include <malloc.h>
 
 /** Host controller communication area.
@@ -48,4 +49,9 @@
 } __attribute__((packed, aligned)) hcca_t;
 
+static inline void * hcca_get(void)
+{
+	assert(sizeof(hcca_t) == 256);
+	return memalign(256, sizeof(hcca_t));
+}
 #endif
 /**
Index: uspace/drv/bus/usb/ohci/utils/malloc32.h
===================================================================
--- uspace/drv/bus/usb/ohci/utils/malloc32.h	(revision 19746a9652979f3c98e4a326025b7ecd1261599d)
+++ uspace/drv/bus/usb/ohci/utils/malloc32.h	(revision f8dfb40e4825d7bc700afd6df75981fc2bc4c435)
@@ -41,4 +41,10 @@
 #include <as.h>
 
+/* Generic TDs and EDs require 16byte alignment,
+ * Isochronous TD require 32byte alignment,
+ * buffers do not have to be aligned.
+ */
+#define OHCI_ALIGN 32
+
 /** Get physical address translation
  *
@@ -62,5 +68,5 @@
  */
 static inline void * malloc32(size_t size)
-	{ return memalign(size, size); }
+	{ return memalign(OHCI_ALIGN, size); }
 /*----------------------------------------------------------------------------*/
 /** Physical mallocator simulator
