[PATCH v8 00/37] Implement ACPI on aarch64
Patrick Rudolph
patrick.rudolph at 9elements.com
Tue Oct 15 18:34:33 CEST 2024
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.
> > 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