mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
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: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John Crispin <blogic@openwrt.org> Patchwork: http://patchwork.linux-mips.org/patch/5912/
This commit is contained in:
parent
5792bf6438
commit
885014bcf2
4 changed files with 16 additions and 5 deletions
|
@ -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
|
||||||
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 @@
|
||||||
#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)
|
||||||
|
|
||||||
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 @@
|
||||||
|
|
||||||
#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)
|
||||||
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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue