[PATCH v2 00/28] Implement ACPI on aarch64

Simon Glass sjg at chromium.org
Fri Sep 6 22:00:57 CEST 2024


Hi Patrick,

On Fri, 6 Sept 2024 at 01:22, Patrick Rudolph
<patrick.rudolph at 9elements.com> wrote:
>
> Based on the existing work done by Simon Glass this series adds
> support for booting aarch64 devices using ACPI only.
> As first target QEMU SBSA support is added, which relies on ACPI
> only to boot an OS. As secondary target the Raspberry Pi4 was used,
> which is broadly available and allows easy testing of the proposed
> solution.
>
> The series is split into ACPI cleanups and code movements, adding
> Arm specific ACPI tables and finally SoC and mainboard related
> changes to boot a Linux on the QEMU SBSA and RPi4. Currently only the
> mandatory ACPI tables are supported, allowing to boot into Linux
> without errors.
>
> The QEMU SBSA support is feature complete and provides the same
> functionality as the EDK2 implementation.
>
> The changes were tested on real hardware as well on QEMU v9.0:
>
> qemu-system-aarch64 -machine sbsa-ref -nographic -cpu cortex-a57 \
>                     -pflash secure-world.rom \
>                     -pflash unsecure-world.rom
>
> qemu-system-aarch64 -machine raspi4b -kernel u-boot.bin -cpu cortex-a72 \
> -smp 4 -m 2G -drive file=raspbian.img,format=raw,index=0 \
> -dtb bcm2711-rpi-4-b.dtb -nographic
>
> Please note that the current implementation still requires a DTB to be

The word 'still' suggests that it won't one day. But U-Boot uses
devicetree for its configuration so this will always be the case. I
suggest removing 'still'.

