hw/arm/virt-acpi-build.c: Migrate fw_cfg creation to common location
RISC-V also needs to use the same code to create fw_cfg in DSDT. So, avoid code duplication by moving the code in arm and riscv to a device specific file. Suggested-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Message-ID: <20231218150247.466427-2-sunilvl@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
da14fc74d5
commit
4c7f4f4f05
@ -35,7 +35,7 @@
|
|||||||
#include "target/arm/cpu.h"
|
#include "target/arm/cpu.h"
|
||||||
#include "hw/acpi/acpi-defs.h"
|
#include "hw/acpi/acpi-defs.h"
|
||||||
#include "hw/acpi/acpi.h"
|
#include "hw/acpi/acpi.h"
|
||||||
#include "hw/nvram/fw_cfg.h"
|
#include "hw/nvram/fw_cfg_acpi.h"
|
||||||
#include "hw/acpi/bios-linker-loader.h"
|
#include "hw/acpi/bios-linker-loader.h"
|
||||||
#include "hw/acpi/aml-build.h"
|
#include "hw/acpi/aml-build.h"
|
||||||
#include "hw/acpi/utils.h"
|
#include "hw/acpi/utils.h"
|
||||||
@ -94,21 +94,6 @@ static void acpi_dsdt_add_uart(Aml *scope, const MemMapEntry *uart_memmap,
|
|||||||
aml_append(scope, dev);
|
aml_append(scope, dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void acpi_dsdt_add_fw_cfg(Aml *scope, const MemMapEntry *fw_cfg_memmap)
|
|
||||||
{
|
|
||||||
Aml *dev = aml_device("FWCF");
|
|
||||||
aml_append(dev, aml_name_decl("_HID", aml_string("QEMU0002")));
|
|
||||||
/* device present, functioning, decoding, not shown in UI */
|
|
||||||
aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
|
|
||||||
aml_append(dev, aml_name_decl("_CCA", aml_int(1)));
|
|
||||||
|
|
||||||
Aml *crs = aml_resource_template();
|
|
||||||
aml_append(crs, aml_memory32_fixed(fw_cfg_memmap->base,
|
|
||||||
fw_cfg_memmap->size, AML_READ_WRITE));
|
|
||||||
aml_append(dev, aml_name_decl("_CRS", crs));
|
|
||||||
aml_append(scope, dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void acpi_dsdt_add_flash(Aml *scope, const MemMapEntry *flash_memmap)
|
static void acpi_dsdt_add_flash(Aml *scope, const MemMapEntry *flash_memmap)
|
||||||
{
|
{
|
||||||
Aml *dev, *crs;
|
Aml *dev, *crs;
|
||||||
@ -864,7 +849,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
|||||||
if (vmc->acpi_expose_flash) {
|
if (vmc->acpi_expose_flash) {
|
||||||
acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]);
|
acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]);
|
||||||
}
|
}
|
||||||
acpi_dsdt_add_fw_cfg(scope, &memmap[VIRT_FW_CFG]);
|
fw_cfg_acpi_dsdt_add(scope, &memmap[VIRT_FW_CFG]);
|
||||||
acpi_dsdt_add_virtio(scope, &memmap[VIRT_MMIO],
|
acpi_dsdt_add_virtio(scope, &memmap[VIRT_MMIO],
|
||||||
(irqmap[VIRT_MMIO] + ARM_SPI_BASE), NUM_VIRTIO_TRANSPORTS);
|
(irqmap[VIRT_MMIO] + ARM_SPI_BASE), NUM_VIRTIO_TRANSPORTS);
|
||||||
acpi_dsdt_add_pci(scope, memmap, irqmap[VIRT_PCIE] + ARM_SPI_BASE, vms);
|
acpi_dsdt_add_pci(scope, memmap, irqmap[VIRT_PCIE] + ARM_SPI_BASE, vms);
|
||||||
|
23
hw/nvram/fw_cfg-acpi.c
Normal file
23
hw/nvram/fw_cfg-acpi.c
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Add fw_cfg device in DSDT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hw/nvram/fw_cfg_acpi.h"
|
||||||
|
#include "hw/acpi/aml-build.h"
|
||||||
|
|
||||||
|
void fw_cfg_acpi_dsdt_add(Aml *scope, const MemMapEntry *fw_cfg_memmap)
|
||||||
|
{
|
||||||
|
Aml *dev = aml_device("FWCF");
|
||||||
|
aml_append(dev, aml_name_decl("_HID", aml_string("QEMU0002")));
|
||||||
|
/* device present, functioning, decoding, not shown in UI */
|
||||||
|
aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
|
||||||
|
aml_append(dev, aml_name_decl("_CCA", aml_int(1)));
|
||||||
|
|
||||||
|
Aml *crs = aml_resource_template();
|
||||||
|
aml_append(crs, aml_memory32_fixed(fw_cfg_memmap->base,
|
||||||
|
fw_cfg_memmap->size, AML_READ_WRITE));
|
||||||
|
aml_append(dev, aml_name_decl("_CRS", crs));
|
||||||
|
aml_append(scope, dev);
|
||||||
|
}
|
@ -17,3 +17,4 @@ system_ss.add(when: 'CONFIG_XLNX_EFUSE_ZYNQMP', if_true: files(
|
|||||||
system_ss.add(when: 'CONFIG_XLNX_BBRAM', if_true: files('xlnx-bbram.c'))
|
system_ss.add(when: 'CONFIG_XLNX_BBRAM', if_true: files('xlnx-bbram.c'))
|
||||||
|
|
||||||
specific_ss.add(when: 'CONFIG_PSERIES', if_true: files('spapr_nvram.c'))
|
specific_ss.add(when: 'CONFIG_PSERIES', if_true: files('spapr_nvram.c'))
|
||||||
|
specific_ss.add(when: 'CONFIG_ACPI', if_true: files('fw_cfg-acpi.c'))
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "hw/acpi/acpi.h"
|
#include "hw/acpi/acpi.h"
|
||||||
#include "hw/acpi/aml-build.h"
|
#include "hw/acpi/aml-build.h"
|
||||||
#include "hw/acpi/utils.h"
|
#include "hw/acpi/utils.h"
|
||||||
|
#include "hw/nvram/fw_cfg_acpi.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "sysemu/reset.h"
|
#include "sysemu/reset.h"
|
||||||
@ -97,22 +98,6 @@ static void acpi_dsdt_add_cpus(Aml *scope, RISCVVirtState *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void acpi_dsdt_add_fw_cfg(Aml *scope, const MemMapEntry *fw_cfg_memmap)
|
|
||||||
{
|
|
||||||
Aml *dev = aml_device("FWCF");
|
|
||||||
aml_append(dev, aml_name_decl("_HID", aml_string("QEMU0002")));
|
|
||||||
|
|
||||||
/* device present, functioning, decoding, not shown in UI */
|
|
||||||
aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
|
|
||||||
aml_append(dev, aml_name_decl("_CCA", aml_int(1)));
|
|
||||||
|
|
||||||
Aml *crs = aml_resource_template();
|
|
||||||
aml_append(crs, aml_memory32_fixed(fw_cfg_memmap->base,
|
|
||||||
fw_cfg_memmap->size, AML_READ_WRITE));
|
|
||||||
aml_append(dev, aml_name_decl("_CRS", crs));
|
|
||||||
aml_append(scope, dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* RHCT Node[N] starts at offset 56 */
|
/* RHCT Node[N] starts at offset 56 */
|
||||||
#define RHCT_NODE_ARRAY_OFFSET 56
|
#define RHCT_NODE_ARRAY_OFFSET 56
|
||||||
|
|
||||||
@ -226,7 +211,7 @@ static void build_dsdt(GArray *table_data,
|
|||||||
scope = aml_scope("\\_SB");
|
scope = aml_scope("\\_SB");
|
||||||
acpi_dsdt_add_cpus(scope, s);
|
acpi_dsdt_add_cpus(scope, s);
|
||||||
|
|
||||||
acpi_dsdt_add_fw_cfg(scope, &memmap[VIRT_FW_CFG]);
|
fw_cfg_acpi_dsdt_add(scope, &memmap[VIRT_FW_CFG]);
|
||||||
|
|
||||||
aml_append(dsdt, scope);
|
aml_append(dsdt, scope);
|
||||||
|
|
||||||
|
15
include/hw/nvram/fw_cfg_acpi.h
Normal file
15
include/hw/nvram/fw_cfg_acpi.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* ACPI support for fw_cfg
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FW_CFG_ACPI_H
|
||||||
|
#define FW_CFG_ACPI_H
|
||||||
|
|
||||||
|
#include "qemu/osdep.h"
|
||||||
|
#include "exec/hwaddr.h"
|
||||||
|
|
||||||
|
void fw_cfg_acpi_dsdt_add(Aml *scope, const MemMapEntry *fw_cfg_memmap);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user