Commit fb094eb1 authored by Lorenzo Pieralisi's avatar Lorenzo Pieralisi Committed by Will Deacon

ARM64: kernel: acpi: honour acpi=force command line parameter

If acpi=force is passed on the command line, it forces ACPI to be
the only available boot method, hence it must be left enabled even
if the initialization and sanity checks on ACPI tables fails.

This patch refactors ACPI initialization to prevent disabling ACPI
if acpi=force is passed on the command line.
Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: default avatarHanjun Guo <hanjun.guo@linaro.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Hanjun Guo <hanjun.guo@linaro.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 54971e43
...@@ -38,7 +38,6 @@ typedef u64 phys_cpuid_t; ...@@ -38,7 +38,6 @@ typedef u64 phys_cpuid_t;
extern int acpi_disabled; extern int acpi_disabled;
extern int acpi_noirq; extern int acpi_noirq;
extern int acpi_pci_disabled; extern int acpi_pci_disabled;
extern bool param_acpi_force;
/* 1 to indicate PSCI 0.2+ is implemented */ /* 1 to indicate PSCI 0.2+ is implemented */
static inline bool acpi_psci_present(void) static inline bool acpi_psci_present(void)
...@@ -92,8 +91,6 @@ void __init acpi_init_cpus(void); ...@@ -92,8 +91,6 @@ void __init acpi_init_cpus(void);
static inline bool acpi_psci_present(void) { return false; } static inline bool acpi_psci_present(void) { return false; }
static inline bool acpi_psci_use_hvc(void) { return false; } static inline bool acpi_psci_use_hvc(void) { return false; }
static inline void acpi_init_cpus(void) { } static inline void acpi_init_cpus(void) { }
#define param_acpi_force false
#endif /* CONFIG_ACPI */ #endif /* CONFIG_ACPI */
#endif /*_ASM_ACPI_H*/ #endif /*_ASM_ACPI_H*/
...@@ -43,7 +43,7 @@ static int enabled_cpus; ...@@ -43,7 +43,7 @@ static int enabled_cpus;
static bool bootcpu_valid __initdata; static bool bootcpu_valid __initdata;
static bool param_acpi_off __initdata; static bool param_acpi_off __initdata;
bool param_acpi_force __initdata; static bool param_acpi_force __initdata;
static int __init parse_acpi(char *arg) static int __init parse_acpi(char *arg)
{ {
...@@ -284,8 +284,13 @@ static int __init acpi_fadt_sanity_check(void) ...@@ -284,8 +284,13 @@ static int __init acpi_fadt_sanity_check(void)
* We can parse ACPI boot-time tables such as MADT after * We can parse ACPI boot-time tables such as MADT after
* this function is called. * this function is called.
* *
* ACPI is enabled on return if ACPI tables initialized and sanity checks * On return ACPI is enabled if either:
* passed, disabled otherwise *
* - ACPI tables are initialized and sanity checks passed
* - acpi=force was passed in the command line and ACPI was not disabled
* explicitly through acpi=off command line parameter
*
* ACPI is disabled on function return otherwise
*/ */
void __init acpi_boot_table_init(void) void __init acpi_boot_table_init(void)
{ {
...@@ -309,9 +314,12 @@ void __init acpi_boot_table_init(void) ...@@ -309,9 +314,12 @@ void __init acpi_boot_table_init(void)
* If ACPI tables are initialized and FADT sanity checks passed, * If ACPI tables are initialized and FADT sanity checks passed,
* leave ACPI enabled and carry on booting; otherwise disable ACPI * leave ACPI enabled and carry on booting; otherwise disable ACPI
* on initialization error. * on initialization error.
* If acpi=force was passed on the command line it forces ACPI
* to be enabled even if its initialization failed.
*/ */
if (acpi_table_init() || acpi_fadt_sanity_check()) { if (acpi_table_init() || acpi_fadt_sanity_check()) {
pr_err("Failed to init ACPI tables\n"); pr_err("Failed to init ACPI tables\n");
if (!param_acpi_force)
disable_acpi(); disable_acpi();
} }
} }
......
...@@ -390,7 +390,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -390,7 +390,7 @@ void __init setup_arch(char **cmdline_p)
early_ioremap_reset(); early_ioremap_reset();
if (acpi_disabled && !param_acpi_force) { if (acpi_disabled) {
unflatten_device_tree(); unflatten_device_tree();
psci_dt_init(); psci_dt_init();
cpu_read_bootcpu_ops(); cpu_read_bootcpu_ops();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment