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