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

[Xen-devel] [PATCH v8 00/16] Xen ARM DomU ACPI support



The design of this feature is described as below.
Firstly, the toolstack (libxl) generates the ACPI tables according the
number of vcpus and gic controller.

Then, it copies these ACPI tables to DomU non-RAM memory map space and
passes them to UEFI firmware through the "ARM multiboot" protocol.

At last, UEFI gets the ACPI tables through the "ARM multiboot" protocol
and installs these tables like the usual way and passes both ACPI and DT
information to the Xen DomU.

Currently libxl only generates RSDP, XSDT, GTDT, MADT, FADT, DSDT tables
since it's enough now.

This has been tested using guest kernel with the Dom0 ACPI support
patches which could be fetched from linux master or:
https://git.kernel.org/cgit/linux/kernel/git/mfleming/efi.git/log/?h=efi/arm-xen

The UEFI binary could be fetched from or built from edk2 master branch:
http://people.linaro.org/~shannon.zhao/DomU_ACPI/XEN_EFI.fd

This series can be fetched from:
https://git.linaro.org/people/shannon.zhao/xen.git  domu_acpi_v8

Changes since v7:
* use xen_mk_ullong
* replace LIBXL_MAXMEM_CONSTANT everywhere
* do not use return value as output parameter

Changes since v5:
* Set the MADT GICC size correctly
* Add libxl__arch_memory_constant to get acpi table size and add it at
  common code
* other samll changes

Changes since v4:
* make changes in tools/configure.ac instead of tools/configure
* add libxl_arm_no_acpi.c for no acpi build
* add a function to get the acpi table size and use it to set maxmem
* drop HVM_PARAM_CALLBACK_TYPE_PPI_MASK and update hvm_set_callback_via
* add libxl__arch_domain_build_info_acpi_setdefault to set b_info->acpi
  default value separately
* update ACPI_OEM_ID
* set gtdt->counter_block_addresss and gtdt->counter_read_block_address
* add a BUILD_BUG_ON to check if GUEST_MAX_VCPUS >= MAX_VIRT_CPUS

Changes since v3:
* use goto style error handle
* unify configuration option for ACPI
* use extended_checksum instead of checksum in RSDP table
* only require iasl on arm64
* count acpi tables size for maxmem

Changes since v2:
* return error for 32bit domain with acpi enabled
* include actypes.h to reuse the definitions
* rename libxl_arm_acpi.h to libxl_arm.h
* use ACPI_MADT_ENABLED
* rebased on top of Boris's ACPI branch to reuse mk_dsdt.c

Changes since v1:
* move ACPI tables generation codes to a new file
* use static asl file to generate DSDT table and include processor
  device objects
* assign a non-RAM map for ACPI blob
* use existing ACPI table definitions under xen/include/acpi/
* add a configuration for user to enable/disable ACPI generation
* calculate the ACPI table checksum

Shannon Zhao (16):
  tools/libxl: Add an unified configuration option for ACPI
  libxl/arm: prepare for constructing ACPI tables
  libxl/arm: Generate static ACPI DSDT table
  libxl/arm: Estimate the size of ACPI tables
  libxl/arm: Construct ACPI RSDP table
  libxl/arm: Construct ACPI XSDT table
  libxl/arm: Construct ACPI GTDT table
  libxl/arm: Factor MPIDR computing codes out as a helper
  libxl/arm: Construct ACPI MADT table
  libxl/arm: Construct ACPI FADT table
  libxl/arm: Construct ACPI DSDT table
  libxl/arm: Factor finalise_one_memory_node as a gerneric function
  libxl/arm: Add ACPI module
  public/hvm/params.h: Add macros for HVM_PARAM_CALLBACK_TYPE_PPI
  libxl/arm: Initialize domain param HVM_PARAM_CALLBACK_IRQ
  libxl/arm: Add the size of ACPI tables to maxmem

 docs/man/xl.cfg.pod.5.in           |   1 +
 docs/misc/arm/device-tree/acpi.txt |  24 +++
 tools/configure.ac                 |   2 +-
 tools/libacpi/Makefile             |   8 +-
 tools/libacpi/mk_dsdt.c            |  27 ++-
 tools/libxl/Makefile               |  10 +
 tools/libxl/libxl.c                |  45 +++-
 tools/libxl/libxl_arch.h           |   9 +
 tools/libxl/libxl_arm.c            | 104 ++++++++--
 tools/libxl/libxl_arm.h            |  48 +++++
 tools/libxl/libxl_arm_acpi.c       | 408 +++++++++++++++++++++++++++++++++++++
 tools/libxl/libxl_arm_no_acpi.c    |  40 ++++
 tools/libxl/libxl_create.c         |   4 +-
 tools/libxl/libxl_dm.c             |   4 +-
 tools/libxl/libxl_dom.c            |  11 +-
 tools/libxl/libxl_internal.h       |  11 +
 tools/libxl/libxl_types.idl        |   4 +
 tools/libxl/libxl_x86.c            |  15 ++
 tools/libxl/xl_cmdimpl.c           |   2 +-
 xen/arch/arm/domain.c              |   1 +
 xen/arch/arm/domain_build.c        |   9 +-
 xen/arch/x86/hvm/irq.c             |   2 +-
 xen/include/acpi/actbl1.h          |   2 +
 xen/include/public/arch-arm.h      |   7 +
 xen/include/public/hvm/params.h    |   3 +
 25 files changed, 767 insertions(+), 34 deletions(-)
 create mode 100644 docs/misc/arm/device-tree/acpi.txt
 create mode 100644 tools/libxl/libxl_arm.h
 create mode 100644 tools/libxl/libxl_arm_acpi.c
 create mode 100644 tools/libxl/libxl_arm_no_acpi.c

-- 
2.10.0.windows.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.