summaryrefslogtreecommitdiffstats
path: root/target/linux/cns3xxx/patches-2.6.31/300-flush_cache_on_dma_cache_sync_for_cpu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/cns3xxx/patches-2.6.31/300-flush_cache_on_dma_cache_sync_for_cpu.patch')
-rw-r--r--target/linux/cns3xxx/patches-2.6.31/300-flush_cache_on_dma_cache_sync_for_cpu.patch21
1 files changed, 21 insertions, 0 deletions
diff --git a/target/linux/cns3xxx/patches-2.6.31/300-flush_cache_on_dma_cache_sync_for_cpu.patch b/target/linux/cns3xxx/patches-2.6.31/300-flush_cache_on_dma_cache_sync_for_cpu.patch
new file mode 100644
index 000000000..d9051cd62
--- /dev/null
+++ b/target/linux/cns3xxx/patches-2.6.31/300-flush_cache_on_dma_cache_sync_for_cpu.patch
@@ -0,0 +1,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);
+ }
+