summaryrefslogtreecommitdiffstats
path: root/target/linux/cns3xxx/patches-2.6.31/300-flush_cache_on_dma_cache_sync_for_cpu.patch
blob: d9051cd621e1b56aef463dc832690a11b91d49fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--- a/arch/arm/include/asm/dma-mapping.h
+++ b/arch/arm/include/asm/dma-mapping.h
@@ -350,7 +350,8 @@ static inline dma_addr_t dma_map_page(st
 static inline void dma_unmap_single(struct device *dev, dma_addr_t handle,
 		size_t size, enum dma_data_direction dir)
 {
-	/* nothing to do */
+	if (dir != DMA_TO_DEVICE)
+		dma_cache_maint(dma_to_virt(dev, handle), size, DMA_FROM_DEVICE);
 }
 #endif /* CONFIG_DMABOUNCE */
 
@@ -398,6 +399,8 @@ static inline void dma_sync_single_range
 {
 	BUG_ON(!valid_dma_direction(dir));
 
+	if (dir != DMA_TO_DEVICE)
+		dma_cache_maint(dma_to_virt(dev, handle) + offset, size, DMA_FROM_DEVICE);
 	dmabounce_sync_for_cpu(dev, handle, offset, size, dir);
 }