diff options
Diffstat (limited to 'arch/mips/kernel/setup.c')
| -rw-r--r-- | arch/mips/kernel/setup.c | 38 | 
1 files changed, 36 insertions, 2 deletions
| diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index 2c96c0c68116..c71d1eb7da59 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c @@ -36,6 +36,7 @@  #include <asm/cdmm.h>  #include <asm/cpu.h>  #include <asm/debug.h> +#include <asm/dma-coherence.h>  #include <asm/sections.h>  #include <asm/setup.h>  #include <asm/smp-ops.h> @@ -84,6 +85,11 @@ static struct resource bss_resource = { .name = "Kernel bss", };  static void *detect_magic __initdata = detect_memory_region; +#ifdef CONFIG_MIPS_AUTO_PFN_OFFSET +unsigned long ARCH_PFN_OFFSET; +EXPORT_SYMBOL(ARCH_PFN_OFFSET); +#endif +  void __init add_memory_region(phys_addr_t start, phys_addr_t size, long type)  {  	int x = boot_mem_map.nr_map; @@ -441,6 +447,12 @@ static void __init bootmem_init(void)  		mapstart = max(reserved_end, start);  	} +	if (min_low_pfn >= max_low_pfn) +		panic("Incorrect memory mapping !!!"); + +#ifdef CONFIG_MIPS_AUTO_PFN_OFFSET +	ARCH_PFN_OFFSET = PFN_UP(ramstart); +#else  	/*  	 * Reserve any memory between the start of RAM and PHYS_OFFSET  	 */ @@ -448,8 +460,6 @@ static void __init bootmem_init(void)  		add_memory_region(PHYS_OFFSET, ramstart - PHYS_OFFSET,  				  BOOT_MEM_RESERVED); -	if (min_low_pfn >= max_low_pfn) -		panic("Incorrect memory mapping !!!");  	if (min_low_pfn > ARCH_PFN_OFFSET) {  		pr_info("Wasting %lu bytes for tracking %lu unused pages\n",  			(min_low_pfn - ARCH_PFN_OFFSET) * sizeof(struct page), @@ -459,6 +469,7 @@ static void __init bootmem_init(void)  			ARCH_PFN_OFFSET - min_low_pfn);  	}  	min_low_pfn = ARCH_PFN_OFFSET; +#endif  	/*  	 * Determine low and high memory ranges @@ -1055,3 +1066,26 @@ static int __init debugfs_mips(void)  }  arch_initcall(debugfs_mips);  #endif + +#if defined(CONFIG_DMA_MAYBE_COHERENT) && !defined(CONFIG_DMA_PERDEV_COHERENT) +/* User defined DMA coherency from command line. */ +enum coherent_io_user_state coherentio = IO_COHERENCE_DEFAULT; +EXPORT_SYMBOL_GPL(coherentio); +int hw_coherentio = 0;	/* Actual hardware supported DMA coherency setting. */ + +static int __init setcoherentio(char *str) +{ +	coherentio = IO_COHERENCE_ENABLED; +	pr_info("Hardware DMA cache coherency (command line)\n"); +	return 0; +} +early_param("coherentio", setcoherentio); + +static int __init setnocoherentio(char *str) +{ +	coherentio = IO_COHERENCE_DISABLED; +	pr_info("Software DMA cache coherency (command line)\n"); +	return 0; +} +early_param("nocoherentio", setnocoherentio); +#endif |