在 2021/10/3 18:45, Philippe Mathieu-Daudé 写道:
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?
That will be done in boston_fdt_filter, which shares between FDT generator path
and dtb file path.

Thanks.
- Jiaxun

              }
+
+            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);



Reply via email to