Title: [7857] trunk/arch/blackfin/kernel/dma-mapping.c: task [#4617], fulfill streaming DMA mapping in blackfin
Revision
7857
Author
bhsong
Date
2009-11-22 23:13:18 -0500 (Sun, 22 Nov 2009)

Log Message

task [#4617], fulfill streaming DMA mapping in blackfin

update according to Sonic's comments:
delete cache flushing before invalidating since invalidating
cache will flush cache too on blackfin

Modified Paths

Diff

Modified: trunk/arch/blackfin/kernel/dma-mapping.c (7856 => 7857)


--- trunk/arch/blackfin/kernel/dma-mapping.c	2009-11-23 03:47:24 UTC (rev 7856)
+++ trunk/arch/blackfin/kernel/dma-mapping.c	2009-11-23 04:13:18 UTC (rev 7857)
@@ -122,22 +122,20 @@
 
 dma_addr_t
 dma_map_single(struct device *dev, void *ptr, size_t size,
-	       enum dma_data_direction direction)
+		enum dma_data_direction direction)
 {
 	switch (direction) {
 	case DMA_NONE:
 		BUG();
-	case DMA_FROM_DEVICE:           /* invalidate only */
-		invalidate_dcache_range((dma_addr_t)ptr,
-				(dma_addr_t)ptr + size);
-		break;
 	case DMA_TO_DEVICE:		/* writeback only */
 		flush_dcache_range((dma_addr_t)ptr,
 				(dma_addr_t)ptr + size);
 		break;
-	case DMA_BIDIRECTIONAL:	/* writeback and invalidate */
-		flush_dcache_range((dma_addr_t)ptr,
-				(dma_addr_t)ptr + size);
+	case DMA_FROM_DEVICE: /* invalidate only */
+	case DMA_BIDIRECTIONAL: /* flush and invalidate */
+		/*
+		 * for blackfin, invalidating cache will flush cache too
+		 */
 		invalidate_dcache_range((dma_addr_t)ptr,
 				(dma_addr_t)ptr + size);
 		break;
@@ -156,13 +154,6 @@
 	switch (direction) {
 	case DMA_NONE:
 		BUG();
-	case DMA_FROM_DEVICE:            /* invalidate only */
-		for (i = 0; i < nents; i++, sg++) {
-			sg->dma_address = (dma_addr_t) sg_virt(sg);
-			invalidate_dcache_range(sg->dma_address,
-					  sg->dma_address + sg_dma_len(sg));
-		}
-		break;
 	case DMA_TO_DEVICE:		/* writeback only */
 		for (i = 0; i < nents; i++, sg++) {
 			sg->dma_address = (dma_addr_t) sg_virt(sg);
@@ -170,12 +161,15 @@
 					   sg->dma_address + sg_dma_len(sg));
 		}
 		break;
+	case DMA_FROM_DEVICE:   /* invalidate only */
 	case DMA_BIDIRECTIONAL:	/* writeback and invalidate */
+		/*
+		 * for blackfin, invalidating cache will flush cache too
+		 */
 		for (i = 0; i < nents; i++, sg++) {
-			flush_dcache_range(sg->dma_address,
-					   sg->dma_address + sg_dma_len(sg));
+			sg->dma_address = (dma_addr_t) sg_virt(sg);
 			invalidate_dcache_range(sg->dma_address,
-					   sg->dma_address + sg_dma_len(sg));
+					sg->dma_address + sg_dma_len(sg));
 		}
 		break;
 	}
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to