diff options
author | Song Gao <gaosong@loongson.cn> | 2024-04-26 17:15:42 +0800 |
---|---|---|
committer | Song Gao <gaosong@loongson.cn> | 2024-04-29 10:25:56 +0800 |
commit | 6042385149a0fb3f4a51d264fc3dc42775819c79 (patch) | |
tree | 630ce94696b2610ccbd02fe075353284018beb9c /hw/loongarch | |
parent | 060685041ce6b98e5fb015b1d0318eb2f72944b5 (diff) |
hw/loongarch: Init efi_fdt table
The efi_system_table adds a efi_fdt configuration table.
Signed-off-by: Song Gao <gaosong@loongson.cn>
Reviewed-by: Bibo Mao <maobibo@loongson.cn>
Message-Id: <20240426091551.2397867-9-gaosong@loongson.cn>
Diffstat (limited to 'hw/loongarch')
-rw-r--r-- | hw/loongarch/boot.c | 11 | ||||
-rw-r--r-- | hw/loongarch/virt.c | 6 |
2 files changed, 13 insertions, 4 deletions
diff --git a/hw/loongarch/boot.c b/hw/loongarch/boot.c index c8b3e742b4..7d1630b2e7 100644 --- a/hw/loongarch/boot.c +++ b/hw/loongarch/boot.c @@ -113,6 +113,16 @@ static void init_efi_initrd_table(struct efi_system_table *systab, initrd_table->size = initrd_size; } +static void init_efi_fdt_table(struct efi_system_table *systab) +{ + efi_guid_t tbl_guid = DEVICE_TREE_GUID; + + /* efi_configuration_table 3 */ + guidcpy(&systab->tables[2].guid, &tbl_guid); + systab->tables[2].table = (void *)FDT_BASE; + systab->nr_tables = 3; +} + static void init_systab(struct loongarch_boot_info *info, void *p, void *start) { void *bp_tables_start; @@ -138,6 +148,7 @@ static void init_systab(struct loongarch_boot_info *info, void *p, void *start) sizeof(efi_memory_desc_t) * memmap_entries, 64 * KiB); init_efi_initrd_table(systab, p, start); p += ROUND_UP(sizeof(struct efi_initrd), 64 * KiB); + init_efi_fdt_table(systab); systab->tables = (struct efi_configuration_table *)(bp_tables_start - start); } diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index 708aa8bc60..42e5df8a24 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -727,7 +727,6 @@ static void loongarch_init(MachineState *machine) int nb_numa_nodes = machine->numa_state->num_nodes; NodeInfo *numa_info = machine->numa_state->nodes; int i; - hwaddr fdt_base; const CPUArchIdList *possible_cpus; MachineClass *mc = MACHINE_GET_CLASS(machine); CPUState *cpu; @@ -857,12 +856,11 @@ static void loongarch_init(MachineState *machine) * Put the FDT into the memory map as a ROM image: this will ensure * the FDT is copied again upon reset, even if addr points into RAM. */ - fdt_base = 1 * MiB; qemu_fdt_dumpdtb(machine->fdt, lams->fdt_size); - rom_add_blob_fixed_as("fdt", machine->fdt, lams->fdt_size, fdt_base, + rom_add_blob_fixed_as("fdt", machine->fdt, lams->fdt_size, FDT_BASE, &address_space_memory); qemu_register_reset_nosnapshotload(qemu_fdt_randomize_seeds, - rom_ptr_for_as(&address_space_memory, fdt_base, lams->fdt_size)); + rom_ptr_for_as(&address_space_memory, FDT_BASE, lams->fdt_size)); lams->bootinfo.ram_size = ram_size; loongarch_load_kernel(machine, &lams->bootinfo); |