OSDN Git Service

Merge tag 'for-linus-4.2-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
[uclinux-h8/linux.git] / arch / arm / kernel / setup.c
index aa9bfeb..36c18b7 100644 (file)
@@ -76,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);
@@ -94,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);
 
@@ -840,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);
@@ -937,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);
@@ -1111,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;
 }