Hi Patrick, On Mon, 14 Oct 2024 at 07:12, Patrick Rudolph <[email protected]> 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 > 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 >
This series looks great and I hope it can be applied soon. Congratulations on taking on and completing this difficult job! Regards, Simon

