[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 00/20] Generate ACPI v5.1 tables and expose it to
From: |
Shannon Zhao |
Subject: |
[Qemu-devel] [PATCH v4 00/20] Generate ACPI v5.1 tables and expose it to guest over fw_cfg on ARM |
Date: |
Fri, 3 Apr 2015 18:03:32 +0800 |
From: Shannon Zhao <address@hidden>
This patch series generate six ACPI v5.1 tables for machine virt on ARM.
The set of generated tables are:
- RSDP
- RSDT
- MADT
- GTDT
- FADT
- DSDT
- MCFG (For PCIe host bridge)
These tables are created dynamically using the function of aml-build.c,
taking into account the needed information passed from the virt machine model.
When the generation is finalized, it use fw_cfg to expose the tables to guest.
You can fetch this from following repo:
http://git.linaro.org/people/shannon.zhao/qemu.git ACPI_ARM_v4
And this patchset refers to Alexander Spyridakis's patches which are sent to
qemu-devel mailing list before.
http://lists.gnu.org/archive/html/qemu-devel/2014-10/msg03987.html
Thanks to Laszlo's work on UEFI (ArmVirtualizationQemu) supporting downloading
ACPI tables over fw_cfg, we now can use ACPI in VM. I have done following vm
startup test:
xp, windows2008, sles11 on X86
Fedora Linux kernel on ARM64
Note:
As upstream kernel doesn't support ACPI PCI host bridge on ARM64, so I use the
Fedora Linux kernel from following address:
https://git.fedorahosted.org/cgit/kernel-arm64.git/log/?h=devel
But maybe this has a bug which cause unsuccessfully initializing BAR, therefore
virtio-pci can't work. I apply the following patch and the virtio-pci, e1000
work well.
diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
index 8456e72..32f8869 100644
--- a/arch/arm64/kernel/pci.c
+++ b/arch/arm64/kernel/pci.c
@@ -240,7 +240,7 @@ static acpi_status setup_resource(struct acpi_resource
*acpi_res, void *data)
if (pci_remap_iospace(res, start) < 0)
return AE_OK;
- info->res_offset[info->res_num] = port - addr.address.minimum;
+ info->res_offset[info->res_num] = port;
} else
info->res_offset[info->res_num] =
addr.address.translation_offset;
changes since v3:
* rebase on upstream qemu
* fix _HID of CPU (Heyi Guo)
* Add PCIe host bridge
changes since v2:
* rebase on Igor Mammedov's new branch ASL_API_v3
* use rsdt instead of xsdt according to Igor Mammedov's suggestion
changes since v1:
* fix bug found by Laszlo
* move common helpers into dedictated file and change generating
table order according to Igor's comments
* fix copyright and function name according to Michael's comments
Shannon Zhao (20):
hw/i386: Move ACPI header definitions in an arch-independent location
hw/i386/acpi-build: move generic acpi building helpers into dedictated
file
hw/arm/virt-acpi-build: Basic framework for building ACPI tables on
ARM
hw/acpi/aml-build: Add aml_memory32_fixed() term
hw/acpi/aml-build: Add aml_interrupt() term
hw/arm/virt-acpi-build: Generation of DSDT table for virt devices
hw/arm/virt-acpi-build: Generate FADT table and update ACPI headers
hw/arm/virt-acpi-build: Generate MADT table
hw/arm/virt-acpi-build: Generate GTDT table
hw/arm/virt-acpi-build: Generate RSDT table
hw/arm/virt-acpi-build: Generate RSDP table
hw/arm/virt-acpi-build: Add PCIe info and generate MCFG table
hw/acpi/aml-build: Add ToUUID macro
hw/acpi/aml-build: Add aml_or() term
hw/acpi/aml-build: Add aml_not() term
hw/acpi/aml-build: Add aml_else() term
hw/acpi/aml-build: Add aml_create_dword_field() term
hw/acpi/aml-build: Add aml_dword_io() term
hw/arm/virt-acpi-build: Add PCIe controller in ACPI DSDT table
hw/arm/virt: Enable dynamic generation of ACPI v5.1 tables
default-configs/arm-softmmu.mak | 1 +
default-configs/i386-softmmu.mak | 3 +
default-configs/mips-softmmu.mak | 3 +
default-configs/mips64-softmmu.mak | 3 +
default-configs/mips64el-softmmu.mak | 3 +
default-configs/mipsel-softmmu.mak | 3 +
default-configs/x86_64-softmmu.mak | 3 +
hw/acpi/Makefile.objs | 5 +-
hw/acpi/aml-build.c | 189 +++++++++-
hw/arm/Makefile.objs | 1 +
hw/arm/virt-acpi-build.c | 678 +++++++++++++++++++++++++++++++++++
hw/arm/virt.c | 78 +++-
hw/i2c/Makefile.objs | 2 +-
hw/i386/acpi-build.c | 81 +----
hw/i386/acpi-defs.h | 368 -------------------
include/hw/acpi/acpi-defs.h | 479 +++++++++++++++++++++++++
include/hw/acpi/aml-build.h | 45 ++-
include/hw/arm/virt-acpi-build.h | 79 ++++
tests/bios-tables-test.c | 2 +-
19 files changed, 1564 insertions(+), 462 deletions(-)
create mode 100644 hw/arm/virt-acpi-build.c
delete mode 100644 hw/i386/acpi-defs.h
create mode 100644 include/hw/acpi/acpi-defs.h
create mode 100644 include/hw/arm/virt-acpi-build.h
--
2.0.4