ACPI: Decouple ACPI idle and ACPI processor drivers
authorAshwin Chaugule <ashwin.chaugule@linaro.org>
Wed, 5 Aug 2015 13:40:26 +0000 (09:40 -0400)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 25 Aug 2015 01:25:47 +0000 (03:25 +0200)
This patch introduces a new Kconfig symbol, ACPI_PROCESSOR_IDLE,
which is auto selected by architectures which support the ACPI
based C states for CPU Idle management.

The processor_idle driver in its present form contains declarations
specific to X86 and IA64. Since there are no reasonable defaults
for other architectures e.g. ARM64, the driver is selected only for
X86 or IA64.

This helps in decoupling the ACPI processor_driver from the ACPI
processor_idle driver which is useful for the upcoming alternative
patchwork for controlling CPU Performance (CPPC) and CPU Idle (LPI).

Signed-off-by: Ashwin Chaugule <ashwin.chaugule@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/Kconfig
drivers/acpi/Makefile
include/acpi/processor.h

index d6e2a869033c9ef2013edbb70803a397c0c0fe70..54e9729f9634de085d9b9dabf8cf79174b34cdfd 100644 (file)
@@ -193,10 +193,14 @@ config ACPI_CPU_FREQ_PSS
        bool
        select THERMAL
 
+config ACPI_PROCESSOR_IDLE
+       bool
+       select CPU_IDLE
+
 config ACPI_PROCESSOR
        tristate "Processor"
        depends on X86 || IA64
-       select CPU_IDLE
+       select ACPI_PROCESSOR_IDLE
        select ACPI_CPU_FREQ_PSS
        default y
        help
index 7e97aef373ae379dec74cf42544e9aa71ecfdd5f..3ea59ae85c19b98b7c8ce1eb5d40939bc812ebb2 100644 (file)
@@ -80,7 +80,8 @@ obj-$(CONFIG_ACPI_CUSTOM_METHOD)+= custom_method.o
 obj-$(CONFIG_ACPI_BGRT)                += bgrt.o
 
 # processor has its own "processor." module_param namespace
-processor-y                    := processor_driver.o processor_idle.o
+processor-y                    := processor_driver.o
+processor-$(CONFIG_ACPI_PROCESSOR_IDLE) += processor_idle.o
 processor-$(CONFIG_ACPI_CPU_FREQ_PSS)  += processor_throttling.o       \
        processor_thermal.o
 processor-$(CONFIG_CPU_FREQ)   += processor_perflib.o
index b6c917835805c6d20b5ad3e718db1d8b34ab84ad..2c4e7a9c1725ac4b5e429c07bc7d8af443ecf81a 100644 (file)
@@ -355,13 +355,35 @@ static inline void acpi_processor_throttling_init(void) {}
 #endif /* CONFIG_ACPI_CPU_FREQ_PSS */
 
 /* in processor_idle.c */
+extern struct cpuidle_driver acpi_idle_driver;
+#ifdef CONFIG_ACPI_PROCESSOR_IDLE
 int acpi_processor_power_init(struct acpi_processor *pr);
 int acpi_processor_power_exit(struct acpi_processor *pr);
 int acpi_processor_cst_has_changed(struct acpi_processor *pr);
 int acpi_processor_hotplug(struct acpi_processor *pr);
-extern struct cpuidle_driver acpi_idle_driver;
+#else
+static inline int acpi_processor_power_init(struct acpi_processor *pr)
+{
+       return -ENODEV;
+}
+
+static inline int acpi_processor_power_exit(struct acpi_processor *pr)
+{
+       return -ENODEV;
+}
+
+static inline int acpi_processor_cst_has_changed(struct acpi_processor *pr)
+{
+       return -ENODEV;
+}
+
+static inline int acpi_processor_hotplug(struct acpi_processor *pr)
+{
+       return -ENODEV;
+}
+#endif /* CONFIG_ACPI_PROCESSOR_IDLE */
 
-#ifdef CONFIG_PM_SLEEP
+#if defined(CONFIG_PM_SLEEP) & defined(CONFIG_ACPI_PROCESSOR_IDLE)
 void acpi_processor_syscore_init(void);
 void acpi_processor_syscore_exit(void);
 #else