On 10/2/21 20:45, Jiaxun Yang wrote: > Generate FDT on our own if no dtb argument supplied. > Avoid introducing unused device in FDT with user supplied dtb. > > Signed-off-by: Jiaxun Yang <jiaxun.y...@flygoat.com> > -- > v2: Address f4bug cmments (Thanks!) > --- > hw/mips/boston.c | 234 +++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 226 insertions(+), 8 deletions(-)
> static void boston_mach_init(MachineState *machine) > { > DeviceState *dev; > @@ -555,21 +771,23 @@ static void boston_mach_init(MachineState *machine) > NULL, 0, EM_MIPS, 1, 0); > > if (kernel_size) { > + int dt_size; > + g_autofree const void *dtb_file_data, *dtb_load_data; > hwaddr dtb_paddr = QEMU_ALIGN_UP(kernel_high, 64 * KiB); > hwaddr dtb_vaddr = cpu_mips_phys_to_kseg0(NULL, dtb_paddr); > > s->kernel_entry = kernel_entry; > if (machine->dtb) { > - int dt_size; > - g_autofree const void *dtb_file_data, *dtb_load_data; > - > dtb_file_data = load_device_tree(machine->dtb, &dt_size); > - dtb_load_data = boston_fdt_filter(s, dtb_file_data, NULL, > &dtb_vaddr); Isn't it better to let boston_fdt_filter() here, ... > - > - /* Calculate real fdt size after filter */ > - dt_size = fdt_totalsize(dtb_load_data); > - rom_add_blob_fixed("dtb", dtb_load_data, dt_size, dtb_paddr); > + } else { > + dtb_file_data = create_fdt(s, boston_memmap, &dt_size); ... and pass kernel_cmdline & machine->ram_size to create_fdt(), filling the bootargs & memory nodes? > } > + > + dtb_load_data = boston_fdt_filter(s, dtb_file_data, NULL, > &dtb_vaddr); > + > + /* Calculate real fdt size after filter */ > + dt_size = fdt_totalsize(dtb_load_data); > + rom_add_blob_fixed("dtb", dtb_load_data, dt_size, dtb_paddr); > } else { > /* Try to load file as FIT */ > fit_err = load_fit(&boston_fit_loader, machine->kernel_filename, > s); >