[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