qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* Re: [Qemu-devel] [PATCH v9 00/24] Generate ACPI v5.1 tables and expose them to guest over fw_cfg on ARM
@ 2015-10-09 22:34 liang yan
  2015-10-10  0:37 ` Laszlo Ersek
  0 siblings, 1 reply; 11+ messages in thread
From: liang yan @ 2015-10-09 22:34 UTC (permalink / raw)
  To: zhaoshenglong, shannon.zhao; +Cc: qemu-devel

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

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v9 00/24] Generate ACPI v5.1 tables and expose them to guest over fw_cfg on ARM
@ 2015-10-13 23:15 liang yan
  0 siblings, 0 replies; 11+ messages in thread
From: liang yan @ 2015-10-13 23:15 UTC (permalink / raw)
  To: lersek; +Cc: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 11005 bytes --]

Hello, Laszlo,
> On 10/10/15 00:34, liang yan wrote:
> >/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./
>
> The relevant edk2 patches have been in the upstream repo for quite some
> time now; you shouldn't need anything extra.
I built a new QEMU.fd file, and it worked fine. Thanks for your reply.

Best,
Liang

> You can clone the repo from <https://github.com/tianocore/edk2.git>.
>
> Build instructions are written up for example in the linaro wiki
> <https://wiki.linaro.org/LEG/UEFIforQEMU>, but someone else asked about
> the same just the other day on the edk2 mailing list, and I answered there:
>
> http://news.gmane.org/address@hidden
>
> Wrt. the QEMU command line, I recommend something like:
>
>    # recreate first flash drive from most recent firmware build
>    cat \
>      .../Build/ArmVirtQemu-AARCH64/DEBUG_GCC48/FV/QEMU_EFI.fd \
>      /dev/zero \
>    | head -c $((64 * 1024 * 1024)) >| flash0.img
>
>    # create second flash drive (varstore) if it doesn't exist
>    if ! [ -e flash1.img ]; then
>      head -c $((64 * 1024 * 1024)) /dev/zero > flash1.img
>    fi
>
>    # launch qemu (TCG)
>    .../qemu-system-aarch64 \
>      -nodefaults \
>      -nodefconfig \
>      -nographic \
>      \
>      -m 2048 \
>      -cpu cortex-a57 \
>      -M virt \
>      \
>      -drive if=pflash,format=raw,file=flash0.img,readonly \
>      -drive if=pflash,format=raw,file=flash1.img \
>      \
>      -chardev stdio,signal=off,mux=on,id=char0 \
>      -mon chardev=char0,mode=readline,default \
>      -serial chardev:char0 \
>      \
>      ...
>
> These commands are appropriate for a "persistent" virtual machine (ie.
> one where you want to preserve the non-volatile UEFI variables from boot
> to boot).
>
> If you want to start again with an empty varstore, just delete
> "flash1.img". (Normally, you'd only do that when also zapping the VM's
> system disk.)
>
> However, if you can (and are willing to) use libvirt, I certainly
> recommend that you do. See eg.
> <https://fedoraproject.org/wiki/Architectures/AArch64/Install_with_QEMU>
> (although virt-install has become even more convenient since then).
>
> HTH
> Laszlo
>
>
> >//
> >//
> >/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>/
> >/> <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>/
> >/> <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>/
> >/> <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/
> >//

[-- Attachment #2: Type: text/html, Size: 15394 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v9 00/24] Generate ACPI v5.1 tables and expose them to guest over fw_cfg on ARM
@ 2015-05-25  2:54 Shannon Zhao
  2015-05-27  9:43 ` Igor Mammedov
  0 siblings, 1 reply; 11+ messages in thread
From: Shannon Zhao @ 2015-05-25  2:54 UTC (permalink / raw)
  To: qemu-devel, peter.maydell, pbonzini, christoffer.dall,
	a.spyridakis, claudio.fontana, imammedo, hanjun.guo, mst, lersek,
	alex.bennee
  Cc: hangaohuai, zhaoshenglong, peter.huangpeng, shannon.zhao

From: Shannon Zhao <shannon.zhao@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_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].

[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
[5] http://people.linaro.org/~shannon.zhao/ACPI_ARM/QEMU_EFI.fd
[6] http://people.linaro.org/~shannon.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

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-10-13 23:16 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-09 22:34 [Qemu-devel] [PATCH v9 00/24] Generate ACPI v5.1 tables and expose them to guest over fw_cfg on ARM liang yan
2015-10-10  0:37 ` Laszlo Ersek
  -- strict thread matches above, loose matches on Subject: below --
2015-10-13 23:15 liang yan
2015-05-25  2:54 Shannon Zhao
2015-05-27  9:43 ` Igor Mammedov
2015-05-27 10:16   ` Michael S. Tsirkin
2015-05-27 11:58     ` Peter Maydell
2015-05-27 12:01       ` Michael S. Tsirkin
2015-05-27 12:07         ` Peter Maydell
2015-05-27 14:07           ` Michael S. Tsirkin
2015-05-28 14:46             ` Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).