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 >
