MIPS: DMA: Implement platform hook to perform post-DMA cache flushes.
authorRalf Baechle <ralf@linux-mips.org>
Fri, 27 Mar 2015 14:10:30 +0000 (15:10 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 1 Apr 2015 15:22:01 +0000 (17:22 +0200)
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/mach-ath25/dma-coherence.h
arch/mips/include/asm/mach-bmips/dma-coherence.h
arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
arch/mips/include/asm/mach-generic/dma-coherence.h
arch/mips/include/asm/mach-ip27/dma-coherence.h
arch/mips/include/asm/mach-ip32/dma-coherence.h
arch/mips/include/asm/mach-jazz/dma-coherence.h
arch/mips/include/asm/mach-loongson/dma-coherence.h
arch/mips/mm/dma-default.c

index 65084a079b60fe9bec3b05e49e1f40991c9ba2af..d5defdde32dbb34e64620cda375e9392c09f8034 100644 (file)
@@ -69,4 +69,8 @@ static inline int plat_device_is_coherent(struct device *dev)
 #endif
 }
 
+static inline void plat_post_dma_flush(struct device *dev)
+{
+}
+
 #endif /* __ASM_MACH_ATH25_DMA_COHERENCE_H */
index 65e95b03ef929fa9a14fd95313b93fc19a7c19ac..509ab72725eba7bc39549f43ac91e90963e4cf65 100644 (file)
@@ -45,4 +45,8 @@ static inline int plat_device_is_coherent(struct device *dev)
        return 0;
 }
 
+static inline void plat_post_dma_flush(struct device *dev)
+{
+}
+
 #endif /* __ASM_MACH_BMIPS_DMA_COHERENCE_H */
index f9f448650505bc95dc2b5e426c3acf4869ffbfc5..460042ee5d6fa292fb28998ad43001ad7f91f744 100644 (file)
@@ -57,6 +57,10 @@ static inline int plat_device_is_coherent(struct device *dev)
        return 1;
 }
 
+static inline void plat_post_dma_flush(struct device *dev)
+{
+}
+
 dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr);
 phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr);
 
index 7629c35986f7139c4fe797738d803e892af878e1..671330928e67679a5c3a3acee4facfa0a647e72c 100644 (file)
@@ -52,6 +52,10 @@ static inline int plat_device_is_coherent(struct device *dev)
        return coherentio;
 }
 
+static inline void plat_post_dma_flush(struct device *dev)
+{
+}
+
 #ifdef CONFIG_SWIOTLB
 static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr)
 {
index 4ffddfdb50623bbbcbc2f5eec3ad9aabb7f78bcc..1daa64412569f6e43adbd875168948fd8fc9e692 100644 (file)
@@ -58,6 +58,10 @@ static inline int plat_dma_supported(struct device *dev, u64 mask)
        return 1;
 }
 
+static inline void plat_post_dma_flush(struct device *dev)
+{
+}
+
 static inline int plat_device_is_coherent(struct device *dev)
 {
        return 1;               /* IP27 non-cohernet mode is unsupported */
index 104cfbc3ed63291ec51a6e13152257516cd1d85c..0a0b0e2ced6071f4b746c4a6d4c41770178b5b63 100644 (file)
@@ -80,6 +80,10 @@ static inline int plat_dma_supported(struct device *dev, u64 mask)
        return 1;
 }
 
+static inline void plat_post_dma_flush(struct device *dev)
+{
+}
+
 static inline int plat_device_is_coherent(struct device *dev)
 {
        return 0;               /* IP32 is non-cohernet */
index 949003ef97b37d0d4023f3da08694c4409139a17..dc347c25c343a560750600c26e6f221a94f56b2b 100644 (file)
@@ -48,6 +48,10 @@ static inline int plat_dma_supported(struct device *dev, u64 mask)
        return 1;
 }
 
+static inline void plat_post_dma_flush(struct device *dev)
+{
+}
+
 static inline int plat_device_is_coherent(struct device *dev)
 {
        return 0;
index a90534161bd2e29a43ad8d66403dbf2f33ccaa3b..4bf4e19f72e8512fe781b2e7a30d63df1e11dad9 100644 (file)
@@ -78,4 +78,8 @@ static inline int plat_device_is_coherent(struct device *dev)
 #endif /* CONFIG_DMA_NONCOHERENT */
 }
 
+static inline void plat_post_dma_flush(struct device *dev)
+{
+}
+
 #endif /* __ASM_MACH_LOONGSON_DMA_COHERENCE_H */
index af5f046e627e470a6f4f87709af6a9f3b232a213..609d1241b0c47c383db16fbb6941ff81624d08c8 100644 (file)
@@ -258,7 +258,7 @@ static void mips_dma_unmap_page(struct device *dev, dma_addr_t dma_addr,
        if (cpu_needs_post_dma_flush(dev))
                __dma_sync(dma_addr_to_page(dev, dma_addr),
                           dma_addr & ~PAGE_MASK, size, direction);
-
+       plat_post_dma_flush(dev);
        plat_unmap_dma_mem(dev, dma_addr, size, direction);
 }
 
@@ -312,6 +312,7 @@ static void mips_dma_sync_single_for_cpu(struct device *dev,
        if (cpu_needs_post_dma_flush(dev))
                __dma_sync(dma_addr_to_page(dev, dma_handle),
                           dma_handle & ~PAGE_MASK, size, direction);
+       plat_post_dma_flush(dev);
 }
 
 static void mips_dma_sync_single_for_device(struct device *dev,
@@ -331,6 +332,7 @@ static void mips_dma_sync_sg_for_cpu(struct device *dev,
                for (i = 0; i < nelems; i++, sg++)
                        __dma_sync(sg_page(sg), sg->offset, sg->length,
                                   direction);
+       plat_post_dma_flush(dev);
 }
 
 static void mips_dma_sync_sg_for_device(struct device *dev,