diff options
Diffstat (limited to 'target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch')
-rw-r--r-- | target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch b/target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch new file mode 100644 index 0000000000..07a6da453f --- /dev/null +++ b/target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch @@ -0,0 +1,82 @@ +From 203f17906ff45705fbdaa0430dbbc71142c2640f Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens <hauke@hauke-m.de> +Date: Sat, 8 Dec 2018 21:45:53 +0100 +Subject: [PATCH 1/3] MIPS: Compile post DMA flush only when needed + +dma_sync_phys() is only called for some CPUs when a mapping is removed. +Add ARCH_HAS_SYNC_DMA_FOR_CPU only for the CPUs listed in +cpu_needs_post_dma_flush() which need this extra call and do not compile +this code in for other CPUs. We need this for R10000, R12000, BMIPS5000 +CPUs and CPUs supporting MAAR which was introduced in MIPS32r5. + +This will hopefully improve the performance of the not affected devices. + +Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> +--- + arch/mips/Kconfig | 6 +++++- + arch/mips/mm/dma-noncoherent.c | 2 ++ + 2 files changed, 7 insertions(+), 1 deletion(-) + +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -1117,7 +1117,6 @@ config DMA_PERDEV_COHERENT + config DMA_NONCOHERENT + bool + select ARCH_HAS_SYNC_DMA_FOR_DEVICE +- select ARCH_HAS_SYNC_DMA_FOR_CPU + select NEED_DMA_MAP_STATE + select DMA_NONCOHERENT_MMAP + select DMA_NONCOHERENT_CACHE_SYNC +@@ -1898,9 +1897,11 @@ config SYS_HAS_CPU_MIPS32_R3_5 + + config SYS_HAS_CPU_MIPS32_R5 + bool ++ select ARCH_HAS_SYNC_DMA_FOR_CPU + + config SYS_HAS_CPU_MIPS32_R6 + bool ++ select ARCH_HAS_SYNC_DMA_FOR_CPU + + config SYS_HAS_CPU_MIPS64_R1 + bool +@@ -1910,6 +1911,7 @@ config SYS_HAS_CPU_MIPS64_R2 + + config SYS_HAS_CPU_MIPS64_R6 + bool ++ select ARCH_HAS_SYNC_DMA_FOR_CPU + + config SYS_HAS_CPU_R3000 + bool +@@ -1946,6 +1948,7 @@ config SYS_HAS_CPU_R8000 + + config SYS_HAS_CPU_R10000 + bool ++ select ARCH_HAS_SYNC_DMA_FOR_CPU + + config SYS_HAS_CPU_RM7000 + bool +@@ -1974,6 +1977,7 @@ config SYS_HAS_CPU_BMIPS4380 + config SYS_HAS_CPU_BMIPS5000 + bool + select SYS_HAS_CPU_BMIPS ++ select ARCH_HAS_SYNC_DMA_FOR_CPU + + config SYS_HAS_CPU_XLR + bool +--- a/arch/mips/mm/dma-noncoherent.c ++++ b/arch/mips/mm/dma-noncoherent.c +@@ -191,12 +191,14 @@ void arch_sync_dma_for_device(struct dev + dma_sync_phys(paddr, size, dir); + } + ++#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU + void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr, + size_t size, enum dma_data_direction dir) + { + if (cpu_needs_post_dma_flush(dev)) + dma_sync_phys(paddr, size, dir); + } ++#endif + + void arch_dma_cache_sync(struct device *dev, void *vaddr, size_t size, + enum dma_data_direction direction) |