> provided to U-Boot and that the DTB is used within U-Boot to load drivers,
> to disable/enable certain hardware blocks in ACPI. The DTB is not passed
> to the OS when using the bootefi cmd.
>
> Tested against FWTS V24.03.00.
>
> Known issues:
> - The QEMU rpi4 support is currently limited as it doesn't emulate PCI,
>   USB or ethernet devices!
> - The SMP bringup doesn't work on real hardware, but works in QEMU.
> - PCI on RPI4 isn't working on real hardware since the pcie_brcmstb
>   Linux kernel module doesn't support ACPI yet.
>
> Maximilian Brune (3):
>   acpi: x86: Move SPCR and DBG2 into common code
>   acpi: x86: Write FADT in common code
>   serial: serial_pl01x: Implement .getinfo() for PL01
>
> Patrick Rudolph (23):
>   acpi: x86: Move MADT to common code
>   acpi: Fix typo
>   acpi: Add define for GTDT
>   arm: acpi: Add generic ACPI methods
>   acpi: Add fill_madt to acpi_ops
>   acpi: acpi_table: Bump revisions
>   acpi: Add ACPITAB for PPTT and GTDT
>   acpi: acpi_table: Add IORT support
>   acpi: Move function prototype
>   acpi: acpi_table: Support ACPI 2.0 platforms
>   efi_loader: Install ACPI tables
>   acpi: Add processor device
>   drivers: usb: Add generic XHCI
>   drivers: ata: Rename ahci_mvebu
>   drivers/cpu: Add generic armv8 cpu driver
>   common: Enable BLOBLIST_TABLES on arm
>   board: emulation: Add QEMU sbsa support
>   arm: mach-bcm283x: Map the ARM local MMIO as well
>   arm: bcm283x: Generate ACPI tables
>   arm: cpu: Add ACPI parking protocol support
>   arm: mach-bcm283x: Add ARMV8_MULTIENTRY support
>   arm: mach-bcm283x: Enable ARMV8_MULTIENTRY
>   configs: Add RPI4 ACPI defconfig
>
> Simon Glass (2):
>   arm: mach-bcm283x: Bring in some header files from tianocore
>   board: raspberrypi: Add ASL files from tianocore
>
>  MAINTAINERS                                   |   2 +-
>  arch/arm/Kconfig                              |   2 +
>  arch/arm/cpu/armv8/Makefile                   |   1 +
>  arch/arm/cpu/armv8/acpi_park_v8.S             | 107 ++++
>  arch/arm/cpu/armv8/start.S                    |   4 +
>  arch/arm/dts/qemu-sbsa.dts                    |  49 ++
>  arch/arm/include/asm/acpi_table.h             | 160 +++++
>  arch/arm/include/asm/arch-qemu-sbsa/boot0.h   |  33 +
>  arch/arm/lib/Makefile                         |   1 +
>  arch/arm/lib/acpi_table.c                     | 237 +++++++
>  arch/arm/mach-bcm283x/Kconfig                 |   4 +
>  arch/arm/mach-bcm283x/Makefile                |   4 +
>  arch/arm/mach-bcm283x/bcm2711_acpi.c          | 149 +++++
>  .../mach-bcm283x/include/mach/acpi/bcm2711.h  | 152 +++++
>  .../mach-bcm283x/include/mach/acpi/bcm2836.h  | 127 ++++
>  .../include/mach/acpi/bcm2836_gpio.h          |  19 +
>  .../include/mach/acpi/bcm2836_gpu.h           |  47 ++
>  .../include/mach/acpi/bcm2836_pwm.h           |  33 +
>  .../include/mach/acpi/bcm2836_sdhost.h        |  18 +
>  .../include/mach/acpi/bcm2836_sdio.h          |  21 +
>  arch/arm/mach-bcm283x/init.c                  |  10 +-
>  arch/arm/mach-qemu/Kconfig                    |  36 +-
>  arch/sandbox/lib/Makefile                     |   9 +-
>  arch/sandbox/lib/acpi_table.c                 |   7 +
>  arch/x86/cpu/apollolake/acpi.c                |  20 +-
>  arch/x86/cpu/baytrail/acpi.c                  |  17 +-
>  arch/x86/cpu/intel_common/acpi.c              |  20 +-
>  arch/x86/cpu/quark/acpi.c                     |  19 +-
>  arch/x86/cpu/tangier/acpi.c                   |  31 +-
>  arch/x86/include/asm/acpi_table.h             |  28 +-
>  arch/x86/lib/acpi_table.c                     | 243 +-------
>  board/emulation/qemu-arm/MAINTAINERS          |   2 +
>  board/emulation/qemu-sbsa/Kconfig             |  56 ++
>  board/emulation/qemu-sbsa/Makefile            |   8 +
>  board/emulation/qemu-sbsa/acpi.c              | 244 ++++++++
>  board/emulation/qemu-sbsa/dsdt.asl            | 483 +++++++++++++++
>  board/emulation/qemu-sbsa/lowlevel_init.S     |  22 +
>  board/emulation/qemu-sbsa/qemu-sbsa.c         | 422 +++++++++++++
>  board/emulation/qemu-sbsa/qemu-sbsa.env       |  14 +
>  board/emulation/qemu-sbsa/qemu-sbsa.h         |  38 ++
>  board/emulation/qemu-sbsa/smc.c               |  72 +++
>  board/raspberrypi/rpi/.gitignore              |   3 +
>  board/raspberrypi/rpi/Makefile                |   2 +
>  board/raspberrypi/rpi/acpitables.h            |  90 +++
>  board/raspberrypi/rpi/dsdt.asl                | 290 +++++++++
>  board/raspberrypi/rpi/emmc.asl                | 136 +++++
>  board/raspberrypi/rpi/gpudevs.asl             | 372 +++++++++++
>  board/raspberrypi/rpi/pci.asl                 | 177 ++++++
>  board/raspberrypi/rpi/pep.asl                 |  90 +++
>  board/raspberrypi/rpi/rhpx.asl                | 195 ++++++
>  board/raspberrypi/rpi/rpi.c                   | 183 ++++++
>  board/raspberrypi/rpi/sdhc.asl                | 111 ++++
>  board/raspberrypi/rpi/uart.asl                | 208 +++++++
>  boot/bootflow.c                               |   8 +-
>  common/Kconfig                                |   1 +
>  configs/clearfog_defconfig                    |   2 +-
>  configs/clearfog_gt_8k_defconfig              |   2 +-
>  configs/clearfog_sata_defconfig               |   2 +-
>  configs/clearfog_spi_defconfig                |   2 +-
>  configs/db-88f6820-gp_defconfig               |   2 +-
>  configs/ds116_defconfig                       |   2 +-
>  configs/helios4_defconfig                     |   2 +-
>  configs/mvebu_crb_cn9130_defconfig            |   2 +-
>  configs/mvebu_db-88f3720_defconfig            |   2 +-
>  configs/mvebu_db_armada8k_defconfig           |   2 +-
>  configs/mvebu_db_cn9130_defconfig             |   2 +-
>  configs/mvebu_espressobin-88f3720_defconfig   |   2 +-
>  .../mvebu_espressobin_ultra-88f3720_defconfig |   2 +-
>  configs/mvebu_mcbin-88f8040_defconfig         |   2 +-
>  configs/mvebu_puzzle-m801-88f8040_defconfig   |   2 +-
>  configs/n2350_defconfig                       |   2 +-
>  configs/octeon_nic23_defconfig                |   2 +-
>  configs/qemu-arm-sbsa_defconfig               |  10 +
>  configs/rpi_4_acpi_defconfig                  |  72 +++
>  configs/turris_omnia_defconfig                |   2 +-
>  doc/board/emulation/index.rst                 |   1 +
>  doc/board/emulation/qemu-sbsa.rst             |  98 +++
>  doc/develop/driver-model/virtio.rst           |   1 +
>  drivers/ata/Kconfig                           |  12 +-
>  drivers/ata/Makefile                          |   2 +-
>  drivers/ata/{ahci_mvebu.c => ahci_generic.c}  |  17 +-
>  drivers/core/acpi.c                           |  16 +
>  drivers/cpu/Kconfig                           |   6 +
>  drivers/cpu/Makefile                          |   3 +
>  drivers/cpu/armv8_cpu.c                       |  90 +++
>  drivers/cpu/bcm283x_cpu.c                     | 194 ++++++
>  drivers/pci/pcie_brcmstb.c                    | 101 +--
>  drivers/serial/serial_pl01x.c                 |  24 +
>  drivers/usb/host/Kconfig                      |   8 +
>  drivers/usb/host/Makefile                     |   1 +
>  drivers/usb/host/xhci-generic.c               |  88 +++
>  include/acpi/acpi_table.h                     | 324 +++++++++-
>  include/acpi/acpigen.h                        |  12 +
>  include/bloblist.h                            |   1 +
>  include/configs/qemu-sbsa.h                   |  97 +++
>  include/dm/acpi.h                             |  26 +
>  include/serial.h                              |   1 +
>  lib/Kconfig                                   |  30 +-
>  lib/acpi/acpi_table.c                         | 577 ++++++++++++++++--
>  lib/acpi/acpigen.c                            |  11 +
>  lib/efi_loader/efi_acpi.c                     |  57 +-
>  test/dm/acpi.c                                |  42 ++
>  test/py/tests/test_event_dump.py              |   1 +
>  103 files changed, 6262 insertions(+), 534 deletions(-)
>  create mode 100644 arch/arm/cpu/armv8/acpi_park_v8.S
>  create mode 100644 arch/arm/dts/qemu-sbsa.dts
>  create mode 100644 arch/arm/include/asm/arch-qemu-sbsa/boot0.h
>  create mode 100644 arch/arm/lib/acpi_table.c
>  create mode 100644 arch/arm/mach-bcm283x/bcm2711_acpi.c
>  create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2711.h
>  create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836.h
>  create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_gpio.h
>  create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_gpu.h
>  create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_pwm.h
>  create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_sdhost.h
>  create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_sdio.h
>  create mode 100644 arch/sandbox/lib/acpi_table.c
>  create mode 100644 board/emulation/qemu-sbsa/Kconfig
>  create mode 100644 board/emulation/qemu-sbsa/Makefile
>  create mode 100644 board/emulation/qemu-sbsa/acpi.c
>  create mode 100644 board/emulation/qemu-sbsa/dsdt.asl
>  create mode 100644 board/emulation/qemu-sbsa/lowlevel_init.S
>  create mode 100644 board/emulation/qemu-sbsa/qemu-sbsa.c
>  create mode 100644 board/emulation/qemu-sbsa/qemu-sbsa.env
>  create mode 100644 board/emulation/qemu-sbsa/qemu-sbsa.h
>  create mode 100644 board/emulation/qemu-sbsa/smc.c
>  create mode 100644 board/raspberrypi/rpi/.gitignore
>  create mode 100644 board/raspberrypi/rpi/acpitables.h
>  create mode 100644 board/raspberrypi/rpi/dsdt.asl
>  create mode 100644 board/raspberrypi/rpi/emmc.asl
>  create mode 100644 board/raspberrypi/rpi/gpudevs.asl
>  create mode 100644 board/raspberrypi/rpi/pci.asl
>  create mode 100644 board/raspberrypi/rpi/pep.asl
>  create mode 100644 board/raspberrypi/rpi/rhpx.asl
>  create mode 100644 board/raspberrypi/rpi/sdhc.asl
>  create mode 100644 board/raspberrypi/rpi/uart.asl
>  create mode 100644 configs/qemu-arm-sbsa_defconfig
>  create mode 100644 configs/rpi_4_acpi_defconfig
>  create mode 100644 doc/board/emulation/qemu-sbsa.rst
>  rename drivers/ata/{ahci_mvebu.c => ahci_generic.c} (71%)
>  create mode 100644 drivers/cpu/armv8_cpu.c
>  create mode 100644 drivers/cpu/bcm283x_cpu.c
>  create mode 100644 drivers/usb/host/xhci-generic.c
>  create mode 100644 include/configs/qemu-sbsa.h
>
> --
> 2.45.2
>

Regards,
Simon


More information about the U-Boot mailing list