[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/6] hw/loongarch: Add uefi bios loading support
From: |
Xiaojuan Yang |
Subject: |
[PATCH 2/6] hw/loongarch: Add uefi bios loading support |
Date: |
Tue, 12 Jul 2022 16:32:02 +0800 |
Add uefi bios loading support, now only uefi bios is porting to
loongarch virt machine.
Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
---
hw/loongarch/loongson3.c | 34 ++++++++++++++++++++++++++++++++++
include/hw/loongarch/virt.h | 4 ++++
2 files changed, 38 insertions(+)
diff --git a/hw/loongarch/loongson3.c b/hw/loongarch/loongson3.c
index 9aa580075e..e1056d3e0f 100644
--- a/hw/loongarch/loongson3.c
+++ b/hw/loongarch/loongson3.c
@@ -316,6 +316,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;
@@ -375,6 +406,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);
diff --git a/include/hw/loongarch/virt.h b/include/hw/loongarch/virt.h
index 9fec1f8a5c..ec37d86e44 100644
--- a/include/hw/loongarch/virt.h
+++ b/include/hw/loongarch/virt.h
@@ -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;
};
--
2.31.1
- [PATCH v1 0/6] Support booting bios and kernel for LoongArch, Xiaojuan Yang, 2022/07/12
- [PATCH 5/6] hw/loongarch: Add acpi ged support, Xiaojuan Yang, 2022/07/12
- [PATCH 2/6] hw/loongarch: Add uefi bios loading support,
Xiaojuan Yang <=
- [PATCH 4/6] hw/loongarch: Add smbios support, Xiaojuan Yang, 2022/07/12
- [PATCH 3/6] hw/loongarch: Add linux kernel booting support, Xiaojuan Yang, 2022/07/12
- [PATCH 1/6] hw/loongarch: Add fw_cfg table support, Xiaojuan Yang, 2022/07/12
- [PATCH 6/6] hw/loongarch: Add fdt support, Xiaojuan Yang, 2022/07/12
- Re: [PATCH v1 0/6] Support booting bios and kernel for LoongArch, Richard Henderson, 2022/07/19