[PATCH v4 30/35] arm: cpu: Add ACPI parking protocol support
Patrick Rudolph
patrick.rudolph at 9elements.com
Mon Sep 23 08:29:01 CEST 2024
Hi Simon,
On Thu, Sep 19, 2024 at 4:09 PM Simon Glass <sjg at chromium.org> wrote:
>
> On Wed, 18 Sept 2024 at 17:23, Patrick Rudolph
> <patrick.rudolph at 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.rudolph at 9elements.com>
> > Cc: Simon Glass <sjg at chromium.org>
> > Cc: Tom Rini <trini at 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
> > ---
> > 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 +
There's something missing here...
Is it reviewed by you?
More information about the U-Boot
mailing list