[PATCH v8 00/37] Implement ACPI on aarch64
Peter Robinson
pbrobinson at gmail.com
Tue Oct 15 12:28:22 CEST 2024
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?
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.
> 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