shithub: riscv

Download patch

ref: 6fb9ae8f4356f6b17f15894491d6339245dcd8ec
parent: 50850cf4b93d0a1b3a543a260c367dbf5f3209c1
author: cinap_lenrek <[email protected]>
date: Sat Sep 5 06:14:19 EDT 2015

usbehci: clean cache unconditionally before handing a buffer to the hardware

even in the read case, we need to clean the cache
so the cpu will not flush out old changes while
the hardware updates the buffer.

--- a/sys/src/9/port/usbehci.c
+++ b/sys/src/9/port/usbehci.c
@@ -2171,11 +2171,10 @@
 		td->buff = (*ctlr->dmaalloc)(count+0x1000);
 		td->data = (uchar*)ROUND((uintptr)td->buff, 0x1000);
 	}
-	if(a != nil && count > 0){
+	if(a != nil && count > 0)
 		memmove(td->data, a, count);
-		if(ctlr->dmaflush != nil && td->buff != nil)
-			(*ctlr->dmaflush)(1, td->data, count);
-	}
+	if(ctlr->dmaflush != nil && td->buff != nil)
+		(*ctlr->dmaflush)(1, td->data, count);
 	pa = PADDR(td->data);
 	for(i = 0; i < nelem(td->buffer); i++){
 		td->buffer[i] = pa;