diff options
| -rw-r--r-- | arch/arm64/include/asm/acpi.h | 19 | ||||
| -rw-r--r-- | drivers/acpi/processor_idle.c | 3 | ||||
| -rw-r--r-- | include/linux/acpi.h | 9 | 
3 files changed, 29 insertions, 2 deletions
| diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h index 4d537d56eb84..6792a1f83f2a 100644 --- a/arch/arm64/include/asm/acpi.h +++ b/arch/arm64/include/asm/acpi.h @@ -9,6 +9,7 @@  #ifndef _ASM_ACPI_H  #define _ASM_ACPI_H +#include <linux/cpuidle.h>  #include <linux/efi.h>  #include <linux/memblock.h>  #include <linux/psci.h> @@ -44,6 +45,24 @@  #define ACPI_MADT_GICC_TRBE  (offsetof(struct acpi_madt_generic_interrupt, \  	trbe_interrupt) + sizeof(u16)) +/* + * ArmĀ® Functional Fixed Hardware Specification Version 1.2. + * Table 2: Arm Architecture context loss flags + */ +#define CPUIDLE_CORE_CTXT		BIT(0) /* Core context Lost */ + +static inline unsigned int arch_get_idle_state_flags(u32 arch_flags) +{ +	if (arch_flags & CPUIDLE_CORE_CTXT) +		return CPUIDLE_FLAG_TIMER_STOP; + +	return 0; +} +#define arch_get_idle_state_flags arch_get_idle_state_flags + +#define CPUIDLE_TRACE_CTXT		BIT(1) /* Trace context loss */ +#define CPUIDLE_GICR_CTXT		BIT(2) /* GICR */ +#define CPUIDLE_GICD_CTXT		BIT(3) /* GICD */  /* Basic configuration for ACPI */  #ifdef	CONFIG_ACPI diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index dc615ef6550a..3a34a8c425fe 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c @@ -1217,8 +1217,7 @@ static int acpi_processor_setup_lpi_states(struct acpi_processor *pr)  		strscpy(state->desc, lpi->desc, CPUIDLE_DESC_LEN);  		state->exit_latency = lpi->wake_latency;  		state->target_residency = lpi->min_residency; -		if (lpi->arch_flags) -			state->flags |= CPUIDLE_FLAG_TIMER_STOP; +		state->flags |= arch_get_idle_state_flags(lpi->arch_flags);  		if (i != 0 && lpi->entry_method == ACPI_CSTATE_FFH)  			state->flags |= CPUIDLE_FLAG_RCU_IDLE;  		state->enter = acpi_idle_lpi_enter; diff --git a/include/linux/acpi.h b/include/linux/acpi.h index a73246c3c35e..afd94c9b8b8a 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -1480,6 +1480,15 @@ static inline int lpit_read_residency_count_address(u64 *address)  }  #endif +#ifdef CONFIG_ACPI_PROCESSOR_IDLE +#ifndef arch_get_idle_state_flags +static inline unsigned int arch_get_idle_state_flags(u32 arch_flags) +{ +	return 0; +} +#endif +#endif /* CONFIG_ACPI_PROCESSOR_IDLE */ +  #ifdef CONFIG_ACPI_PPTT  int acpi_pptt_cpu_is_thread(unsigned int cpu);  int find_acpi_cpu_topology(unsigned int cpu, int level); | 
