mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
hw/loongarch: Add uefi bios loading support
Add uefi bios loading support, now only uefi bios is porting to loongarch virt machine. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn> Message-Id: <20220712083206.4187715-3-yangxiaojuan@loongson.cn> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
27ad7564e7
commit
98afb0d4e9
@ -310,6 +310,37 @@ static void loongarch_irq_init(LoongArchMachineState *lams)
|
||||
loongarch_devices_init(pch_pic);
|
||||
}
|
||||
|
||||
static void loongarch_firmware_init(LoongArchMachineState *lams)
|
||||
{
|
||||
char *filename = MACHINE(lams)->firmware;
|
||||
char *bios_name = NULL;
|
||||
int bios_size;
|
||||
|
||||
lams->bios_loaded = false;
|
||||
if (filename) {
|
||||
bios_name = qemu_find_file(QEMU_FILE_TYPE_BIOS, filename);
|
||||
if (!bios_name) {
|
||||
error_report("Could not find ROM image '%s'", filename);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
bios_size = load_image_targphys(bios_name, VIRT_BIOS_BASE, VIRT_BIOS_SIZE);
|
||||
if (bios_size < 0) {
|
||||
error_report("Could not load ROM image '%s'", bios_name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
g_free(bios_name);
|
||||
|
||||
memory_region_init_ram(&lams->bios, NULL, "loongarch.bios",
|
||||
VIRT_BIOS_SIZE, &error_fatal);
|
||||
memory_region_set_readonly(&lams->bios, true);
|
||||
memory_region_add_subregion(get_system_memory(), VIRT_BIOS_BASE, &lams->bios);
|
||||
lams->bios_loaded = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void reset_load_elf(void *opaque)
|
||||
{
|
||||
LoongArchCPU *cpu = opaque;
|
||||
@ -369,6 +400,9 @@ static void loongarch_init(MachineState *machine)
|
||||
get_system_io(), 0, LOONGARCH_ISA_IO_SIZE);
|
||||
memory_region_add_subregion(address_space_mem, LOONGARCH_ISA_IO_BASE,
|
||||
&lams->isa_io);
|
||||
/* load the BIOS image. */
|
||||
loongarch_firmware_init(lams);
|
||||
|
||||
/* fw_cfg init */
|
||||
lams->fw_cfg = loongarch_fw_cfg_init(ram_size, machine);
|
||||
rom_set_fw(lams->fw_cfg);
|
||||
|
@ -18,6 +18,8 @@
|
||||
#define LOONGARCH_ISA_IO_BASE 0x18000000UL
|
||||
#define LOONGARCH_ISA_IO_SIZE 0x0004000
|
||||
#define VIRT_FWCFG_BASE 0x1e020000UL
|
||||
#define VIRT_BIOS_BASE 0x1c000000UL
|
||||
#define VIRT_BIOS_SIZE (4 * MiB)
|
||||
|
||||
struct LoongArchMachineState {
|
||||
/*< private >*/
|
||||
@ -27,6 +29,8 @@ struct LoongArchMachineState {
|
||||
MemoryRegion lowmem;
|
||||
MemoryRegion highmem;
|
||||
MemoryRegion isa_io;
|
||||
MemoryRegion bios;
|
||||
bool bios_loaded;
|
||||
/* State for other subsystems/APIs: */
|
||||
FWCfgState *fw_cfg;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user