kvmarm.lists.cs.columbia.edu archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 00/30] EFI and ACPI support for arm64
@ 2023-02-13 10:17 Nikos Nikoleris
  2023-02-13 10:17 ` [PATCH v4 01/30] lib: Move acpi header and implementation to lib Nikos Nikoleris
                   ` (29 more replies)
  0 siblings, 30 replies; 49+ messages in thread
From: Nikos Nikoleris @ 2023-02-13 10:17 UTC (permalink / raw)
  To: kvm, kvmarm, andrew.jones; +Cc: pbonzini, alexandru.elisei, ricarkol

Hello,

This series adds initial support for building arm64 tests as EFI
apps and running them under QEMU. Much like x86_64, we import external
dependencies from gnu-efi and adapt them to work with types and other
assumptions from kvm-unit-tests. In addition, this series adds support
for enumerating parts of the system using ACPI.

The first set of patches, moves the existing ACPI code to the common
lib path. Then, it extends definitions and functions to allow for more
robust discovery of ACPI tables. We add support for setting up the PSCI
conduit, discovering the UART, timers, GIC and cpus via ACPI. The code
retains existing behavior and gives priority to discovery through DT
when one has been provided.

In the second set of patches, we add support for getting the command
line from the EFI shell. This is a requirement for many of the
existing arm64 tests.

In the third set of patches, we import code from gnu-efi, make minor
changes and add an alternative setup sequence from arm64 systems that
boot through EFI. Finally, we add support in the build system and a
run script which is used to run an EFI app.

After this set of patches one can build arm64 EFI tests:

$> ./configure --enable-efi
$> make

And use the run script to run an EFI tests:

$> ./arm/efi/run ./arm/selftest.efi -smp 2 -m 256 -append "setup smp=2 mem=256"

Or all tests:

$> ./run_tests.sh

There are a few items that this series does not address but they would
be useful to have:
 - Support for booting the system from EL2. Currently, we assume that a
   test starts EL1. This will be required to run EFI tests on sytems
   that implement EL2.
 - Support for reading environment variables and populating __envp.
 - Support for discovering the PCI subsystem using ACPI.
 - Get rid of other assumptions (e.g., vmalloc area) that don't hold on
   real HW.
 - Various fixes related to cache maintaince to better support turn the
   MMU off.
 - Switch to a new stack and avoid relying on the one provided by EFI.

git branch: https://github.com/relokin/kvm-unit-tests/pull/new/target-efi-upstream-v4

v3: https://lore.kernel.org/all/20220630100324.3153655-1-nikos.nikoleris@arm.com/
v2: https://lore.kernel.org/kvm/20220506205605.359830-1-nikos.nikoleris@arm.com/

Changes in v4:
 - Removed patch that reworks cache maintenance when turning the MMU
   off. This is not strictly required for EFI tests running with tcg and
   will be addressed in a separate series by Alex.
 - Fix compilation for arm (Alex).
 - Convert ACPI tables to Linux style (Alex).

Changes in v3:
 - Addressed feedback from Drew, Alex and Ricardo. Many thanks for the reviews!
 - Added support for discovering the GIC through ACPI
 - Added a missing header file (<elf.h>)
 - Added support for correctly parsing the outcome of tests (./run_tests)

Thanks,

Nikos

Alexandru Elisei (3):
  arm/Makefile.common: Compile lib/acpi.c if CONFIG_EFI=y
  lib/acpi: Convert table names to Linux style
  lib: arm: Print test exit status

Andrew Jones (2):
  arm/arm64: Rename etext to _etext
  arm64: Add a new type of memory type flag MR_F_RESERVED

