qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v9 00/24] Generate ACPI v5.1 tables and expose t


From: liang yan
Subject: Re: [Qemu-devel] [PATCH v9 00/24] Generate ACPI v5.1 tables and expose them to guest over fw_cfg on ARM
Date: Fri, 9 Oct 2015 16:34:22 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0

Hello, Shannon,
From: Shannon Zhao <address@hidden>

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_v9

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.

If you want to test, you could get kernel Image from [4] which contains
uart, virtio-mmio, pci drivers, UEFI binary from [5] and Qemu command
line example from [6].
I tested with your kernel and bios, all runs well. But when I try to build a new debian(upstream) with your qemu patch and bios, it always told me could find the right driver, or could not enable ACPI from kernel command line. Do you have a full vm for fedora or you just use the kernel there? Could you tell me more about your detail? Thanks.

Also, we have our own EDK-II, and it could not work now, so I need to do patches too. Do you mind to tell me how you build your QMEU.fd? Where can I access those source code? Thanks.


Best,
Liang


[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
[4]http://people.linaro.org/~shannon.zhao/ACPI_ARM/Image.gz <http://people.linaro.org/%7Eshannon.zhao/ACPI_ARM/Image.gz> [5]http://people.linaro.org/~shannon.zhao/ACPI_ARM/QEMU_EFI.fd <http://people.linaro.org/%7Eshannon.zhao/ACPI_ARM/QEMU_EFI.fd> [6]http://people.linaro.org/~shannon.zhao/ACPI_ARM/acpi_test.sh <http://people.linaro.org/%7Eshannon.zhao/ACPI_ARM/acpi_test.sh>

changes since v8:
   * remove empty _CRS in processor device node and use a define macro
     for SPI base (Igor)
   * Add some reviewd-bys from Igor and Alex

changes since v7:
   * replace build_append_uint32 with 4 build_append_byte (Igor)
   * Fix byte order of aml_unicode() (Igor)
   * Use upper case for enum values and fix enums in aml-build.h (Michael)
   * implement aml_interrupt() based on ACPI 5.0 (Igor)
   * use separate assert (Laszlo)
   * some doc comments fix (Igor & Michael)

changes since v6:
   * add build_append_uint32 (Peter)
   * drop some unnecessary headers and adjust the order of headers (Peter)
   * drop struct AcpiDsdtInfo, AcpiMadtInfo, AcpiGtdtInfo, AcpiPcieInfo
     and reuse MemMapEntry[] and irqmap[] (Peter)
   * record PCI ranges info in MemMapEntry[], not calculate those (Peter)
   * add a separate patch for splitting CONFIG_ACPI (Peter)
   * use VMSTATE_BOOL (Alex)

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 (24):
   hw/acpi/aml-build: Make enum values to be upper case to match coding
     style
   hw/arm/virt: Move common definitions to virt.h
   hw/arm/virt: Record PCIe ranges in MemMapEntry array
   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: 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
   ACPI: split CONFIG_ACPI into 4 pieces
   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                  | 231 ++++++++++++-
  hw/arm/Makefile.objs                 |   1 +
  hw/arm/virt-acpi-build.c             | 644 +++++++++++++++++++++++++++++++++++
  hw/arm/virt.c                        |  85 ++---
  hw/i2c/Makefile.objs                 |   2 +-
  hw/i386/acpi-build.c                 |  82 ++---
  include/hw/acpi/acpi-defs.h          | 210 +++++++++---
  include/hw/acpi/aml-build.h          | 127 +++++--
  include/hw/arm/virt-acpi-build.h     |  44 +++
  include/hw/arm/virt.h                |  64 ++++
  qemu-options.hx                      |   2 +-
  trace-events                         |   3 +
  20 files changed, 1333 insertions(+), 186 deletions(-)
  create mode 100644 hw/arm/virt-acpi-build.c
  create mode 100644 include/hw/arm/virt-acpi-build.h
  create mode 100644 include/hw/arm/virt.h

--
2.0.4



reply via email to

[Prev in Thread] Current Thread [Next in Thread]