在 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);