]> git.dujemihanovic.xyz Git - u-boot.git/commit
arm: cpu: Add ACPI parking protocol support
authorPatrick Rudolph <patrick.rudolph@9elements.com>
Wed, 23 Oct 2024 13:20:13 +0000 (15:20 +0200)
committerTom Rini <trini@konsulko.com>
Sun, 27 Oct 2024 23:24:13 +0000 (17:24 -0600)
commit34bfe8eff895b864247d923ce37110a9053592ee
tree627a145bd5527c6693b6a326dcf3cfb6badeccb2
parent2f3b679298903c6ce5169953dfe7e08ffeadc3b9
arm: cpu: Add ACPI parking protocol support

On Arm platforms that use ACPI they cannot rely on the "spin-table"
CPU bringup usually defined in the FDT. Thus implement the
'ACPI Multi-processor Startup for ARM Platforms', also referred to as
'ACPI parking protocol'.

The ACPI parking protocol works similar to the spin-table mechanism, but
the specification also covers lots of shortcomings of the spin-table
implementations.

Every CPU defined in the ACPI MADT table has it's own 4K page where the
spinloop code and the OS mailbox resides. When selected the U-Boot board
code must make sure that the secondary CPUs enter u-boot after relocation
as well, so that they can enter the spinloop code residing in the ACPI
parking protocol pages.

The OS will then write to the mailbox and generate an IPI to release the
CPUs from the spinloop code.

For now it's only implemented on ARMv8, but can easily be extended to
other platforms, like ARMv7.

TEST: Boots all CPUs on qemu-system-aarch64 -machine raspi4b

Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@konsulko.com>
arch/arm/cpu/armv8/Makefile
arch/arm/cpu/armv8/acpi_park_v8.S [new file with mode: 0644]
arch/arm/include/asm/acpi_table.h
arch/arm/lib/acpi_table.c
include/acpi/acpi_table.h
include/bloblist.h
lib/Kconfig
lib/acpi/acpi_table.c