hw/loongarch: Load FDT table into dram memory space
Load FDT table into dram memory space, and the addr is 2 MiB. Since lowmem region starts from 0, FDT base address is located at 2 MiB to avoid NULL pointer access. Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn> Acked-by: Song Gao <gaosong@loongson.cn> Message-Id: <20221028014007.2718352-2-yangxiaojuan@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn>
This commit is contained in:
parent
a649fffcc9
commit
021836936e
@ -159,7 +159,6 @@ static void fdt_add_pcie_node(const LoongArchMachineState *lams)
|
||||
1, FDT_PCI_RANGE_MMIO, 2, base_mmio,
|
||||
2, base_mmio, 2, size_mmio);
|
||||
g_free(nodename);
|
||||
qemu_fdt_dumpdtb(ms->fdt, lams->fdt_size);
|
||||
}
|
||||
|
||||
static void fdt_add_irqchip_node(LoongArchMachineState *lams)
|
||||
@ -656,6 +655,7 @@ static void loongarch_init(MachineState *machine)
|
||||
MemoryRegion *address_space_mem = get_system_memory();
|
||||
LoongArchMachineState *lams = LOONGARCH_MACHINE(machine);
|
||||
int i;
|
||||
hwaddr fdt_base;
|
||||
|
||||
if (!cpu_model) {
|
||||
cpu_model = LOONGARCH_CPU_TYPE_NAME("la464");
|
||||
@ -760,12 +760,16 @@ static void loongarch_init(MachineState *machine)
|
||||
lams->machine_done.notify = virt_machine_done;
|
||||
qemu_add_machine_init_done_notifier(&lams->machine_done);
|
||||
fdt_add_pcie_node(lams);
|
||||
|
||||
/* load fdt */
|
||||
MemoryRegion *fdt_rom = g_new(MemoryRegion, 1);
|
||||
memory_region_init_rom(fdt_rom, NULL, "fdt", VIRT_FDT_SIZE, &error_fatal);
|
||||
memory_region_add_subregion(get_system_memory(), VIRT_FDT_BASE, fdt_rom);
|
||||
rom_add_blob_fixed("fdt", machine->fdt, lams->fdt_size, VIRT_FDT_BASE);
|
||||
/*
|
||||
* Since lowmem region starts from 0, FDT base address is located
|
||||
* at 2 MiB to avoid NULL pointer access.
|
||||
*
|
||||
* 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 = 2 * MiB;
|
||||
qemu_fdt_dumpdtb(machine->fdt, lams->fdt_size);
|
||||
rom_add_blob_fixed("fdt", machine->fdt, lams->fdt_size, fdt_base);
|
||||
}
|
||||
|
||||
bool loongarch_is_acpi_enabled(LoongArchMachineState *lams)
|
||||
|
@ -28,9 +28,6 @@
|
||||
#define VIRT_GED_MEM_ADDR (VIRT_GED_EVT_ADDR + ACPI_GED_EVT_SEL_LEN)
|
||||
#define VIRT_GED_REG_ADDR (VIRT_GED_MEM_ADDR + MEMORY_HOTPLUG_IO_LEN)
|
||||
|
||||
#define VIRT_FDT_BASE 0x1c400000
|
||||
#define VIRT_FDT_SIZE 0x100000
|
||||
|
||||
struct LoongArchMachineState {
|
||||
/*< private >*/
|
||||
MachineState parent_obj;
|
||||
|
Loading…
Reference in New Issue
Block a user