dwc3 uncached wip

Change-Id: I37000c89e2c5cf90fb500510a3bb60932f00e165
diff --git a/system/dev/usb/dwc3/dwc3-endpoints.c b/system/dev/usb/dwc3/dwc3-endpoints.c
index add0ece..95bb5d2 100644
--- a/system/dev/usb/dwc3/dwc3-endpoints.c
+++ b/system/dev/usb/dwc3/dwc3-endpoints.c
@@ -43,7 +43,8 @@
     dwc3_fifo_t* fifo = &ep->fifo;
 
     static_assert(EP_FIFO_SIZE <= PAGE_SIZE, "");
-    zx_status_t status = io_buffer_init(&fifo->buffer, EP_FIFO_SIZE, IO_BUFFER_RW | IO_BUFFER_CONTIG);
+    zx_status_t status = io_buffer_init(&fifo->buffer, EP_FIFO_SIZE,
+                                        IO_BUFFER_RW | IO_BUFFER_CONTIG | IO_BUFFER_UNCACHED);
     if (status != ZX_OK) {
         return status;
     }
@@ -60,7 +61,6 @@
     trb->ptr_high = (uint32_t)(trb_phys >> 32);
     trb->status = 0;
     trb->control = TRB_TRBCTL_LINK | TRB_HWO;
-    io_buffer_cache_flush(&ep->fifo.buffer, (trb - ep->fifo.first) * sizeof(*trb), sizeof(*trb));
 
     return ZX_OK;
 }
@@ -91,7 +91,6 @@
     trb->ptr_high = (uint32_t)(buffer >> 32);
     trb->status = TRB_BUFSIZ(length);
     trb->control = type | TRB_LST | TRB_IOC | TRB_HWO;
-    io_buffer_cache_flush(&ep->fifo.buffer, (trb - ep->fifo.first) * sizeof(*trb), sizeof(*trb));
 
     dwc3_cmd_ep_start_transfer(dwc, ep_num, dwc3_ep_trb_phys(ep, trb));
 }
@@ -242,8 +241,6 @@
 
 static void dwc_ep_read_trb(dwc3_endpoint_t* ep, dwc3_trb_t* trb, dwc3_trb_t* out_trb) {
     if (trb >= ep->fifo.first && trb < ep->fifo.last) {
-        io_buffer_cache_flush_invalidate(&ep->fifo.buffer, (trb - ep->fifo.first) * sizeof(*trb),
-                                         sizeof(*trb));
         memcpy((void *)out_trb, (void *)trb, sizeof(*trb));
     } else {
         zxlogf(ERROR, "dwc_ep_read_trb: bad trb\n");
diff --git a/system/dev/usb/dwc3/dwc3-events.c b/system/dev/usb/dwc3/dwc3-events.c
index 345bf69..9584875 100644
--- a/system/dev/usb/dwc3/dwc3-events.c
+++ b/system/dev/usb/dwc3/dwc3-events.c
@@ -198,9 +198,6 @@
         // read number of new bytes in the event buffer
         uint32_t event_count;
         while ((event_count = DWC3_READ32(mmio + GEVNTCOUNT(0)) & GEVNTCOUNT_EVNTCOUNT_MASK) > 0) {
-            // invalidate cache so we can read fresh events
-            pdev_vmo_buffer_cache_flush_invalidate(&dwc->event_buffer, 0, EVENT_BUFFER_SIZE);
-
             for (unsigned i = 0; i < event_count; i += sizeof(uint32_t)) {
                 uint32_t event = *ring_cur++;
                 if (ring_cur == ring_end) {
diff --git a/system/dev/usb/dwc3/dwc3.c b/system/dev/usb/dwc3/dwc3.c
index b964229..b2b5965 100644
--- a/system/dev/usb/dwc3/dwc3.c
+++ b/system/dev/usb/dwc3/dwc3.c
@@ -425,12 +425,11 @@
     }
 
     status = pdev_map_contig_buffer(&dwc->pdev, EVENT_BUFFER_SIZE, 0, ZX_VM_FLAG_PERM_READ,
-                                    ZX_CACHE_POLICY_CACHED, &dwc->event_buffer);
+                                    ZX_CACHE_POLICY_UNCACHED, &dwc->event_buffer);
     if (status != ZX_OK) {
         zxlogf(ERROR, "dwc3_bind: pdev_map_contig_buffer failed\n");
         goto fail;
     }
-    pdev_vmo_buffer_cache_flush(&dwc->event_buffer, 0, EVENT_BUFFER_SIZE);
 
     status = pdev_map_contig_buffer(&dwc->pdev, 65536, 0,
                                     ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_WRITE,