[PATCH v8 00/37] Implement ACPI on aarch64

Peter Robinson pbrobinson at gmail.com
Tue Oct 15 19:01:24 CEST 2024


On Tue, 15 Oct 2024 at 17:34, Patrick Rudolph
<patrick.rudolph at 9elements.com> wrote:
>
> Hi Peter,
> On Tue, Oct 15, 2024 at 12:28 PM Peter Robinson <pbrobinson at gmail.com> wrote:
> >
> > On Mon, 14 Oct 2024 at 14:12, 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
> > >
> > > 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 RPi4, but works in QEMU (Possibly
> > >   cache related).
> > > - PCI on RPI4 isn't working on real hardware since the pcie_brcmstb
> >
> > I believe the EDK2 version works by using the generic ACPI PCI driver,
> > why wouldn't this use the same driver?
> No, it doesn't use pcie_brcmstb, but EDK2 has workarounds for that.
> Those are intentionally not done in U-Boot to keep the code as clean
> and as minimal as possible.
> In addition there's more code in EDK2, like support for reading UEFI
> variables and configuring
> certain settings. Those additional features aren't implemented here
> either. Though they are not required
> to boot an OS, which is the main goal of this patch series.
>
> I don't see that those missing features are a *must* implement. It's
> not EDK2. If you want to have all those
> feature use EDK2 and your good.
>
> >
> > Overall given RPi4 has massive limitations I think at the moment it
> > should be dropped from the series so it doesn't block the
> > generic/qemu/bsa support landing. I feel it will be a support problem
> > with having such a reduced functionality device in mainline.
> >
> Since U-Boot isn't the default boot-loader on RPI and you can still
> use U-Boot and a DT to
> boot an OS instead of ACPI, I don't see any issue with this. It's just
> an additional possible
> way to boot the OS. It might be limited to just booting, it might have
> bugs, but it's still optional.

That doesn't mean people won't try to use it and won't complain when
it doesn't work.

