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>

Reply via email to