Title: [5815] trunk/arch/blackfin/kernel/bfin_dma_5xx.c: push cache flushing up to dma_memcpy() so that we call the flush functions just once
Revision
5815
Author
vapier
Date
2008-12-04 06:05:32 -0600 (Thu, 04 Dec 2008)

Log Message

push cache flushing up to dma_memcpy() so that we call the flush functions just once

Modified Paths

Diff

Modified: trunk/arch/blackfin/kernel/bfin_dma_5xx.c (5814 => 5815)


--- trunk/arch/blackfin/kernel/bfin_dma_5xx.c	2008-12-04 11:57:02 UTC (rev 5814)
+++ trunk/arch/blackfin/kernel/bfin_dma_5xx.c	2008-12-04 12:05:32 UTC (rev 5815)
@@ -304,7 +304,7 @@
  *	_dma_memcpy - translate C memcpy settings into MDMA settings
  *
  * Handle all the high level steps before we touch the MDMA registers.  So
- * handle caching, tweaking of sizes, and formatting of addresses.
+ * handle direction, tweaking of sizes, and formatting of addresses.
  */
 static void *_dma_memcpy(void *pdst, const void *psrc, size_t size)
 {
@@ -316,12 +316,6 @@
 	if (size == 0)
 		return NULL;
 
-	if (bfin_addr_dcachable(src))
-		blackfin_dcache_flush_range(src, src + size);
-
-	if (bfin_addr_dcachable(dst))
-		blackfin_dcache_invalidate_range(dst, dst + size);
-
 	if (dst % 4 == 0 && src % 4 == 0 && size % 4 == 0) {
 		conf = WDSIZE_32;
 		shift = 2;
@@ -360,15 +354,24 @@
  * up into two pieces.  The first transfer is in multiples of 64k and the
  * second transfer is the piece smaller than 64k.
  */
-void *dma_memcpy(void *dst, const void *src, size_t size)
+void *dma_memcpy(void *pdst, const void *psrc, size_t size)
 {
+	unsigned long dst = (unsigned long)pdst;
+	unsigned long src = "" long)psrc;
 	size_t bulk, rest;
+
+	if (bfin_addr_dcachable(src))
+		blackfin_dcache_flush_range(src, src + size);
+
+	if (bfin_addr_dcachable(dst))
+		blackfin_dcache_invalidate_range(dst, dst + size);
+
 	bulk = size & ~0xffff;
 	rest = size - bulk;
 	if (bulk)
-		_dma_memcpy(dst, src, bulk);
-	_dma_memcpy(dst + bulk, src + bulk, rest);
-	return dst;
+		_dma_memcpy(pdst, psrc, bulk);
+	_dma_memcpy(pdst + bulk, psrc + bulk, rest);
+	return pdst;
 }
 EXPORT_SYMBOL(dma_memcpy);
 
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
http://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to