> > >   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 (32):
> > >   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_table: Support platforms with unusable RSDT
> > >   acpi: Allocate and write ACPI tables
> > >   acpi: Add processor device
> > >   drivers: usb: Add generic XHCI
> > >   drivers: ata: Rename ahci_mvebu
> > >   drivers/cpu: Add generic armv8 cpu driver
> > >   arm: gic-v3-its: Rename objects
> > >   arm: gic-v3-its: Implement of_xlate
> > >   arm: lib: Add GICV2 driver
> > >   drivers: misc: irq-uclass: Update irq_get_by_index
> > >   drivers/arm: Implement acpi_fill_madt
> > >   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
> > >   armv8: cpu: Enable ACPI parking protocol
> > >   arm: Implement read_mpidr on armv7
> > >   arm: mach-bcm283x: Add ARMV8_MULTIENTRY support
> > >   arm: mach-bcm283x: Enable ARMV8_MULTIENTRY
> > >   bloblist: Fix use of uninitialized variable
> > >   configs: Add RPI4 ACPI defconfig
> > >   CI: Enable qemu_sbsa
> > >
> > > Simon Glass (2):
> > >   arm: mach-bcm283x: Bring in some header files from tianocore
> > >   board: raspberrypi: Add ASL files from tianocore
> > >
> > >  .azure-pipelines.yml                          |   8 +
> > >  .gitlab-ci.yml                                |  11 +
> > >  MAINTAINERS                                   |   2 +-
> > >  arch/arm/Kconfig                              |  11 +-
> > >  arch/arm/cpu/armv8/Makefile                   |   1 +
> > >  arch/arm/cpu/armv8/acpi_park_v8.S             | 113 ++++
> > >  arch/arm/cpu/armv8/start.S                    |  12 +
> > >  arch/arm/dts/qemu-sbsa.dts                    | 137 ++++
> > >  arch/arm/include/asm/acpi_table.h             | 147 ++++
> > >  arch/arm/include/asm/arch-qemu-sbsa/boot0.h   |  34 +
> > >  arch/arm/include/asm/system.h                 |   9 +
> > >  arch/arm/lib/Makefile                         |   2 +
> > >  arch/arm/lib/acpi_table.c                     | 276 ++++++++
> > >  arch/arm/lib/gic-v2.c                         |  89 +++
> > >  arch/arm/lib/gic-v3-its.c                     | 118 +++-
> > >  arch/arm/mach-bcm283x/Kconfig                 |  16 +-
> > >  arch/arm/mach-bcm283x/Makefile                |   4 +
> > >  arch/arm/mach-bcm283x/bcm2711_acpi.c          | 128 ++++
> > >  .../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                  |   2 +-
> > >  arch/arm/mach-qemu/Kconfig                    |  36 +-
> > >  arch/sandbox/dts/test.dts                     |   3 +
> > >  arch/sandbox/lib/Makefile                     |   9 +-
> > >  arch/sandbox/lib/acpi_table.c                 |  11 +
> > >  arch/x86/cpu/apollolake/acpi.c                |  20 +-
> > >  arch/x86/cpu/baytrail/acpi.c                  |  17 +-
> > >  arch/x86/cpu/intel_common/acpi.c              |  22 +-
> > >  arch/x86/cpu/quark/acpi.c                     |  19 +-
> > >  arch/x86/cpu/tangier/acpi.c                   |  33 +-
> > >  arch/x86/include/asm/acpi_table.h             |  28 +-
> > >  arch/x86/lib/acpi_table.c                     | 245 +------
> > >  board/emulation/qemu-arm/MAINTAINERS          |   2 +
> > >  board/emulation/qemu-sbsa/Kconfig             |  58 ++
> > >  board/emulation/qemu-sbsa/Makefile            |   8 +
> > >  board/emulation/qemu-sbsa/acpi.c              | 192 ++++++
> > >  board/emulation/qemu-sbsa/dsdt.asl            | 483 ++++++++++++++
> > >  board/emulation/qemu-sbsa/lowlevel_init.S     |  22 +
> > >  board/emulation/qemu-sbsa/qemu-sbsa.c         | 273 ++++++++
> > >  board/emulation/qemu-sbsa/qemu-sbsa.env       |  14 +
> > >  board/emulation/qemu-sbsa/qemu-sbsa.h         |  38 ++
> > >  board/emulation/qemu-sbsa/smc.c               |  71 ++
> > >  board/raspberrypi/rpi/.gitignore              |   3 +
> > >  board/raspberrypi/rpi/Makefile                |   2 +
> > >  board/raspberrypi/rpi/acpitables.h            |  90 +++
> > >  board/raspberrypi/rpi/dsdt.asl                | 254 +++++++
> > >  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 +
> > >  common/bloblist.c                             |   2 +-
> > >  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                  |  10 +
> > >  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                           |   7 +
> > >  drivers/cpu/Makefile                          |   2 +
> > >  drivers/cpu/armv8_cpu.c                       | 151 +++++
> > >  drivers/cpu/armv8_cpu.h                       |  31 +
> > >  drivers/cpu/bcm283x_cpu.c                     | 214 ++++++
> > >  drivers/misc/irq-uclass.c                     |  66 +-
> > >  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               |  75 +++
> > >  include/acpi/acpi_table.h                     | 324 ++++++++-
> > >  include/acpi/acpigen.h                        |  12 +
> > >  include/bloblist.h                            |   1 +
> > >  include/configs/qemu-sbsa.h                   |  89 +++
> > >  include/dm/acpi.h                             |  26 +
> > >  include/irq.h                                 |  14 +
> > >  include/serial.h                              |   1 +
> > >  lib/Kconfig                                   |  31 +-
> > >  lib/acpi/acpi_table.c                         | 630 +++++++++++++++++-
> > >  lib/acpi/acpigen.c                            |  11 +
> > >  test/dm/acpi.c                                |  43 ++
> > >  test/dm/irq.c                                 |  15 +
> > >  test/py/tests/test_event_dump.py              |   1 +
> > >  113 files changed, 6512 insertions(+), 542 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/lib/gic-v2.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/armv8_cpu.h
> > >  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.46.2
> > >


More information about the U-Boot mailing list