On Mon, Nov 17, 2025 at 6:04 PM Ricardo Neri
<[email protected]> wrote:
>
> Systems that describe hardware using DeviceTree graphs may enumerate and
> implement the wakeup mailbox as defined in the ACPI specification but do
> not otherwise depend on ACPI. Expose functions to setup and access the
> location of the wakeup mailbox from outside ACPI code.
>
> The function acpi_setup_mp_wakeup_mailbox() stores the physical address of
> the mailbox and updates the wakeup_secondary_cpu_64() APIC callback.
>
> The function acpi_madt_multiproc_wakeup_mailbox() returns a pointer to the
> mailbox.
>
> Signed-off-by: Ricardo Neri <[email protected]>

Acked-by: Rafael J. Wysocki (Intel) <[email protected]>

> ---
> Changes in v7:
>  - Moved function declarations to arch/x86/include/asm/acpi.h
>  - Added stubs for !CONFIG_ACPI.
>  - Do not use these new functions in madt_wakeup.c.
>  - Dropped Acked-by and Reviewed-by tags from Rafael and Dexuan as this
>    patch changed.
>
> Changes in v6:
>  - Fixed grammar error in the subject of the patch. (Rafael)
>  - Added Acked-by tag from Rafael. Thanks!
>  - Added Reviewed-by tag from Dexuan. Thanks!
>
> Changes in v5:
>  - None
>
> Changes in v4:
>  - Squashed the two first patches of the series into one, both introduce
>    helper functions. (Rafael)
>  - Renamed setup_mp_wakeup_mailbox() as acpi_setup_mp_wakeup_mailbox().
>    (Rafael)
>  - Dropped the function prototype for !CONFIG_X86_64. (Rafael)
>
> Changes in v3:
>  - Introduced this patch.
>
> Changes in v2:
>  - N/A
> ---
>  arch/x86/include/asm/acpi.h        | 10 ++++++++++
>  arch/x86/kernel/acpi/madt_wakeup.c | 11 +++++++++++
>  2 files changed, 21 insertions(+)
>
> diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h
> index a03aa6f999d1..820df375df79 100644
> --- a/arch/x86/include/asm/acpi.h
> +++ b/arch/x86/include/asm/acpi.h
> @@ -182,6 +182,9 @@ void __iomem *x86_acpi_os_ioremap(acpi_physical_address 
> phys, acpi_size size);
>  #define acpi_os_ioremap acpi_os_ioremap
>  #endif
>
> +void acpi_setup_mp_wakeup_mailbox(u64 addr);
> +struct acpi_madt_multiproc_wakeup_mailbox *acpi_get_mp_wakeup_mailbox(void);
> +
>  #else /* !CONFIG_ACPI */
>
>  #define acpi_lapic 0
> @@ -200,6 +203,13 @@ static inline u64 x86_default_get_root_pointer(void)
>         return 0;
>  }
>
> +static inline void acpi_setup_mp_wakeup_mailbox(u64 addr) { }
> +
> +static inline struct acpi_madt_multiproc_wakeup_mailbox 
> *acpi_get_mp_wakeup_mailbox(void)
> +{
> +       return NULL;
> +}
> +
>  #endif /* !CONFIG_ACPI */
>
>  #define ARCH_HAS_POWER_INIT    1
> diff --git a/arch/x86/kernel/acpi/madt_wakeup.c 
> b/arch/x86/kernel/acpi/madt_wakeup.c
> index 6d7603511f52..82caf44b45e3 100644
> --- a/arch/x86/kernel/acpi/madt_wakeup.c
> +++ b/arch/x86/kernel/acpi/madt_wakeup.c
> @@ -247,3 +247,14 @@ int __init acpi_parse_mp_wake(union 
> acpi_subtable_headers *header,
>
>         return 0;
>  }
> +
> +void __init acpi_setup_mp_wakeup_mailbox(u64 mailbox_paddr)
> +{
> +       acpi_mp_wake_mailbox_paddr = mailbox_paddr;
> +       apic_update_callback(wakeup_secondary_cpu_64, acpi_wakeup_cpu);
> +}
> +
> +struct acpi_madt_multiproc_wakeup_mailbox *acpi_get_mp_wakeup_mailbox(void)
> +{
> +       return acpi_mp_wake_mailbox;
> +}
>
> --
> 2.43.0
>

Reply via email to