static int setup_dt_blob(void *blob) { unsigned int mem_bank = MEM_BANK; unsigned int mem_size = MEM_SIZE; int ret; if (check_dt_blob_valid(blob)) { dbg_info("DT: the blob is not a valid fdt\n"); return -1; } dbg_info("\nUsing device tree in place at %x\n", (unsigned int)blob); if (bootargs) { char *p; /* set "/chosen" node */ for (p = bootargs; *p == ' '; p++) ; if (*p == '\0') return -1; ret = fixup_chosen_node(blob, p); if (ret) return ret; } ret = fixup_memory_node(blob, &mem_bank, &mem_size); if (ret) return ret; return 0; }
static int setup_dt_blob(void *blob) { char *bootargs = LINUX_KERNEL_ARG_STRING; char *p; unsigned int mem_bank = OS_MEM_BANK; unsigned int mem_size = OS_MEM_SIZE; int ret; if (check_dt_blob_valid(blob)) { dbg_log(1, "DT: the blob is not a valid fdt\n\r"); return -1; } dbg_log(1, "\n\rUsing device tree in place at %d\n\r", (unsigned int)blob); /* set "/chosen" node */ for (p = bootargs; *p == ' '; p++) ; if (*p == '\0') return -1; ret = fixup_chosen_node(blob, p); if (ret) return ret; ret = fixup_memory_node(blob, &mem_bank, &mem_size); if (ret) return ret; return 0; }
static int bootm_linux_fdt(int machid, bootm_headers_t *images) { ulong rd_len; void (*kernel_entry)(int zero, int dt_machid, void *dtblob); ulong bootmap_base = getenv_bootm_low(); ulong of_size = images->ft_len; char **of_flat_tree = &images->ft_addr; ulong *initrd_start = &images->initrd_start; ulong *initrd_end = &images->initrd_end; struct lmb *lmb = &images->lmb; int ret; kernel_entry = (void (*)(int, int, void *))images->ep; rd_len = images->rd_end - images->rd_start; ret = boot_ramdisk_high(lmb, images->rd_start, rd_len, initrd_start, initrd_end); if (ret) return ret; ret = boot_relocate_fdt(lmb, bootmap_base, of_flat_tree, &of_size); if (ret) return ret; debug("## Transferring control to Linux (at address %08lx) ...\n", (ulong) kernel_entry); fdt_chosen(*of_flat_tree, 1); fixup_memory_node(*of_flat_tree); fdt_fixup_ethernet(*of_flat_tree); #ifdef CONFIG_DMAMEM fdt_fixup_dmamem(*of_flat_tree); #endif #ifdef CONFIG_SWITCH fdt_fixup_switch(*of_flat_tree); #endif fdt_initrd(*of_flat_tree, *initrd_start, *initrd_end, 1); announce_and_cleanup(); kernel_entry(0, machid, *of_flat_tree); /* does not return */ return 1; }
static int setup_dt_blob(void *blob) { char *bootargs = LINUX_KERNEL_ARG_STRING; char *p; unsigned int mem_bank = MEM_BANK; unsigned int mem_size = MEM_SIZE; int ret; if (check_dt_blob_valid(blob)) { dbg_info("DT: the blob is not a valid fdt\n"); return -1; } dbg_info("\nUsing device tree in place at %d\n", (unsigned int)blob); #if defined(CONFIG_LOAD_ANDROID) && defined(CONFIG_SAMA5D3XEK) if (get_dm_sn() == BOARD_ID_PDA_DM) bootargs = cmd_line_android_pda; else bootargs = cmd_line_android; #endif /* set "/chosen" node */ for (p = bootargs; *p == ' '; p++) ; if (*p == '\0') return -1; ret = fixup_chosen_node(blob, p); if (ret) return ret; ret = fixup_memory_node(blob, &mem_bank, &mem_size); if (ret) return ret; return 0; }