mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
target/riscv: SMBIOS support for RISC-V virt machine
Generate SMBIOS tables for the RISC-V mach-virt. Add CONFIG_SMBIOS=y to the RISC-V default config. Set the default processor family in the type 4 table. The implementation is based on the corresponding ARM and Loongson code. With the patch the following firmware tables are provided: etc/smbios/smbios-anchor etc/smbios/smbios-tables Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Message-ID: <20240123184229.10415-4-heinrich.schuchardt@canonical.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
6f3b727bcc
commit
ecf2864784
2 changed files with 43 additions and 0 deletions
|
@ -41,6 +41,7 @@ config RISCV_VIRT
|
||||||
select RISCV_IMSIC
|
select RISCV_IMSIC
|
||||||
select SIFIVE_PLIC
|
select SIFIVE_PLIC
|
||||||
select SIFIVE_TEST
|
select SIFIVE_TEST
|
||||||
|
select SMBIOS
|
||||||
select VIRTIO_MMIO
|
select VIRTIO_MMIO
|
||||||
select FW_CFG_DMA
|
select FW_CFG_DMA
|
||||||
select PLATFORM_BUS
|
select PLATFORM_BUS
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "hw/riscv/boot.h"
|
#include "hw/riscv/boot.h"
|
||||||
#include "hw/riscv/numa.h"
|
#include "hw/riscv/numa.h"
|
||||||
#include "kvm/kvm_riscv.h"
|
#include "kvm/kvm_riscv.h"
|
||||||
|
#include "hw/firmware/smbios.h"
|
||||||
#include "hw/intc/riscv_aclint.h"
|
#include "hw/intc/riscv_aclint.h"
|
||||||
#include "hw/intc/riscv_aplic.h"
|
#include "hw/intc/riscv_aplic.h"
|
||||||
#include "hw/intc/sifive_plic.h"
|
#include "hw/intc/sifive_plic.h"
|
||||||
|
@ -1221,6 +1222,45 @@ static void create_platform_bus(RISCVVirtState *s, DeviceState *irqchip)
|
||||||
sysbus_mmio_get_region(sysbus, 0));
|
sysbus_mmio_get_region(sysbus, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void virt_build_smbios(RISCVVirtState *s)
|
||||||
|
{
|
||||||
|
MachineClass *mc = MACHINE_GET_CLASS(s);
|
||||||
|
MachineState *ms = MACHINE(s);
|
||||||
|
uint8_t *smbios_tables, *smbios_anchor;
|
||||||
|
size_t smbios_tables_len, smbios_anchor_len;
|
||||||
|
struct smbios_phys_mem_area mem_array;
|
||||||
|
const char *product = "QEMU Virtual Machine";
|
||||||
|
|
||||||
|
if (kvm_enabled()) {
|
||||||
|
product = "KVM Virtual Machine";
|
||||||
|
}
|
||||||
|
|
||||||
|
smbios_set_defaults("QEMU", product, mc->name, false,
|
||||||
|
true, SMBIOS_ENTRY_POINT_TYPE_64);
|
||||||
|
|
||||||
|
if (riscv_is_32bit(&s->soc[0])) {
|
||||||
|
smbios_set_default_processor_family(0x200);
|
||||||
|
} else {
|
||||||
|
smbios_set_default_processor_family(0x201);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* build the array of physical mem area from base_memmap */
|
||||||
|
mem_array.address = s->memmap[VIRT_DRAM].base;
|
||||||
|
mem_array.length = ms->ram_size;
|
||||||
|
|
||||||
|
smbios_get_tables(ms, &mem_array, 1,
|
||||||
|
&smbios_tables, &smbios_tables_len,
|
||||||
|
&smbios_anchor, &smbios_anchor_len,
|
||||||
|
&error_fatal);
|
||||||
|
|
||||||
|
if (smbios_anchor) {
|
||||||
|
fw_cfg_add_file(s->fw_cfg, "etc/smbios/smbios-tables",
|
||||||
|
smbios_tables, smbios_tables_len);
|
||||||
|
fw_cfg_add_file(s->fw_cfg, "etc/smbios/smbios-anchor",
|
||||||
|
smbios_anchor, smbios_anchor_len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void virt_machine_done(Notifier *notifier, void *data)
|
static void virt_machine_done(Notifier *notifier, void *data)
|
||||||
{
|
{
|
||||||
RISCVVirtState *s = container_of(notifier, RISCVVirtState,
|
RISCVVirtState *s = container_of(notifier, RISCVVirtState,
|
||||||
|
@ -1309,6 +1349,8 @@ static void virt_machine_done(Notifier *notifier, void *data)
|
||||||
riscv_setup_direct_kernel(kernel_entry, fdt_load_addr);
|
riscv_setup_direct_kernel(kernel_entry, fdt_load_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virt_build_smbios(s);
|
||||||
|
|
||||||
if (virt_is_acpi_enabled(s)) {
|
if (virt_is_acpi_enabled(s)) {
|
||||||
virt_acpi_setup(s);
|
virt_acpi_setup(s);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue