|
@@ -124,37 +124,19 @@ static void __init setup_processor(void)
|
|
|
|
|
|
static void __init setup_machine_fdt(phys_addr_t dt_phys)
|
|
|
{
|
|
|
- struct boot_param_header *devtree;
|
|
|
unsigned long dt_root;
|
|
|
|
|
|
- /* Check we have a non-NULL DT pointer */
|
|
|
- if (!dt_phys) {
|
|
|
- early_print("\n"
|
|
|
- "Error: NULL or invalid device tree blob\n"
|
|
|
- "The dtb must be 8-byte aligned and passed in the first 512MB of memory\n"
|
|
|
- "\nPlease check your bootloader.\n");
|
|
|
-
|
|
|
- while (true)
|
|
|
- cpu_relax();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- devtree = phys_to_virt(dt_phys);
|
|
|
-
|
|
|
- /* Check device tree validity */
|
|
|
- if (be32_to_cpu(devtree->magic) != OF_DT_HEADER) {
|
|
|
+ if (!dt_phys || !early_init_dt_scan(phys_to_virt(dt_phys))) {
|
|
|
early_print("\n"
|
|
|
"Error: invalid device tree blob at physical address 0x%p (virtual address 0x%p)\n"
|
|
|
- "Expected 0x%x, found 0x%x\n"
|
|
|
+ "The dtb must be 8-byte aligned and passed in the first 512MB of memory\n"
|
|
|
"\nPlease check your bootloader.\n",
|
|
|
- dt_phys, devtree, OF_DT_HEADER,
|
|
|
- be32_to_cpu(devtree->magic));
|
|
|
+ dt_phys, phys_to_virt(dt_phys));
|
|
|
|
|
|
while (true)
|
|
|
cpu_relax();
|
|
|
}
|
|
|
|
|
|
- initial_boot_params = devtree;
|
|
|
dt_root = of_get_flat_dt_root();
|
|
|
|
|
|
machine_name = of_get_flat_dt_prop(dt_root, "model", NULL);
|
|
@@ -163,13 +145,6 @@ static void __init setup_machine_fdt(phys_addr_t dt_phys)
|
|
|
if (!machine_name)
|
|
|
machine_name = "<unknown>";
|
|
|
pr_info("Machine: %s\n", machine_name);
|
|
|
-
|
|
|
- /* Retrieve various information from the /chosen node */
|
|
|
- of_scan_flat_dt(early_init_dt_scan_chosen, boot_command_line);
|
|
|
- /* Initialize {size,address}-cells info */
|
|
|
- of_scan_flat_dt(early_init_dt_scan_root, NULL);
|
|
|
- /* Setup memory, calling early_init_dt_add_memory_arch */
|
|
|
- of_scan_flat_dt(early_init_dt_scan_memory, NULL);
|
|
|
}
|
|
|
|
|
|
void __init early_init_dt_add_memory_arch(u64 base, u64 size)
|