[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 3/3] hw/mips/boston: Add FDT generator
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH v3 3/3] hw/mips/boston: Add FDT generator |
Date: |
Sun, 3 Oct 2021 19:45:26 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.1.0 |
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.yang@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);
>