arm64: Kconfig: Enable hotplug CPU on arm64 if ACPI_PROCESSOR is enabled.
In order to move arch_register_cpu() to be called via the same path for initially present CPUs described by ACPI and hotplugged CPUs ACPI_HOTPLUG_CPU needs to be enabled. The protection against invalid IDs in acpi_map_cpu() is needed as at least one production BIOS is in the wild which reports entries in DSDT (with no _STA method, so assumed enabled and present) that don't match MADT. Tested-by: Miguel Luis <miguel.luis@oracle.com> Reviewed-by: Gavin Shan <gshan@redhat.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Link: https://lore.kernel.org/r/20240529133446.28446-18-Jonathan.Cameron@huawei.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
committed by
Catalin Marinas
parent
eba4675008
commit
9d0873892f
@@ -5,6 +5,7 @@ config ARM64
|
|||||||
select ACPI_CCA_REQUIRED if ACPI
|
select ACPI_CCA_REQUIRED if ACPI
|
||||||
select ACPI_GENERIC_GSI if ACPI
|
select ACPI_GENERIC_GSI if ACPI
|
||||||
select ACPI_GTDT if ACPI
|
select ACPI_GTDT if ACPI
|
||||||
|
select ACPI_HOTPLUG_CPU if ACPI_PROCESSOR
|
||||||
select ACPI_IORT if ACPI
|
select ACPI_IORT if ACPI
|
||||||
select ACPI_REDUCED_HARDWARE_ONLY if ACPI
|
select ACPI_REDUCED_HARDWARE_ONLY if ACPI
|
||||||
select ACPI_MCFG if (ACPI && PCI)
|
select ACPI_MCFG if (ACPI && PCI)
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <linux/pgtable.h>
|
#include <linux/pgtable.h>
|
||||||
|
|
||||||
#include <acpi/ghes.h>
|
#include <acpi/ghes.h>
|
||||||
|
#include <acpi/processor.h>
|
||||||
#include <asm/cputype.h>
|
#include <asm/cputype.h>
|
||||||
#include <asm/cpu_ops.h>
|
#include <asm/cpu_ops.h>
|
||||||
#include <asm/daifflags.h>
|
#include <asm/daifflags.h>
|
||||||
@@ -423,6 +424,27 @@ void arch_reserve_mem_area(acpi_physical_address addr, size_t size)
|
|||||||
memblock_mark_nomap(addr, size);
|
memblock_mark_nomap(addr, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI_HOTPLUG_CPU
|
||||||
|
int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, u32 apci_id,
|
||||||
|
int *pcpu)
|
||||||
|
{
|
||||||
|
/* If an error code is passed in this stub can't fix it */
|
||||||
|
if (*pcpu < 0) {
|
||||||
|
pr_warn_once("Unable to map CPU to valid ID\n");
|
||||||
|
return *pcpu;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(acpi_map_cpu);
|
||||||
|
|
||||||
|
int acpi_unmap_cpu(int cpu)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(acpi_unmap_cpu);
|
||||||
|
#endif /* CONFIG_ACPI_HOTPLUG_CPU */
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI_FFH
|
#ifdef CONFIG_ACPI_FFH
|
||||||
/*
|
/*
|
||||||
* Implements ARM64 specific callbacks to support ACPI FFH Operation Region as
|
* Implements ARM64 specific callbacks to support ACPI FFH Operation Region as
|
||||||
|
|||||||
Reference in New Issue
Block a user