Commit 885014bc authored by Felix Fietkau's avatar Felix Fietkau Committed by Ralf Baechle

MIPS: improve checks for noncoherent DMA

Only one MIPS development board actually supports enabling/disabling DMA
coherency at runtime, so it's not a good idea to push the overhead of
checking that configuration setting onto every other supported target as
well.
Signed-off-by: default avatarFelix Fietkau <nbd@openwrt.org>
Signed-off-by: default avatarJohn Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/5912/
parent 5792bf64
...@@ -301,7 +301,7 @@ config MIPS_MALTA ...@@ -301,7 +301,7 @@ config MIPS_MALTA
select CEVT_R4K select CEVT_R4K
select CSRC_R4K select CSRC_R4K
select CSRC_GIC select CSRC_GIC
select DMA_NONCOHERENT select DMA_MAYBE_COHERENT
select GENERIC_ISA_DMA select GENERIC_ISA_DMA
select HAVE_PCSPKR_PLATFORM select HAVE_PCSPKR_PLATFORM
select IRQ_CPU select IRQ_CPU
...@@ -893,6 +893,10 @@ config FW_CFE ...@@ -893,6 +893,10 @@ config FW_CFE
config ARCH_DMA_ADDR_T_64BIT config ARCH_DMA_ADDR_T_64BIT
def_bool (HIGHMEM && 64BIT_PHYS_ADDR) || 64BIT def_bool (HIGHMEM && 64BIT_PHYS_ADDR) || 64BIT
config DMA_MAYBE_COHERENT
select DMA_NONCOHERENT
bool
config DMA_COHERENT config DMA_COHERENT
bool bool
......
...@@ -9,7 +9,16 @@ ...@@ -9,7 +9,16 @@
#ifndef __ASM_DMA_COHERENCE_H #ifndef __ASM_DMA_COHERENCE_H
#define __ASM_DMA_COHERENCE_H #define __ASM_DMA_COHERENCE_H
#ifdef CONFIG_DMA_MAYBE_COHERENT
extern int coherentio; extern int coherentio;
extern int hw_coherentio; extern int hw_coherentio;
#else
#ifdef CONFIG_DMA_COHERENT
#define coherentio 1
#else
#define coherentio 0
#endif
#define hw_coherentio 0
#endif /* CONFIG_DMA_MAYBE_COHERENT */
#endif #endif
...@@ -49,11 +49,7 @@ static inline int plat_dma_supported(struct device *dev, u64 mask) ...@@ -49,11 +49,7 @@ static inline int plat_dma_supported(struct device *dev, u64 mask)
static inline int plat_device_is_coherent(struct device *dev) static inline int plat_device_is_coherent(struct device *dev)
{ {
#ifdef CONFIG_DMA_COHERENT
return 1;
#else
return coherentio; return coherentio;
#endif
} }
#ifdef CONFIG_SWIOTLB #ifdef CONFIG_SWIOTLB
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <dma-coherence.h> #include <dma-coherence.h>
#ifdef CONFIG_DMA_MAYBE_COHERENT
int coherentio = 0; /* User defined DMA coherency from command line. */ int coherentio = 0; /* User defined DMA coherency from command line. */
EXPORT_SYMBOL_GPL(coherentio); EXPORT_SYMBOL_GPL(coherentio);
int hw_coherentio = 0; /* Actual hardware supported DMA coherency setting. */ int hw_coherentio = 0; /* Actual hardware supported DMA coherency setting. */
...@@ -42,6 +43,7 @@ static int __init setnocoherentio(char *str) ...@@ -42,6 +43,7 @@ static int __init setnocoherentio(char *str)
return 0; return 0;
} }
early_param("nocoherentio", setnocoherentio); early_param("nocoherentio", setnocoherentio);
#endif
static inline struct page *dma_addr_to_page(struct device *dev, static inline struct page *dma_addr_to_page(struct device *dev,
dma_addr_t dma_addr) dma_addr_t dma_addr)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment