ARM: 9011/1: centralize phys-to-virt conversion of DT/ATAGS address
[sfrench/cifs-2.6.git] / arch / arm / kernel / setup.c
index 3f65d0ac9f632b4c37fbc214379de71eb5a5875a..306bcd9844be75c362c872e917f848180ce74ab4 100644 (file)
@@ -89,6 +89,7 @@ unsigned int cacheid __read_mostly;
 EXPORT_SYMBOL(cacheid);
 
 unsigned int __atags_pointer __initdata;
+void *atags_vaddr __initdata;
 
 unsigned int system_rev;
 EXPORT_SYMBOL(system_rev);
@@ -1081,19 +1082,22 @@ void __init hyp_mode_check(void)
 
 void __init setup_arch(char **cmdline_p)
 {
-       const struct machine_desc *mdesc;
+       const struct machine_desc *mdesc = NULL;
+
+       if (__atags_pointer)
+               atags_vaddr = phys_to_virt(__atags_pointer);
 
        setup_processor();
-       mdesc = setup_machine_fdt(__atags_pointer);
+       if (atags_vaddr)
+               mdesc = setup_machine_fdt(atags_vaddr);
        if (!mdesc)
-               mdesc = setup_machine_tags(__atags_pointer, __machine_arch_type);
+               mdesc = setup_machine_tags(atags_vaddr, __machine_arch_type);
        if (!mdesc) {
                early_print("\nError: invalid dtb and unrecognized/unsupported machine ID\n");
                early_print("  r1=0x%08x, r2=0x%08x\n", __machine_arch_type,
                            __atags_pointer);
                if (__atags_pointer)
-                       early_print("  r2[]=%*ph\n", 16,
-                                   phys_to_virt(__atags_pointer));
+                       early_print("  r2[]=%*ph\n", 16, atags_vaddr);
                dump_machine_table();
        }