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: Laszlo Ersek
Subject: Re: [Qemu-devel] [PATCH v9 00/24] Generate ACPI v5.1 tables and expose them to guest over fw_cfg on ARM
Date: Sat, 10 Oct 2015 02:37:34 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0

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.

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>
>> [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]