Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -301,7 +301,7 @@ config MIPS_MALTA
	select CEVT_R4K
	select CSRC_R4K
	select CSRC_GIC
	select DMA_NONCOHERENT
	select DMA_MAYBE_COHERENT
	select GENERIC_ISA_DMA
	select HAVE_PCSPKR_PLATFORM
	select IRQ_CPU
@@ -893,6 +893,10 @@ config FW_CFE
config ARCH_DMA_ADDR_T_64BIT
	def_bool (HIGHMEM && 64BIT_PHYS_ADDR) || 64BIT

config DMA_MAYBE_COHERENT
	select DMA_NONCOHERENT
	bool

config DMA_COHERENT
	bool

+9 −0
Original line number Diff line number Diff line
@@ -9,7 +9,16 @@
#ifndef __ASM_DMA_COHERENCE_H
#define __ASM_DMA_COHERENCE_H

#ifdef CONFIG_DMA_MAYBE_COHERENT
extern int 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
+0 −4
Original line number Diff line number Diff line
@@ -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)
{
#ifdef CONFIG_DMA_COHERENT
	return 1;
#else
	return coherentio;
#endif
}

#ifdef CONFIG_SWIOTLB
+2 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@

#include <dma-coherence.h>

#ifdef CONFIG_DMA_MAYBE_COHERENT
int coherentio = 0;	/* User defined DMA coherency from command line. */
EXPORT_SYMBOL_GPL(coherentio);
int hw_coherentio = 0;	/* Actual hardware supported DMA coherency setting. */
@@ -42,6 +43,7 @@ static int __init setnocoherentio(char *str)
	return 0;
}
early_param("nocoherentio", setnocoherentio);
#endif

static inline struct page *dma_addr_to_page(struct device *dev,
	dma_addr_t dma_addr)