diff options
Diffstat (limited to 'arch/xtensa/kernel')
| -rw-r--r-- | arch/xtensa/kernel/setup.c | 46 | ||||
| -rw-r--r-- | arch/xtensa/kernel/smp.c | 15 | ||||
| -rw-r--r-- | arch/xtensa/kernel/xtensa_ksyms.c | 7 | 
3 files changed, 33 insertions, 35 deletions
diff --git a/arch/xtensa/kernel/setup.c b/arch/xtensa/kernel/setup.c index 84fe931bb60e..9757bb74e532 100644 --- a/arch/xtensa/kernel/setup.c +++ b/arch/xtensa/kernel/setup.c @@ -50,6 +50,7 @@  #include <asm/param.h>  #include <asm/traps.h>  #include <asm/smp.h> +#include <asm/sysmem.h>  #include <platform/hardware.h> @@ -88,12 +89,6 @@ static char __initdata command_line[COMMAND_LINE_SIZE];  static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;  #endif -sysmem_info_t __initdata sysmem; - -extern int mem_reserve(unsigned long, unsigned long, int); -extern void bootmem_init(void); -extern void zones_init(void); -  /*   * Boot parameter parsing.   * @@ -113,31 +108,14 @@ typedef struct tagtable {  /* parse current tag */ -static int __init add_sysmem_bank(unsigned long type, unsigned long start, -		unsigned long end) -{ -	if (sysmem.nr_banks >= SYSMEM_BANKS_MAX) { -		printk(KERN_WARNING -				"Ignoring memory bank 0x%08lx size %ldKB\n", -				start, end - start); -		return -EINVAL; -	} -	sysmem.bank[sysmem.nr_banks].type  = type; -	sysmem.bank[sysmem.nr_banks].start = PAGE_ALIGN(start); -	sysmem.bank[sysmem.nr_banks].end   = end & PAGE_MASK; -	sysmem.nr_banks++; - -	return 0; -} -  static int __init parse_tag_mem(const bp_tag_t *tag)  { -	meminfo_t *mi = (meminfo_t *)(tag->data); +	struct bp_meminfo *mi = (struct bp_meminfo *)(tag->data);  	if (mi->type != MEMORY_TYPE_CONVENTIONAL)  		return -1; -	return add_sysmem_bank(mi->type, mi->start, mi->end); +	return add_sysmem_bank(mi->start, mi->end);  }  __tagtable(BP_TAG_MEMORY, parse_tag_mem); @@ -146,8 +124,8 @@ __tagtable(BP_TAG_MEMORY, parse_tag_mem);  static int __init parse_tag_initrd(const bp_tag_t* tag)  { -	meminfo_t* mi; -	mi = (meminfo_t*)(tag->data); +	struct bp_meminfo *mi = (struct bp_meminfo *)(tag->data); +  	initrd_start = (unsigned long)__va(mi->start);  	initrd_end = (unsigned long)__va(mi->end); @@ -255,7 +233,7 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)  		return;  	size &= PAGE_MASK; -	add_sysmem_bank(MEMORY_TYPE_CONVENTIONAL, base, base + size); +	add_sysmem_bank(base, base + size);  }  void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align) @@ -292,8 +270,6 @@ device_initcall(xtensa_device_probe);  void __init init_arch(bp_tag_t *bp_start)  { -	sysmem.nr_banks = 0; -  	/* Parse boot parameters */  	if (bp_start) @@ -304,10 +280,9 @@ void __init init_arch(bp_tag_t *bp_start)  #endif  	if (sysmem.nr_banks == 0) { -		sysmem.nr_banks = 1; -		sysmem.bank[0].start = PLATFORM_DEFAULT_MEM_START; -		sysmem.bank[0].end = PLATFORM_DEFAULT_MEM_START -				     + PLATFORM_DEFAULT_MEM_SIZE; +		add_sysmem_bank(PLATFORM_DEFAULT_MEM_START, +				PLATFORM_DEFAULT_MEM_START + +				PLATFORM_DEFAULT_MEM_SIZE);  	}  #ifdef CONFIG_CMDLINE_BOOL @@ -487,7 +462,7 @@ void __init setup_arch(char **cmdline_p)  #ifdef CONFIG_BLK_DEV_INITRD  	if (initrd_start < initrd_end) {  		initrd_is_mapped = mem_reserve(__pa(initrd_start), -					       __pa(initrd_end), 0); +					       __pa(initrd_end), 0) == 0;  		initrd_below_start_ok = 1;  	} else {  		initrd_start = 0; @@ -532,6 +507,7 @@ void __init setup_arch(char **cmdline_p)  		    __pa(&_Level6InterruptVector_text_end), 0);  #endif +	parse_early_param();  	bootmem_init();  	unflatten_and_copy_device_tree(); diff --git a/arch/xtensa/kernel/smp.c b/arch/xtensa/kernel/smp.c index aa8bd8717927..40b5a3771fb0 100644 --- a/arch/xtensa/kernel/smp.c +++ b/arch/xtensa/kernel/smp.c @@ -496,6 +496,21 @@ void flush_tlb_range(struct vm_area_struct *vma,  	on_each_cpu(ipi_flush_tlb_range, &fd, 1);  } +static void ipi_flush_tlb_kernel_range(void *arg) +{ +	struct flush_data *fd = arg; +	local_flush_tlb_kernel_range(fd->addr1, fd->addr2); +} + +void flush_tlb_kernel_range(unsigned long start, unsigned long end) +{ +	struct flush_data fd = { +		.addr1 = start, +		.addr2 = end, +	}; +	on_each_cpu(ipi_flush_tlb_kernel_range, &fd, 1); +} +  /* Cache flush functions */  static void ipi_flush_cache_all(void *arg) diff --git a/arch/xtensa/kernel/xtensa_ksyms.c b/arch/xtensa/kernel/xtensa_ksyms.c index 80b33ed51f31..4d2872fd9bb5 100644 --- a/arch/xtensa/kernel/xtensa_ksyms.c +++ b/arch/xtensa/kernel/xtensa_ksyms.c @@ -20,6 +20,7 @@  #include <linux/in6.h>  #include <asm/uaccess.h> +#include <asm/cacheflush.h>  #include <asm/checksum.h>  #include <asm/dma.h>  #include <asm/io.h> @@ -105,6 +106,7 @@ EXPORT_SYMBOL(csum_partial_copy_generic);   * Architecture-specific symbols   */  EXPORT_SYMBOL(__xtensa_copy_user); +EXPORT_SYMBOL(__invalidate_icache_range);  /*   * Kernel hacking ... @@ -127,3 +129,8 @@ EXPORT_SYMBOL(common_exception_return);  #ifdef CONFIG_FUNCTION_TRACER  EXPORT_SYMBOL(_mcount);  #endif + +EXPORT_SYMBOL(__invalidate_dcache_range); +#if XCHAL_DCACHE_IS_WRITEBACK +EXPORT_SYMBOL(__flush_dcache_range); +#endif  | 

