]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
armv8: cpu: Enable ACPI parking protocol
authorPatrick Rudolph <patrick.rudolph@9elements.com>
Wed, 23 Oct 2024 13:20:14 +0000 (15:20 +0200)
committerTom Rini <trini@konsulko.com>
Sun, 27 Oct 2024 23:24:13 +0000 (17:24 -0600)
Update the generic entry point code to support the ACPI parking protocol.
The ACPI parking protocol can be used when PSCI is not available to bring
up secondary CPU cores.

When enabled secondary CPUs will enter U-Boot proper and spin in their own
4KiB reserved memory page, which also acts as mailbox with the OS to
release the CPU.

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>
arch/arm/cpu/armv8/start.S

index 746128026172f495da84c3abf1b1b238ab3ef3f1..544a4a53645cfd4b131c57abd22c00a5fc1a95b4 100644 (file)
@@ -178,6 +178,18 @@ pie_fixup_done:
        branch_if_master x0, master_cpu
        b       spin_table_secondary_jump
        /* never return */
+#elif defined(CONFIG_ACPI_PARKING_PROTOCOL) && !defined(CONFIG_SPL_BUILD)
+       branch_if_master x0, master_cpu
+       /*
+        * Waits for ACPI parking protocol memory to be allocated and the spin-table
+        * code to be written. Once ready the secondary CPUs will jump and spin in
+        * their own 4KiB memory region, which is also used as mailbox, until released
+        * by the OS.
+        * The mechanism is similar to the DT enable-method = "spin-table", but works
+        * with ACPI enabled platforms.
+        */
+       b       acpi_pp_secondary_jump
+       /* never return */
 #elif defined(CONFIG_ARMV8_MULTIENTRY)
        branch_if_master x0, master_cpu