Nikos Nikoleris (25):
  lib: Move acpi header and implementation to lib
  x86: Move x86_64-specific EFI CFLAGS to x86_64 Makefile
  lib: Apply Lindent to acpi.{c,h}
  lib: Fix style for acpi.{c,h}
  x86: Avoid references to fields of ACPI tables
  lib/acpi: Ensure all struct definition for ACPI tables are packed
  lib/acpi: Add support for the XSDT table
  lib/acpi: Extend the definition of the FADT table
  devicetree: Check that fdt is not NULL in dt_available()
  arm64: Add support for setting up the PSCI conduit through ACPI
  arm64: Add support for discovering the UART through ACPI
  arm64: Add support for timer initialization through ACPI
  arm64: Add support for cpu initialization through ACPI
  arm64: Add support for gic initialization through ACPI
  lib/printf: Support for precision modifier in printf
  lib/printf: Add support for printing wide strings
  lib/efi: Add support for getting the cmdline
  lib: Avoid ms_abi for calls related to EFI on arm64
  arm64: Add a setup sequence for systems that boot through EFI
  arm64: Copy code from GNU-EFI
  arm64: Change GNU-EFI imported file to use defined types
  arm64: Use code from the gnu-efi when booting with EFI
  lib: Avoid external dependency in libelf
  arm64: Add support for efi in Makefile
  arm64: Add an efi/run script

 Makefile                    |   4 -
 arm/Makefile.arm            |   6 +
 arm/Makefile.arm64          |  22 ++-
 arm/Makefile.common         |  51 ++++--
 arm/cstart.S                |   1 +
 arm/cstart64.S              |   7 +
 arm/dummy.c                 |  12 ++
 arm/efi/crt0-efi-aarch64.S  | 141 +++++++++++++++++
 arm/efi/elf_aarch64_efi.lds |  63 ++++++++
 arm/efi/reloc_aarch64.c     |  93 +++++++++++
 arm/efi/run                 |  61 ++++++++
 arm/flat.lds                |   2 +-
 arm/micro-bench.c           |   4 +-
 arm/run                     |  14 +-
 arm/timer.c                 |  10 +-
 configure                   |  15 +-
 lib/acpi.c                  | 129 +++++++++++++++
 lib/acpi.h                  | 303 ++++++++++++++++++++++++++++++++++++
 lib/argv.c                  |   2 +-
 lib/argv.h                  |   1 +
 lib/arm/asm/setup.h         |   9 ++
 lib/arm/asm/timer.h         |   2 +
 lib/arm/gic.c               | 139 ++++++++++++++++-
 lib/arm/io.c                |  41 ++++-
 lib/arm/mmu.c               |   4 +
 lib/arm/psci.c              |  37 ++++-
 lib/arm/setup.c             | 264 +++++++++++++++++++++++++------
 lib/arm/timer.c             |  92 +++++++++++
 lib/devicetree.c            |   2 +-
 lib/efi.c                   | 102 ++++++++++++
 lib/elf.h                   |  57 +++++++
 lib/libcflat.h              |   1 +
 lib/linux/efi.h             |  25 +++
 lib/printf.c                | 194 +++++++++++++++++++++--
 lib/x86/acpi.c              |  82 ----------
 lib/x86/acpi.h              | 112 -------------
 lib/x86/asm/setup.h         |   2 +-
 lib/x86/setup.c             |   2 +-
 scripts/runtime.bash        |  13 +-
 x86/Makefile.common         |   2 +-
 x86/Makefile.x86_64         |   4 +
 x86/s3.c                    |  21 +--
 x86/vmexit.c                |   4 +-
 43 files changed, 1831 insertions(+), 321 deletions(-)
 create mode 100644 arm/dummy.c
 create mode 100644 arm/efi/crt0-efi-aarch64.S
 create mode 100644 arm/efi/elf_aarch64_efi.lds
 create mode 100644 arm/efi/reloc_aarch64.c
 create mode 100755 arm/efi/run
 create mode 100644 lib/acpi.c
 create mode 100644 lib/acpi.h
 create mode 100644 lib/arm/timer.c
 create mode 100644 lib/elf.h
 delete mode 100644 lib/x86/acpi.c
 delete mode 100644 lib/x86/acpi.h

-- 
2.25.1


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

end of thread, other threads:[~2023-04-25 18:31 UTC | newest]

Thread overview: 49+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-13 10:17 [PATCH v4 00/30] EFI and ACPI support for arm64 Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 01/30] lib: Move acpi header and implementation to lib Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 02/30] x86: Move x86_64-specific EFI CFLAGS to x86_64 Makefile Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 03/30] arm/Makefile.common: Compile lib/acpi.c if CONFIG_EFI=y Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 04/30] lib: Apply Lindent to acpi.{c,h} Nikos Nikoleris
2023-03-09  7:11   ` Shaoqin Huang
2023-03-21 17:32     ` Andrew Jones
2023-03-22 10:05       ` Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 05/30] lib: Fix style for acpi.{c,h} Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 06/30] lib/acpi: Convert table names to Linux style Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 07/30] x86: Avoid references to fields of ACPI tables Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 08/30] lib/acpi: Ensure all struct definition for ACPI tables are packed Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 09/30] lib/acpi: Add support for the XSDT table Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 10/30] lib/acpi: Extend the definition of the FADT table Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 11/30] devicetree: Check that fdt is not NULL in dt_available() Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 12/30] arm64: Add support for setting up the PSCI conduit through ACPI Nikos Nikoleris
2023-03-21 17:31   ` Andrew Jones
2023-02-13 10:17 ` [PATCH v4 13/30] arm64: Add support for discovering the UART " Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 14/30] arm64: Add support for timer initialization " Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 15/30] arm64: Add support for cpu " Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 16/30] arm64: Add support for gic " Nikos Nikoleris
2023-03-30  6:46   ` Shaoqin Huang
2023-02-13 10:17 ` [PATCH v4 17/30] lib/printf: Support for precision modifier in printf Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 18/30] lib/printf: Add support for printing wide strings Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 19/30] lib/efi: Add support for getting the cmdline Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 20/30] arm/arm64: Rename etext to _etext Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 21/30] lib: Avoid ms_abi for calls related to EFI on arm64 Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 22/30] arm64: Add a new type of memory type flag MR_F_RESERVED Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 23/30] arm64: Add a setup sequence for systems that boot through EFI Nikos Nikoleris
2023-04-25  7:04   ` Shaoqin Huang
2023-04-25  9:09     ` Nikos Nikoleris
2023-04-25 18:31       ` Andrew Jones
2023-02-13 10:17 ` [PATCH v4 24/30] arm64: Copy code from GNU-EFI Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 25/30] arm64: Change GNU-EFI imported code to use defined types Nikos Nikoleris
2023-03-30  6:49   ` Shaoqin Huang
2023-02-13 10:17 ` [PATCH v4 26/30] arm64: Use code from the gnu-efi when booting with EFI Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 27/30] lib: Avoid external dependency in libelf Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 28/30] arm64: Add support for efi in Makefile Nikos Nikoleris
2023-03-21 18:21   ` Andrew Jones
2023-02-13 10:17 ` [PATCH v4 29/30] lib: arm: Print test exit status Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 30/30] arm64: Add an efi/run script Nikos Nikoleris
2023-03-21 18:41   ` Andrew Jones
2023-03-22 10:02     ` Nikos Nikoleris
2023-03-22 11:24       ` Andrew Jones
2023-03-22 11:57         ` Nikos Nikoleris
2023-03-22 12:32           ` Andrew Jones
2023-03-22 19:09             ` Nikos Nikoleris
2023-03-23 17:52               ` Andrew Jones
2023-03-28  9:03                 ` Alexandru Elisei

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).