diff options
Diffstat (limited to 'arch/arm/kernel/setup.c')
| -rw-r--r-- | arch/arm/kernel/setup.c | 32 | 
1 files changed, 27 insertions, 5 deletions
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 6c777e908a24..36c18b73c1f4 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -46,6 +46,7 @@  #include <asm/cacheflush.h>  #include <asm/cachetype.h>  #include <asm/tlbflush.h> +#include <asm/xen/hypervisor.h>  #include <asm/prom.h>  #include <asm/mach/arch.h> @@ -75,8 +76,7 @@ __setup("fpe=", fpe_setup);  extern void init_default_cache_policy(unsigned long);  extern void paging_init(const struct machine_desc *desc); -extern void early_paging_init(const struct machine_desc *, -			      struct proc_info_list *); +extern void early_paging_init(const struct machine_desc *);  extern void sanity_check_meminfo(void);  extern enum reboot_mode reboot_mode;  extern void setup_dma_zone(const struct machine_desc *desc); @@ -93,6 +93,9 @@ unsigned int __atags_pointer __initdata;  unsigned int system_rev;  EXPORT_SYMBOL(system_rev); +const char *system_serial; +EXPORT_SYMBOL(system_serial); +  unsigned int system_serial_low;  EXPORT_SYMBOL(system_serial_low); @@ -839,8 +842,25 @@ arch_initcall(customize_machine);  static int __init init_machine_late(void)  { +	struct device_node *root; +	int ret; +  	if (machine_desc->init_late)  		machine_desc->init_late(); + +	root = of_find_node_by_path("/"); +	if (root) { +		ret = of_property_read_string(root, "serial-number", +					      &system_serial); +		if (ret) +			system_serial = NULL; +	} + +	if (!system_serial) +		system_serial = kasprintf(GFP_KERNEL, "%08x%08x", +					  system_serial_high, +					  system_serial_low); +  	return 0;  }  late_initcall(init_machine_late); @@ -936,7 +956,9 @@ void __init setup_arch(char **cmdline_p)  	parse_early_param(); -	early_paging_init(mdesc, lookup_processor_type(read_cpuid_id())); +#ifdef CONFIG_MMU +	early_paging_init(mdesc); +#endif  	setup_dma_zone(mdesc);  	sanity_check_meminfo();  	arm_memblock_init(mdesc); @@ -951,6 +973,7 @@ void __init setup_arch(char **cmdline_p)  	arm_dt_init_cpu_maps();  	psci_init(); +	xen_early_init();  #ifdef CONFIG_SMP  	if (is_smp()) {  		if (!mdesc->smp_init || !mdesc->smp_init()) { @@ -1109,8 +1132,7 @@ static int c_show(struct seq_file *m, void *v)  	seq_printf(m, "Hardware\t: %s\n", machine_name);  	seq_printf(m, "Revision\t: %04x\n", system_rev); -	seq_printf(m, "Serial\t\t: %08x%08x\n", -		   system_serial_high, system_serial_low); +	seq_printf(m, "Serial\t\t: %s\n", system_serial);  	return 0;  }  |