aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/processor_idle.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/processor_idle.c')
-rw-r--r--drivers/acpi/processor_idle.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 5c8aa9cf62d7..df38e81cc672 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -48,6 +48,8 @@
48#define _COMPONENT ACPI_PROCESSOR_COMPONENT 48#define _COMPONENT ACPI_PROCESSOR_COMPONENT
49ACPI_MODULE_NAME("processor_idle"); 49ACPI_MODULE_NAME("processor_idle");
50 50
51#define ACPI_IDLE_STATE_START (IS_ENABLED(CONFIG_ARCH_HAS_CPU_RELAX) ? 1 : 0)
52
51static unsigned int max_cstate __read_mostly = ACPI_PROCESSOR_MAX_POWER; 53static unsigned int max_cstate __read_mostly = ACPI_PROCESSOR_MAX_POWER;
52module_param(max_cstate, uint, 0000); 54module_param(max_cstate, uint, 0000);
53static unsigned int nocst __read_mostly; 55static unsigned int nocst __read_mostly;
@@ -761,7 +763,7 @@ static int acpi_idle_enter(struct cpuidle_device *dev,
761 763
762 if (cx->type != ACPI_STATE_C1) { 764 if (cx->type != ACPI_STATE_C1) {
763 if (acpi_idle_fallback_to_c1(pr) && num_online_cpus() > 1) { 765 if (acpi_idle_fallback_to_c1(pr) && num_online_cpus() > 1) {
764 index = CPUIDLE_DRIVER_STATE_START; 766 index = ACPI_IDLE_STATE_START;
765 cx = per_cpu(acpi_cstate[index], dev->cpu); 767 cx = per_cpu(acpi_cstate[index], dev->cpu);
766 } else if (cx->type == ACPI_STATE_C3 && pr->flags.bm_check) { 768 } else if (cx->type == ACPI_STATE_C3 && pr->flags.bm_check) {
767 if (cx->bm_sts_skip || !acpi_idle_bm_check()) { 769 if (cx->bm_sts_skip || !acpi_idle_bm_check()) {
@@ -813,7 +815,7 @@ static void acpi_idle_enter_freeze(struct cpuidle_device *dev,
813static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr, 815static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
814 struct cpuidle_device *dev) 816 struct cpuidle_device *dev)
815{ 817{
816 int i, count = CPUIDLE_DRIVER_STATE_START; 818 int i, count = ACPI_IDLE_STATE_START;
817 struct acpi_processor_cx *cx; 819 struct acpi_processor_cx *cx;
818 820
819 if (max_cstate == 0) 821 if (max_cstate == 0)
@@ -840,7 +842,7 @@ static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
840 842
841static int acpi_processor_setup_cstates(struct acpi_processor *pr) 843static int acpi_processor_setup_cstates(struct acpi_processor *pr)
842{ 844{
843 int i, count = CPUIDLE_DRIVER_STATE_START; 845 int i, count;
844 struct acpi_processor_cx *cx; 846 struct acpi_processor_cx *cx;
845 struct cpuidle_state *state; 847 struct cpuidle_state *state;
846 struct cpuidle_driver *drv = &acpi_idle_driver; 848 struct cpuidle_driver *drv = &acpi_idle_driver;
@@ -848,6 +850,13 @@ static int acpi_processor_setup_cstates(struct acpi_processor *pr)
848 if (max_cstate == 0) 850 if (max_cstate == 0)
849 max_cstate = 1; 851 max_cstate = 1;
850 852
853 if (IS_ENABLED(CONFIG_ARCH_HAS_CPU_RELAX)) {
854 cpuidle_poll_state_init(drv);
855 count = 1;
856 } else {
857 count = 0;
858 }
859
851 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) { 860 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
852 cx = &pr->power.states[i]; 861 cx = &pr->power.states[i];
853 862
@@ -1291,7 +1300,7 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
1291 return -EINVAL; 1300 return -EINVAL;
1292 1301
1293 drv->safe_state_index = -1; 1302 drv->safe_state_index = -1;
1294 for (i = CPUIDLE_DRIVER_STATE_START; i < CPUIDLE_STATE_MAX; i++) { 1303 for (i = ACPI_IDLE_STATE_START; i < CPUIDLE_STATE_MAX; i++) {
1295 drv->states[i].name[0] = '\0'; 1304 drv->states[i].name[0] = '\0';
1296 drv->states[i].desc[0] = '\0'; 1305 drv->states[i].desc[0] = '\0';
1297 } 1306 }