From: Shannon Zhao <shannon.z...@linaro.org> This patch series generate seven ACPI 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_v6 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. Now upstream kernel applies ACPI patchset, so we can boot it with ACPI, while we need to apply patches[1] to make tty work, patch[2] to make virtio-mmio work and apply patch[3] and the relevant patches to make PCI devices works, e.g. virtio-net-pci, e1000. On the other hand, you can directly use the Fedora Linux kernel from following address: https://git.fedorahosted.org/cgit/kernel-arm64.git/log/?h=devel I've done test with following VM: xp, windows2008, sles11 on X86 upstream kernel and Fedora Linux kernel on ARM64 In addtion, dump all the acpi tables, use iasl -d *.dat to convert to *.asl and use iasl -tc *.asl to compile them to *.hex. No error appears. [1] http://git.linaro.org/leg/acpi/acpi.git/shortlog/refs/heads/acpi-sbsa [2] http://git.linaro.org/leg/acpi/acpi.git/commit/57acba56d55e3fb521fd6ce767446459ef7a4943 [3] https://git.fedorahosted.org/cgit/kernel-arm64.git/commit/?h=devel&id=8cf58cbe94b982b680229e5b164231eea0ca2d11 changes since v5: * Fix table version (Igor) * only create CPU device objects for present CPUs (Igor) * drop madt->local_apic_address and madt->flags (Igor) * adjust implementation of ToUUID macro (Igor) * Fix aml_buffer() (Michael & Igor) * Fix aml_not() changes since v4: * use trace_* instead of DPRINTF (Igor & Alex) * use standard QEMU style for structs (Michael) * add "-no-acpi" option support for arm * use extractNN for bits operation (Alex) * use AmlReadAndWrite enum for rw flags (Igor) * s/uint64_t/uint32_t/ (Igor) * use enum for interrupt flag (Igor) * simplify aml_device use in DSDT (Alex) * share RSDT table generating code with x86 (Igor) * remove unnecessary 1 in MCFG table generating code (Alex & Peter) * use string for ToUUID macro (Igor) * aml_or and aml_and use two args (Igor) * add comments on UUID (Michael) * change PCI MMIO region non-cacheable (Peter) * fix wrong io map (Peter) * add several reviewed-by's from Alex, thanks 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 (22): 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: Make aml_buffer() definition consistent with the spec hw/acpi/aml-build: Add ToUUID macro hw/acpi/aml-build: Add aml_or() term hw/acpi/aml-build: Add aml_lnot() 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/acpi/aml-build: Add Unicode macro 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 | 270 ++++++++++++++- hw/arm/Makefile.objs | 1 + hw/arm/virt-acpi-build.c | 639 +++++++++++++++++++++++++++++++++++ hw/arm/virt.c | 78 ++++- hw/i2c/Makefile.objs | 2 +- hw/i386/acpi-build.c | 103 +----- hw/i386/acpi-defs.h | 368 -------------------- include/hw/acpi/acpi-defs.h | 482 ++++++++++++++++++++++++++ include/hw/acpi/aml-build.h | 96 +++++- include/hw/arm/virt-acpi-build.h | 82 +++++ qemu-options.hx | 2 +- tests/bios-tables-test.c | 2 +- trace-events | 3 + 21 files changed, 1668 insertions(+), 484 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