On Wed, 2 Oct 2024 at 03:52, Patrick Rudolph <patrick.rudo...@9elements.com> wrote: > > 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.rudo...@9elements.com> > Cc: Simon Glass <s...@chromium.org> > Cc: Tom Rini <tr...@konsulko.com> > --- > Changelog v2: > - Use shorter function names > - Drop the use of atomics, they do not work on real hardware > - Rewrite code and verify on real hardware that CPUs are spinning > inside their parking protocol spin-loop code > Changelog v4: > - Shorten names > - Fix coding style > - Drop extern from the headers > Changelog v6: > - Update header order > > --- > arch/arm/cpu/armv8/Makefile | 1 + > arch/arm/cpu/armv8/acpi_park_v8.S | 113 ++++++++++++++++++++++ > arch/arm/include/asm/acpi_table.h | 32 +++++++ > arch/arm/lib/acpi_table.c | 149 ++++++++++++++++++++++++++++++ > include/acpi/acpi_table.h | 10 ++ > include/bloblist.h | 1 + > lib/Kconfig | 16 ++++ > lib/acpi/acpi_table.c | 4 + > 8 files changed, 326 insertions(+) > create mode 100644 arch/arm/cpu/armv8/acpi_park_v8.S
Reviewed-by: Simon Glass <s...@chromium.org>