ACPI: consistently use should_use_kmap()
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / acpi / processor_idle.c
CommitLineData
1da177e4
LT
1/*
2 * processor_idle - idle state submodule to the ACPI processor driver
3 *
4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
c5ab81ca 6 * Copyright (C) 2004, 2005 Dominik Brodowski <linux@brodo.de>
1da177e4
LT
7 * Copyright (C) 2004 Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
8 * - Added processor hotplug support
02df8b93
VP
9 * Copyright (C) 2005 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
10 * - Added support for C3 on SMP
1da177e4
LT
11 *
12 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 2 of the License, or (at
17 * your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful, but
20 * WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License along
25 * with this program; if not, write to the Free Software Foundation, Inc.,
26 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
27 *
28 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
29 */
30
31#include <linux/kernel.h>
32#include <linux/module.h>
33#include <linux/init.h>
34#include <linux/cpufreq.h>
5a0e3ad6 35#include <linux/slab.h>
1da177e4
LT
36#include <linux/acpi.h>
37#include <linux/dmi.h>
38#include <linux/moduleparam.h>
4e57b681 39#include <linux/sched.h> /* need_resched() */
e8db0be1 40#include <linux/pm_qos.h>
e9e2cdb4 41#include <linux/clockchips.h>
4f86d3a8 42#include <linux/cpuidle.h>
ba84be23 43#include <linux/irqflags.h>
1da177e4 44
3434933b
TG
45/*
46 * Include the apic definitions for x86 to have the APIC timer related defines
47 * available also for UP (on SMP it gets magically included via linux/smp.h).
48 * asm/acpi.h is not an option, as it would require more include magic. Also
49 * creating an empty asm-ia64/apic.h would just trade pest vs. cholera.
50 */
51#ifdef CONFIG_X86
52#include <asm/apic.h>
53#endif
54
1da177e4
LT
55#include <asm/io.h>
56#include <asm/uaccess.h>
57
58#include <acpi/acpi_bus.h>
59#include <acpi/processor.h>
c1e3b377 60#include <asm/processor.h>
1da177e4 61
a192a958
LB
62#define PREFIX "ACPI: "
63
1da177e4 64#define ACPI_PROCESSOR_CLASS "processor"
1da177e4 65#define _COMPONENT ACPI_PROCESSOR_COMPONENT
f52fd66d 66ACPI_MODULE_NAME("processor_idle");
2aa44d05 67#define PM_TIMER_TICK_NS (1000000000ULL/PM_TIMER_FREQUENCY)
4f86d3a8
LB
68#define C2_OVERHEAD 1 /* 1us */
69#define C3_OVERHEAD 1 /* 1us */
4f86d3a8 70#define PM_TIMER_TICKS_TO_US(p) (((p) * 1000)/(PM_TIMER_FREQUENCY/1000))
1da177e4 71
4f86d3a8
LB
72static unsigned int max_cstate __read_mostly = ACPI_PROCESSOR_MAX_POWER;
73module_param(max_cstate, uint, 0000);
b6835052 74static unsigned int nocst __read_mostly;
1da177e4 75module_param(nocst, uint, 0000);
d3e7e99f
LB
76static int bm_check_disable __read_mostly;
77module_param(bm_check_disable, uint, 0000);
1da177e4 78
25de5718 79static unsigned int latency_factor __read_mostly = 2;
4963f620 80module_param(latency_factor, uint, 0644);
1da177e4 81
d1896049
TR
82static int disabled_by_idle_boot_param(void)
83{
84 return boot_option_idle_override == IDLE_POLL ||
85 boot_option_idle_override == IDLE_FORCE_MWAIT ||
86 boot_option_idle_override == IDLE_HALT;
87}
88
1da177e4
LT
89/*
90 * IBM ThinkPad R40e crashes mysteriously when going into C2 or C3.
91 * For now disable this. Probably a bug somewhere else.
92 *
93 * To skip this limit, boot/load with a large max_cstate limit.
94 */
1855256c 95static int set_max_cstate(const struct dmi_system_id *id)
1da177e4
LT
96{
97 if (max_cstate > ACPI_PROCESSOR_MAX_POWER)
98 return 0;
99
3d35600a 100 printk(KERN_NOTICE PREFIX "%s detected - limiting to C%ld max_cstate."
4be44fcd
LB
101 " Override with \"processor.max_cstate=%d\"\n", id->ident,
102 (long)id->driver_data, ACPI_PROCESSOR_MAX_POWER + 1);
1da177e4 103
3d35600a 104 max_cstate = (long)id->driver_data;
1da177e4
LT
105
106 return 0;
107}
108
7ded5689
AR
109/* Actually this shouldn't be __cpuinitdata, would be better to fix the
110 callers to only run once -AK */
111static struct dmi_system_id __cpuinitdata processor_power_dmi_table[] = {
876c184b
TR
112 { set_max_cstate, "Clevo 5600D", {
113 DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
114 DMI_MATCH(DMI_BIOS_VERSION,"SHE845M0.86C.0013.D.0302131307")},
4be44fcd 115 (void *)2},
370d5cd8
AV
116 { set_max_cstate, "Pavilion zv5000", {
117 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
118 DMI_MATCH(DMI_PRODUCT_NAME,"Pavilion zv5000 (DS502A#ABA)")},
119 (void *)1},
120 { set_max_cstate, "Asus L8400B", {
121 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
122 DMI_MATCH(DMI_PRODUCT_NAME,"L8400B series Notebook PC")},
123 (void *)1},
1da177e4
LT
124 {},
125};
126
4f86d3a8 127
2e906655 128/*
129 * Callers should disable interrupts before the call and enable
130 * interrupts after return.
131 */
ddc081a1
VP
132static void acpi_safe_halt(void)
133{
134 current_thread_info()->status &= ~TS_POLLING;
135 /*
136 * TS_POLLING-cleared state must be visible before we
137 * test NEED_RESCHED:
138 */
139 smp_mb();
71e93d15 140 if (!need_resched()) {
ddc081a1 141 safe_halt();
71e93d15
VP
142 local_irq_disable();
143 }
ddc081a1
VP
144 current_thread_info()->status |= TS_POLLING;
145}
146
169a0abb
TG
147#ifdef ARCH_APICTIMER_STOPS_ON_C3
148
149/*
150 * Some BIOS implementations switch to C3 in the published C2 state.
296d93cd
LT
151 * This seems to be a common problem on AMD boxen, but other vendors
152 * are affected too. We pick the most conservative approach: we assume
153 * that the local APIC stops in both C2 and C3.
169a0abb 154 */
7e275cc4 155static void lapic_timer_check_state(int state, struct acpi_processor *pr,
169a0abb
TG
156 struct acpi_processor_cx *cx)
157{
158 struct acpi_processor_power *pwr = &pr->power;
e585bef8 159 u8 type = local_apic_timer_c2_ok ? ACPI_STATE_C3 : ACPI_STATE_C2;
169a0abb 160
db954b58
VP
161 if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT))
162 return;
163
02c68a02 164 if (amd_e400_c1e_detected)
87ad57ba
SL
165 type = ACPI_STATE_C1;
166
169a0abb
TG
167 /*
168 * Check, if one of the previous states already marked the lapic
169 * unstable
170 */
171 if (pwr->timer_broadcast_on_state < state)
172 return;
173
e585bef8 174 if (cx->type >= type)
296d93cd 175 pr->power.timer_broadcast_on_state = state;
169a0abb
TG
176}
177
918aae42 178static void __lapic_timer_propagate_broadcast(void *arg)
169a0abb 179{
f833bab8 180 struct acpi_processor *pr = (struct acpi_processor *) arg;
e9e2cdb4
TG
181 unsigned long reason;
182
183 reason = pr->power.timer_broadcast_on_state < INT_MAX ?
184 CLOCK_EVT_NOTIFY_BROADCAST_ON : CLOCK_EVT_NOTIFY_BROADCAST_OFF;
185
186 clockevents_notify(reason, &pr->id);
e9e2cdb4
TG
187}
188
918aae42
HS
189static void lapic_timer_propagate_broadcast(struct acpi_processor *pr)
190{
191 smp_call_function_single(pr->id, __lapic_timer_propagate_broadcast,
192 (void *)pr, 1);
193}
194
e9e2cdb4 195/* Power(C) State timer broadcast control */
7e275cc4 196static void lapic_timer_state_broadcast(struct acpi_processor *pr,
e9e2cdb4
TG
197 struct acpi_processor_cx *cx,
198 int broadcast)
199{
e9e2cdb4
TG
200 int state = cx - pr->power.states;
201
202 if (state >= pr->power.timer_broadcast_on_state) {
203 unsigned long reason;
204
205 reason = broadcast ? CLOCK_EVT_NOTIFY_BROADCAST_ENTER :
206 CLOCK_EVT_NOTIFY_BROADCAST_EXIT;
207 clockevents_notify(reason, &pr->id);
208 }
169a0abb
TG
209}
210
211#else
212
7e275cc4 213static void lapic_timer_check_state(int state, struct acpi_processor *pr,
169a0abb 214 struct acpi_processor_cx *cstate) { }
7e275cc4
LB
215static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) { }
216static void lapic_timer_state_broadcast(struct acpi_processor *pr,
e9e2cdb4
TG
217 struct acpi_processor_cx *cx,
218 int broadcast)
219{
220}
169a0abb
TG
221
222#endif
223
b04e7bdb
TG
224/*
225 * Suspend / resume control
226 */
815ab0fd
LB
227static u32 saved_bm_rld;
228
229static void acpi_idle_bm_rld_save(void)
230{
231 acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &saved_bm_rld);
232}
233static void acpi_idle_bm_rld_restore(void)
234{
235 u32 resumed_bm_rld;
236
237 acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &resumed_bm_rld);
238
239 if (resumed_bm_rld != saved_bm_rld)
240 acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, saved_bm_rld);
241}
b04e7bdb
TG
242
243int acpi_processor_suspend(struct acpi_device * device, pm_message_t state)
244{
815ab0fd 245 acpi_idle_bm_rld_save();
b04e7bdb
TG
246 return 0;
247}
248
249int acpi_processor_resume(struct acpi_device * device)
250{
815ab0fd 251 acpi_idle_bm_rld_restore();
b04e7bdb
TG
252 return 0;
253}
254
592913ec 255#if defined(CONFIG_X86)
520daf72 256static void tsc_check_state(int state)
ddb25f9a
AK
257{
258 switch (boot_cpu_data.x86_vendor) {
259 case X86_VENDOR_AMD:
40fb1715 260 case X86_VENDOR_INTEL:
ddb25f9a
AK
261 /*
262 * AMD Fam10h TSC will tick in all
263 * C/P/S0/S1 states when this bit is set.
264 */
40fb1715 265 if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC))
520daf72 266 return;
40fb1715 267
ddb25f9a 268 /*FALL THROUGH*/
ddb25f9a 269 default:
520daf72
LB
270 /* TSC could halt in idle, so notify users */
271 if (state > ACPI_STATE_C1)
272 mark_tsc_unstable("TSC halts in idle");
ddb25f9a
AK
273 }
274}
520daf72
LB
275#else
276static void tsc_check_state(int state) { return; }
ddb25f9a
AK
277#endif
278
4be44fcd 279static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
1da177e4 280{
1da177e4
LT
281
282 if (!pr)
d550d98d 283 return -EINVAL;
1da177e4
LT
284
285 if (!pr->pblk)
d550d98d 286 return -ENODEV;
1da177e4 287
1da177e4 288 /* if info is obtained from pblk/fadt, type equals state */
1da177e4
LT
289 pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2;
290 pr->power.states[ACPI_STATE_C3].type = ACPI_STATE_C3;
291
4c033552
VP
292#ifndef CONFIG_HOTPLUG_CPU
293 /*
294 * Check for P_LVL2_UP flag before entering C2 and above on
4f86d3a8 295 * an SMP system.
4c033552 296 */
ad71860a 297 if ((num_online_cpus() > 1) &&
cee324b1 298 !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED))
d550d98d 299 return -ENODEV;
4c033552
VP
300#endif
301
1da177e4
LT
302 /* determine C2 and C3 address from pblk */
303 pr->power.states[ACPI_STATE_C2].address = pr->pblk + 4;
304 pr->power.states[ACPI_STATE_C3].address = pr->pblk + 5;
305
306 /* determine latencies from FADT */
cee324b1
AS
307 pr->power.states[ACPI_STATE_C2].latency = acpi_gbl_FADT.C2latency;
308 pr->power.states[ACPI_STATE_C3].latency = acpi_gbl_FADT.C3latency;
1da177e4 309
5d76b6f6
LB
310 /*
311 * FADT specified C2 latency must be less than or equal to
312 * 100 microseconds.
313 */
314 if (acpi_gbl_FADT.C2latency > ACPI_PROCESSOR_MAX_C2_LATENCY) {
315 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
316 "C2 latency too large [%d]\n", acpi_gbl_FADT.C2latency));
317 /* invalidate C2 */
318 pr->power.states[ACPI_STATE_C2].address = 0;
319 }
320
a6d72c18
LB
321 /*
322 * FADT supplied C3 latency must be less than or equal to
323 * 1000 microseconds.
324 */
325 if (acpi_gbl_FADT.C3latency > ACPI_PROCESSOR_MAX_C3_LATENCY) {
326 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
327 "C3 latency too large [%d]\n", acpi_gbl_FADT.C3latency));
328 /* invalidate C3 */
329 pr->power.states[ACPI_STATE_C3].address = 0;
330 }
331
1da177e4
LT
332 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
333 "lvl2[0x%08x] lvl3[0x%08x]\n",
334 pr->power.states[ACPI_STATE_C2].address,
335 pr->power.states[ACPI_STATE_C3].address));
336
d550d98d 337 return 0;
1da177e4
LT
338}
339
991528d7 340static int acpi_processor_get_power_info_default(struct acpi_processor *pr)
acf05f4b 341{
991528d7
VP
342 if (!pr->power.states[ACPI_STATE_C1].valid) {
343 /* set the first C-State to C1 */
344 /* all processors need to support C1 */
345 pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1;
346 pr->power.states[ACPI_STATE_C1].valid = 1;
0fda6b40 347 pr->power.states[ACPI_STATE_C1].entry_method = ACPI_CSTATE_HALT;
991528d7
VP
348 }
349 /* the C0 state only exists as a filler in our array */
acf05f4b 350 pr->power.states[ACPI_STATE_C0].valid = 1;
d550d98d 351 return 0;
acf05f4b
VP
352}
353
4be44fcd 354static int acpi_processor_get_power_info_cst(struct acpi_processor *pr)
1da177e4 355{
4be44fcd 356 acpi_status status = 0;
439913ff 357 u64 count;
cf824788 358 int current_count;
4be44fcd
LB
359 int i;
360 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
361 union acpi_object *cst;
1da177e4 362
1da177e4 363
1da177e4 364 if (nocst)
d550d98d 365 return -ENODEV;
1da177e4 366
991528d7 367 current_count = 0;
1da177e4
LT
368
369 status = acpi_evaluate_object(pr->handle, "_CST", NULL, &buffer);
370 if (ACPI_FAILURE(status)) {
371 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No _CST, giving up\n"));
d550d98d 372 return -ENODEV;
4be44fcd 373 }
1da177e4 374
50dd0969 375 cst = buffer.pointer;
1da177e4
LT
376
377 /* There must be at least 2 elements */
378 if (!cst || (cst->type != ACPI_TYPE_PACKAGE) || cst->package.count < 2) {
6468463a 379 printk(KERN_ERR PREFIX "not enough elements in _CST\n");
1da177e4
LT
380 status = -EFAULT;
381 goto end;
382 }
383
384 count = cst->package.elements[0].integer.value;
385
386 /* Validate number of power states. */
387 if (count < 1 || count != cst->package.count - 1) {
6468463a 388 printk(KERN_ERR PREFIX "count given by _CST is not valid\n");
1da177e4
LT
389 status = -EFAULT;
390 goto end;
391 }
392
1da177e4
LT
393 /* Tell driver that at least _CST is supported. */
394 pr->flags.has_cst = 1;
395
396 for (i = 1; i <= count; i++) {
397 union acpi_object *element;
398 union acpi_object *obj;
399 struct acpi_power_register *reg;
400 struct acpi_processor_cx cx;
401
402 memset(&cx, 0, sizeof(cx));
403
50dd0969 404 element = &(cst->package.elements[i]);
1da177e4
LT
405 if (element->type != ACPI_TYPE_PACKAGE)
406 continue;
407
408 if (element->package.count != 4)
409 continue;
410
50dd0969 411 obj = &(element->package.elements[0]);
1da177e4
LT
412
413 if (obj->type != ACPI_TYPE_BUFFER)
414 continue;
415
4be44fcd 416 reg = (struct acpi_power_register *)obj->buffer.pointer;
1da177e4
LT
417
418 if (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO &&
4be44fcd 419 (reg->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE))
1da177e4
LT
420 continue;
421
1da177e4 422 /* There should be an easy way to extract an integer... */
50dd0969 423 obj = &(element->package.elements[1]);
1da177e4
LT
424 if (obj->type != ACPI_TYPE_INTEGER)
425 continue;
426
427 cx.type = obj->integer.value;
991528d7
VP
428 /*
429 * Some buggy BIOSes won't list C1 in _CST -
430 * Let acpi_processor_get_power_info_default() handle them later
431 */
432 if (i == 1 && cx.type != ACPI_STATE_C1)
433 current_count++;
434
435 cx.address = reg->address;
436 cx.index = current_count + 1;
437
bc71bec9 438 cx.entry_method = ACPI_CSTATE_SYSTEMIO;
991528d7
VP
439 if (reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) {
440 if (acpi_processor_ffh_cstate_probe
441 (pr->id, &cx, reg) == 0) {
bc71bec9 442 cx.entry_method = ACPI_CSTATE_FFH;
443 } else if (cx.type == ACPI_STATE_C1) {
991528d7
VP
444 /*
445 * C1 is a special case where FIXED_HARDWARE
446 * can be handled in non-MWAIT way as well.
447 * In that case, save this _CST entry info.
991528d7
VP
448 * Otherwise, ignore this info and continue.
449 */
bc71bec9 450 cx.entry_method = ACPI_CSTATE_HALT;
4fcb2fcd 451 snprintf(cx.desc, ACPI_CX_DESC_LEN, "ACPI HLT");
bc71bec9 452 } else {
991528d7
VP
453 continue;
454 }
da5e09a1 455 if (cx.type == ACPI_STATE_C1 &&
d1896049 456 (boot_option_idle_override == IDLE_NOMWAIT)) {
c1e3b377
ZY
457 /*
458 * In most cases the C1 space_id obtained from
459 * _CST object is FIXED_HARDWARE access mode.
460 * But when the option of idle=halt is added,
461 * the entry_method type should be changed from
462 * CSTATE_FFH to CSTATE_HALT.
da5e09a1
ZY
463 * When the option of idle=nomwait is added,
464 * the C1 entry_method type should be
465 * CSTATE_HALT.
c1e3b377
ZY
466 */
467 cx.entry_method = ACPI_CSTATE_HALT;
468 snprintf(cx.desc, ACPI_CX_DESC_LEN, "ACPI HLT");
469 }
4fcb2fcd
VP
470 } else {
471 snprintf(cx.desc, ACPI_CX_DESC_LEN, "ACPI IOPORT 0x%x",
472 cx.address);
991528d7 473 }
1da177e4 474
0fda6b40
VP
475 if (cx.type == ACPI_STATE_C1) {
476 cx.valid = 1;
477 }
4fcb2fcd 478
50dd0969 479 obj = &(element->package.elements[2]);
1da177e4
LT
480 if (obj->type != ACPI_TYPE_INTEGER)
481 continue;
482
483 cx.latency = obj->integer.value;
484
50dd0969 485 obj = &(element->package.elements[3]);
1da177e4
LT
486 if (obj->type != ACPI_TYPE_INTEGER)
487 continue;
488
489 cx.power = obj->integer.value;
490
cf824788
JM
491 current_count++;
492 memcpy(&(pr->power.states[current_count]), &cx, sizeof(cx));
493
494 /*
495 * We support total ACPI_PROCESSOR_MAX_POWER - 1
496 * (From 1 through ACPI_PROCESSOR_MAX_POWER - 1)
497 */
498 if (current_count >= (ACPI_PROCESSOR_MAX_POWER - 1)) {
499 printk(KERN_WARNING
500 "Limiting number of power states to max (%d)\n",
501 ACPI_PROCESSOR_MAX_POWER);
502 printk(KERN_WARNING
503 "Please increase ACPI_PROCESSOR_MAX_POWER if needed.\n");
504 break;
505 }
1da177e4
LT
506 }
507
4be44fcd 508 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d power states\n",
cf824788 509 current_count));
1da177e4
LT
510
511 /* Validate number of power states discovered */
cf824788 512 if (current_count < 2)
6d93c648 513 status = -EFAULT;
1da177e4 514
4be44fcd 515 end:
02438d87 516 kfree(buffer.pointer);
1da177e4 517
d550d98d 518 return status;
1da177e4
LT
519}
520
4be44fcd
LB
521static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
522 struct acpi_processor_cx *cx)
1da177e4 523{
ee1ca48f
PV
524 static int bm_check_flag = -1;
525 static int bm_control_flag = -1;
02df8b93 526
1da177e4
LT
527
528 if (!cx->address)
d550d98d 529 return;
1da177e4 530
1da177e4
LT
531 /*
532 * PIIX4 Erratum #18: We don't support C3 when Type-F (fast)
533 * DMA transfers are used by any ISA device to avoid livelock.
534 * Note that we could disable Type-F DMA (as recommended by
535 * the erratum), but this is known to disrupt certain ISA
536 * devices thus we take the conservative approach.
537 */
538 else if (errata.piix4.fdma) {
539 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
4be44fcd 540 "C3 not supported on PIIX4 with Type-F DMA\n"));
d550d98d 541 return;
1da177e4
LT
542 }
543
02df8b93 544 /* All the logic here assumes flags.bm_check is same across all CPUs */
ee1ca48f 545 if (bm_check_flag == -1) {
02df8b93
VP
546 /* Determine whether bm_check is needed based on CPU */
547 acpi_processor_power_init_bm_check(&(pr->flags), pr->id);
548 bm_check_flag = pr->flags.bm_check;
ee1ca48f 549 bm_control_flag = pr->flags.bm_control;
02df8b93
VP
550 } else {
551 pr->flags.bm_check = bm_check_flag;
ee1ca48f 552 pr->flags.bm_control = bm_control_flag;
02df8b93
VP
553 }
554
555 if (pr->flags.bm_check) {
02df8b93 556 if (!pr->flags.bm_control) {
ed3110ef
VP
557 if (pr->flags.has_cst != 1) {
558 /* bus mastering control is necessary */
559 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
560 "C3 support requires BM control\n"));
561 return;
562 } else {
563 /* Here we enter C3 without bus mastering */
564 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
565 "C3 support without BM control\n"));
566 }
02df8b93
VP
567 }
568 } else {
02df8b93
VP
569 /*
570 * WBINVD should be set in fadt, for C3 state to be
571 * supported on when bm_check is not required.
572 */
cee324b1 573 if (!(acpi_gbl_FADT.flags & ACPI_FADT_WBINVD)) {
02df8b93 574 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
4be44fcd
LB
575 "Cache invalidation should work properly"
576 " for C3 to be enabled on SMP systems\n"));
d550d98d 577 return;
02df8b93 578 }
02df8b93
VP
579 }
580
1da177e4
LT
581 /*
582 * Otherwise we've met all of our C3 requirements.
583 * Normalize the C3 latency to expidite policy. Enable
584 * checking of bus mastering status (bm_check) so we can
585 * use this in our C3 policy
586 */
587 cx->valid = 1;
4f86d3a8 588
4f86d3a8 589 cx->latency_ticks = cx->latency;
31878dd8
LB
590 /*
591 * On older chipsets, BM_RLD needs to be set
592 * in order for Bus Master activity to wake the
593 * system from C3. Newer chipsets handle DMA
594 * during C3 automatically and BM_RLD is a NOP.
595 * In either case, the proper way to
596 * handle BM_RLD is to set it and leave it set.
597 */
50ffba1b 598 acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, 1);
1da177e4 599
d550d98d 600 return;
1da177e4
LT
601}
602
1da177e4
LT
603static int acpi_processor_power_verify(struct acpi_processor *pr)
604{
605 unsigned int i;
606 unsigned int working = 0;
6eb0a0fd 607
169a0abb 608 pr->power.timer_broadcast_on_state = INT_MAX;
6eb0a0fd 609
a0bf284b 610 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
1da177e4
LT
611 struct acpi_processor_cx *cx = &pr->power.states[i];
612
613 switch (cx->type) {
614 case ACPI_STATE_C1:
615 cx->valid = 1;
616 break;
617
618 case ACPI_STATE_C2:
d22edd29
LB
619 if (!cx->address)
620 break;
621 cx->valid = 1;
622 cx->latency_ticks = cx->latency; /* Normalize latency */
1da177e4
LT
623 break;
624
625 case ACPI_STATE_C3:
626 acpi_processor_power_verify_c3(pr, cx);
627 break;
628 }
7e275cc4
LB
629 if (!cx->valid)
630 continue;
1da177e4 631
7e275cc4
LB
632 lapic_timer_check_state(i, pr, cx);
633 tsc_check_state(cx->type);
634 working++;
1da177e4 635 }
bd663347 636
918aae42 637 lapic_timer_propagate_broadcast(pr);
1da177e4
LT
638
639 return (working);
640}
641
4be44fcd 642static int acpi_processor_get_power_info(struct acpi_processor *pr)
1da177e4
LT
643{
644 unsigned int i;
645 int result;
646
1da177e4
LT
647
648 /* NOTE: the idle thread may not be running while calling
649 * this function */
650
991528d7
VP
651 /* Zero initialize all the C-states info. */
652 memset(pr->power.states, 0, sizeof(pr->power.states));
653
1da177e4 654 result = acpi_processor_get_power_info_cst(pr);
6d93c648 655 if (result == -ENODEV)
c5a114f1 656 result = acpi_processor_get_power_info_fadt(pr);
6d93c648 657
991528d7
VP
658 if (result)
659 return result;
660
661 acpi_processor_get_power_info_default(pr);
662
cf824788 663 pr->power.count = acpi_processor_power_verify(pr);
1da177e4 664
1da177e4
LT
665 /*
666 * if one state of type C2 or C3 is available, mark this
667 * CPU as being "idle manageable"
668 */
669 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
acf05f4b 670 if (pr->power.states[i].valid) {
1da177e4 671 pr->power.count = i;
2203d6ed
LT
672 if (pr->power.states[i].type >= ACPI_STATE_C2)
673 pr->flags.power = 1;
acf05f4b 674 }
1da177e4
LT
675 }
676
d550d98d 677 return 0;
1da177e4
LT
678}
679
4f86d3a8
LB
680/**
681 * acpi_idle_bm_check - checks if bus master activity was detected
682 */
683static int acpi_idle_bm_check(void)
684{
685 u32 bm_status = 0;
686
d3e7e99f
LB
687 if (bm_check_disable)
688 return 0;
689
50ffba1b 690 acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status);
4f86d3a8 691 if (bm_status)
50ffba1b 692 acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_STATUS, 1);
4f86d3a8
LB
693 /*
694 * PIIX4 Erratum #18: Note that BM_STS doesn't always reflect
695 * the true state of bus mastering activity; forcing us to
696 * manually check the BMIDEA bit of each IDE channel.
697 */
698 else if (errata.piix4.bmisx) {
699 if ((inb_p(errata.piix4.bmisx + 0x02) & 0x01)
700 || (inb_p(errata.piix4.bmisx + 0x0A) & 0x01))
701 bm_status = 1;
702 }
703 return bm_status;
704}
705
4f86d3a8
LB
706/**
707 * acpi_idle_do_entry - a helper function that does C2 and C3 type entry
708 * @cx: cstate data
bc71bec9 709 *
710 * Caller disables interrupt before call and enables interrupt after return.
4f86d3a8
LB
711 */
712static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx)
713{
dcf30997
SR
714 /* Don't trace irqs off for idle */
715 stop_critical_timings();
bc71bec9 716 if (cx->entry_method == ACPI_CSTATE_FFH) {
4f86d3a8
LB
717 /* Call into architectural FFH based C-state */
718 acpi_processor_ffh_cstate_enter(cx);
bc71bec9 719 } else if (cx->entry_method == ACPI_CSTATE_HALT) {
720 acpi_safe_halt();
4f86d3a8 721 } else {
4f86d3a8
LB
722 /* IO port based C-state */
723 inb(cx->address);
724 /* Dummy wait op - must do something useless after P_LVL2 read
725 because chipsets cannot guarantee that STPCLK# signal
726 gets asserted in time to freeze execution properly. */
cfa806f0 727 inl(acpi_gbl_FADT.xpm_timer_block.address);
4f86d3a8 728 }
dcf30997 729 start_critical_timings();
4f86d3a8
LB
730}
731
732/**
733 * acpi_idle_enter_c1 - enters an ACPI C1 state-type
734 * @dev: the target CPU
46bcfad7 735 * @drv: cpuidle driver containing cpuidle state info
e978aa7d 736 * @index: index of target state
4f86d3a8
LB
737 *
738 * This is equivalent to the HALT instruction.
739 */
740static int acpi_idle_enter_c1(struct cpuidle_device *dev,
46bcfad7 741 struct cpuidle_driver *drv, int index)
4f86d3a8 742{
ff69f2bb 743 ktime_t kt1, kt2;
744 s64 idle_time;
4f86d3a8 745 struct acpi_processor *pr;
4202735e
DD
746 struct cpuidle_state_usage *state_usage = &dev->states_usage[index];
747 struct acpi_processor_cx *cx = cpuidle_get_statedata(state_usage);
9b12e18c 748
4a6f4fe8 749 pr = __this_cpu_read(processors);
e978aa7d 750 dev->last_residency = 0;
4f86d3a8
LB
751
752 if (unlikely(!pr))
e978aa7d 753 return -EINVAL;
4f86d3a8 754
2e906655 755 local_irq_disable();
b077fbad 756
7e275cc4 757 lapic_timer_state_broadcast(pr, cx, 1);
ff69f2bb 758 kt1 = ktime_get_real();
bc71bec9 759 acpi_idle_do_entry(cx);
ff69f2bb 760 kt2 = ktime_get_real();
761 idle_time = ktime_to_us(ktime_sub(kt2, kt1));
4f86d3a8 762
e978aa7d
DD
763 /* Update device last_residency*/
764 dev->last_residency = (int)idle_time;
765
2e906655 766 local_irq_enable();
4f86d3a8 767 cx->usage++;
7e275cc4 768 lapic_timer_state_broadcast(pr, cx, 0);
4f86d3a8 769
e978aa7d 770 return index;
4f86d3a8
LB
771}
772
773/**
774 * acpi_idle_enter_simple - enters an ACPI state without BM handling
775 * @dev: the target CPU
46bcfad7 776 * @drv: cpuidle driver with cpuidle state information
e978aa7d 777 * @index: the index of suggested state
4f86d3a8
LB
778 */
779static int acpi_idle_enter_simple(struct cpuidle_device *dev,
46bcfad7 780 struct cpuidle_driver *drv, int index)
4f86d3a8
LB
781{
782 struct acpi_processor *pr;
4202735e
DD
783 struct cpuidle_state_usage *state_usage = &dev->states_usage[index];
784 struct acpi_processor_cx *cx = cpuidle_get_statedata(state_usage);
ff69f2bb 785 ktime_t kt1, kt2;
2da513f5 786 s64 idle_time_ns;
ff69f2bb 787 s64 idle_time;
50629118 788
4a6f4fe8 789 pr = __this_cpu_read(processors);
e978aa7d 790 dev->last_residency = 0;
4f86d3a8
LB
791
792 if (unlikely(!pr))
e978aa7d 793 return -EINVAL;
e196441b 794
4f86d3a8 795 local_irq_disable();
02cf4f98 796
d306ebc2
PV
797 if (cx->entry_method != ACPI_CSTATE_FFH) {
798 current_thread_info()->status &= ~TS_POLLING;
799 /*
800 * TS_POLLING-cleared state must be visible before we test
801 * NEED_RESCHED:
802 */
803 smp_mb();
4f86d3a8 804
02cf4f98
LB
805 if (unlikely(need_resched())) {
806 current_thread_info()->status |= TS_POLLING;
807 local_irq_enable();
e978aa7d 808 return -EINVAL;
02cf4f98 809 }
4f86d3a8
LB
810 }
811
e17bcb43
TG
812 /*
813 * Must be done before busmaster disable as we might need to
814 * access HPET !
815 */
7e275cc4 816 lapic_timer_state_broadcast(pr, cx, 1);
e17bcb43 817
4f86d3a8
LB
818 if (cx->type == ACPI_STATE_C3)
819 ACPI_FLUSH_CPU_CACHE();
820
ff69f2bb 821 kt1 = ktime_get_real();
50629118
VP
822 /* Tell the scheduler that we are going deep-idle: */
823 sched_clock_idle_sleep_event();
4f86d3a8 824 acpi_idle_do_entry(cx);
ff69f2bb 825 kt2 = ktime_get_real();
2da513f5
VP
826 idle_time_ns = ktime_to_ns(ktime_sub(kt2, kt1));
827 idle_time = idle_time_ns;
828 do_div(idle_time, NSEC_PER_USEC);
4f86d3a8 829
e978aa7d
DD
830 /* Update device last_residency*/
831 dev->last_residency = (int)idle_time;
832
50629118 833 /* Tell the scheduler how much we idled: */
2da513f5 834 sched_clock_idle_wakeup_event(idle_time_ns);
4f86d3a8
LB
835
836 local_irq_enable();
02cf4f98
LB
837 if (cx->entry_method != ACPI_CSTATE_FFH)
838 current_thread_info()->status |= TS_POLLING;
4f86d3a8
LB
839
840 cx->usage++;
841
7e275cc4 842 lapic_timer_state_broadcast(pr, cx, 0);
bceefad5 843 cx->time += idle_time;
e978aa7d 844 return index;
4f86d3a8
LB
845}
846
847static int c3_cpu_count;
e12f65f7 848static DEFINE_RAW_SPINLOCK(c3_lock);
4f86d3a8
LB
849
850/**
851 * acpi_idle_enter_bm - enters C3 with proper BM handling
852 * @dev: the target CPU
46bcfad7 853 * @drv: cpuidle driver containing state data
e978aa7d 854 * @index: the index of suggested state
4f86d3a8
LB
855 *
856 * If BM is detected, the deepest non-C3 idle state is entered instead.
857 */
858static int acpi_idle_enter_bm(struct cpuidle_device *dev,
46bcfad7 859 struct cpuidle_driver *drv, int index)
4f86d3a8
LB
860{
861 struct acpi_processor *pr;
4202735e
DD
862 struct cpuidle_state_usage *state_usage = &dev->states_usage[index];
863 struct acpi_processor_cx *cx = cpuidle_get_statedata(state_usage);
ff69f2bb 864 ktime_t kt1, kt2;
2da513f5 865 s64 idle_time_ns;
ff69f2bb 866 s64 idle_time;
ff69f2bb 867
50629118 868
4a6f4fe8 869 pr = __this_cpu_read(processors);
e978aa7d 870 dev->last_residency = 0;
4f86d3a8
LB
871
872 if (unlikely(!pr))
e978aa7d 873 return -EINVAL;
4f86d3a8 874
718be4aa 875 if (!cx->bm_sts_skip && acpi_idle_bm_check()) {
46bcfad7
DD
876 if (drv->safe_state_index >= 0) {
877 return drv->states[drv->safe_state_index].enter(dev,
878 drv, drv->safe_state_index);
ddc081a1 879 } else {
2e906655 880 local_irq_disable();
ddc081a1 881 acpi_safe_halt();
2e906655 882 local_irq_enable();
e978aa7d 883 return -EINVAL;
ddc081a1
VP
884 }
885 }
886
4f86d3a8 887 local_irq_disable();
02cf4f98 888
d306ebc2
PV
889 if (cx->entry_method != ACPI_CSTATE_FFH) {
890 current_thread_info()->status &= ~TS_POLLING;
891 /*
892 * TS_POLLING-cleared state must be visible before we test
893 * NEED_RESCHED:
894 */
895 smp_mb();
4f86d3a8 896
02cf4f98
LB
897 if (unlikely(need_resched())) {
898 current_thread_info()->status |= TS_POLLING;
899 local_irq_enable();
e978aa7d 900 return -EINVAL;
02cf4f98 901 }
4f86d3a8
LB
902 }
903
996520c1
VP
904 acpi_unlazy_tlb(smp_processor_id());
905
50629118
VP
906 /* Tell the scheduler that we are going deep-idle: */
907 sched_clock_idle_sleep_event();
4f86d3a8
LB
908 /*
909 * Must be done before busmaster disable as we might need to
910 * access HPET !
911 */
7e275cc4 912 lapic_timer_state_broadcast(pr, cx, 1);
4f86d3a8 913
f461ddea 914 kt1 = ktime_get_real();
ddc081a1
VP
915 /*
916 * disable bus master
917 * bm_check implies we need ARB_DIS
918 * !bm_check implies we need cache flush
919 * bm_control implies whether we can do ARB_DIS
920 *
921 * That leaves a case where bm_check is set and bm_control is
922 * not set. In that case we cannot do much, we enter C3
923 * without doing anything.
924 */
925 if (pr->flags.bm_check && pr->flags.bm_control) {
e12f65f7 926 raw_spin_lock(&c3_lock);
4f86d3a8
LB
927 c3_cpu_count++;
928 /* Disable bus master arbitration when all CPUs are in C3 */
929 if (c3_cpu_count == num_online_cpus())
50ffba1b 930 acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 1);
e12f65f7 931 raw_spin_unlock(&c3_lock);
ddc081a1
VP
932 } else if (!pr->flags.bm_check) {
933 ACPI_FLUSH_CPU_CACHE();
934 }
4f86d3a8 935
ddc081a1 936 acpi_idle_do_entry(cx);
4f86d3a8 937
ddc081a1
VP
938 /* Re-enable bus master arbitration */
939 if (pr->flags.bm_check && pr->flags.bm_control) {
e12f65f7 940 raw_spin_lock(&c3_lock);
50ffba1b 941 acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 0);
4f86d3a8 942 c3_cpu_count--;
e12f65f7 943 raw_spin_unlock(&c3_lock);
4f86d3a8 944 }
f461ddea 945 kt2 = ktime_get_real();
157317ba 946 idle_time_ns = ktime_to_ns(ktime_sub(kt2, kt1));
2da513f5
VP
947 idle_time = idle_time_ns;
948 do_div(idle_time, NSEC_PER_USEC);
4f86d3a8 949
e978aa7d
DD
950 /* Update device last_residency*/
951 dev->last_residency = (int)idle_time;
952
50629118 953 /* Tell the scheduler how much we idled: */
2da513f5 954 sched_clock_idle_wakeup_event(idle_time_ns);
4f86d3a8
LB
955
956 local_irq_enable();
02cf4f98
LB
957 if (cx->entry_method != ACPI_CSTATE_FFH)
958 current_thread_info()->status |= TS_POLLING;
4f86d3a8
LB
959
960 cx->usage++;
961
7e275cc4 962 lapic_timer_state_broadcast(pr, cx, 0);
bceefad5 963 cx->time += idle_time;
e978aa7d 964 return index;
4f86d3a8
LB
965}
966
967struct cpuidle_driver acpi_idle_driver = {
968 .name = "acpi_idle",
969 .owner = THIS_MODULE,
970};
971
972/**
46bcfad7
DD
973 * acpi_processor_setup_cpuidle_cx - prepares and configures CPUIDLE
974 * device i.e. per-cpu data
975 *
4f86d3a8
LB
976 * @pr: the ACPI processor
977 */
46bcfad7 978static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr)
4f86d3a8 979{
9a0b8415 980 int i, count = CPUIDLE_DRIVER_STATE_START;
4f86d3a8 981 struct acpi_processor_cx *cx;
4202735e 982 struct cpuidle_state_usage *state_usage;
4f86d3a8
LB
983 struct cpuidle_device *dev = &pr->power.dev;
984
985 if (!pr->flags.power_setup_done)
986 return -EINVAL;
987
988 if (pr->flags.power == 0) {
989 return -EINVAL;
990 }
991
dcb84f33 992 dev->cpu = pr->id;
4fcb2fcd 993
615dfd93
LB
994 if (max_cstate == 0)
995 max_cstate = 1;
996
4f86d3a8
LB
997 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
998 cx = &pr->power.states[i];
4202735e 999 state_usage = &dev->states_usage[count];
4f86d3a8
LB
1000
1001 if (!cx->valid)
1002 continue;
1003
1004#ifdef CONFIG_HOTPLUG_CPU
1005 if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) &&
1006 !pr->flags.has_cst &&
1007 !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED))
1008 continue;
1fec74a9 1009#endif
46bcfad7 1010
4202735e 1011 cpuidle_set_statedata(state_usage, cx);
4f86d3a8 1012
46bcfad7
DD
1013 count++;
1014 if (count == CPUIDLE_STATE_MAX)
1015 break;
1016 }
1017
1018 dev->state_count = count;
1019
1020 if (!count)
1021 return -EINVAL;
1022
1023 return 0;
1024}
1025
1026/**
1027 * acpi_processor_setup_cpuidle states- prepares and configures cpuidle
1028 * global state data i.e. idle routines
1029 *
1030 * @pr: the ACPI processor
1031 */
1032static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
1033{
1034 int i, count = CPUIDLE_DRIVER_STATE_START;
1035 struct acpi_processor_cx *cx;
1036 struct cpuidle_state *state;
1037 struct cpuidle_driver *drv = &acpi_idle_driver;
1038
1039 if (!pr->flags.power_setup_done)
1040 return -EINVAL;
1041
1042 if (pr->flags.power == 0)
1043 return -EINVAL;
1044
1045 drv->safe_state_index = -1;
4fcb2fcd 1046 for (i = 0; i < CPUIDLE_STATE_MAX; i++) {
46bcfad7
DD
1047 drv->states[i].name[0] = '\0';
1048 drv->states[i].desc[0] = '\0';
4fcb2fcd
VP
1049 }
1050
615dfd93
LB
1051 if (max_cstate == 0)
1052 max_cstate = 1;
1053
4f86d3a8
LB
1054 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
1055 cx = &pr->power.states[i];
4f86d3a8
LB
1056
1057 if (!cx->valid)
1058 continue;
1059
1060#ifdef CONFIG_HOTPLUG_CPU
1061 if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) &&
1062 !pr->flags.has_cst &&
1063 !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED))
1064 continue;
1fec74a9 1065#endif
4f86d3a8 1066
46bcfad7 1067 state = &drv->states[count];
4f86d3a8 1068 snprintf(state->name, CPUIDLE_NAME_LEN, "C%d", i);
4fcb2fcd 1069 strncpy(state->desc, cx->desc, CPUIDLE_DESC_LEN);
4f86d3a8 1070 state->exit_latency = cx->latency;
4963f620 1071 state->target_residency = cx->latency * latency_factor;
4f86d3a8
LB
1072
1073 state->flags = 0;
1074 switch (cx->type) {
1075 case ACPI_STATE_C1:
8e92b660
VP
1076 if (cx->entry_method == ACPI_CSTATE_FFH)
1077 state->flags |= CPUIDLE_FLAG_TIME_VALID;
1078
4f86d3a8 1079 state->enter = acpi_idle_enter_c1;
46bcfad7 1080 drv->safe_state_index = count;
4f86d3a8
LB
1081 break;
1082
1083 case ACPI_STATE_C2:
4f86d3a8
LB
1084 state->flags |= CPUIDLE_FLAG_TIME_VALID;
1085 state->enter = acpi_idle_enter_simple;
46bcfad7 1086 drv->safe_state_index = count;
4f86d3a8
LB
1087 break;
1088
1089 case ACPI_STATE_C3:
4f86d3a8 1090 state->flags |= CPUIDLE_FLAG_TIME_VALID;
4f86d3a8
LB
1091 state->enter = pr->flags.bm_check ?
1092 acpi_idle_enter_bm :
1093 acpi_idle_enter_simple;
1094 break;
1095 }
1096
1097 count++;
9a0b8415 1098 if (count == CPUIDLE_STATE_MAX)
1099 break;
4f86d3a8
LB
1100 }
1101
46bcfad7 1102 drv->state_count = count;
4f86d3a8
LB
1103
1104 if (!count)
1105 return -EINVAL;
1106
4f86d3a8
LB
1107 return 0;
1108}
1109
46bcfad7 1110int acpi_processor_hotplug(struct acpi_processor *pr)
4f86d3a8 1111{
dcb84f33 1112 int ret = 0;
4f86d3a8 1113
d1896049 1114 if (disabled_by_idle_boot_param())
36a91358
VP
1115 return 0;
1116
4f86d3a8
LB
1117 if (!pr)
1118 return -EINVAL;
1119
1120 if (nocst) {
1121 return -ENODEV;
1122 }
1123
1124 if (!pr->flags.power_setup_done)
1125 return -ENODEV;
1126
1127 cpuidle_pause_and_lock();
1128 cpuidle_disable_device(&pr->power.dev);
1129 acpi_processor_get_power_info(pr);
dcb84f33 1130 if (pr->flags.power) {
46bcfad7 1131 acpi_processor_setup_cpuidle_cx(pr);
dcb84f33
VP
1132 ret = cpuidle_enable_device(&pr->power.dev);
1133 }
4f86d3a8
LB
1134 cpuidle_resume_and_unlock();
1135
1136 return ret;
1137}
1138
46bcfad7
DD
1139int acpi_processor_cst_has_changed(struct acpi_processor *pr)
1140{
1141 int cpu;
1142 struct acpi_processor *_pr;
1143
1144 if (disabled_by_idle_boot_param())
1145 return 0;
1146
1147 if (!pr)
1148 return -EINVAL;
1149
1150 if (nocst)
1151 return -ENODEV;
1152
1153 if (!pr->flags.power_setup_done)
1154 return -ENODEV;
1155
1156 /*
1157 * FIXME: Design the ACPI notification to make it once per
1158 * system instead of once per-cpu. This condition is a hack
1159 * to make the code that updates C-States be called once.
1160 */
1161
1162 if (smp_processor_id() == 0 &&
1163 cpuidle_get_driver() == &acpi_idle_driver) {
1164
1165 cpuidle_pause_and_lock();
1166 /* Protect against cpu-hotplug */
1167 get_online_cpus();
1168
1169 /* Disable all cpuidle devices */
1170 for_each_online_cpu(cpu) {
1171 _pr = per_cpu(processors, cpu);
1172 if (!_pr || !_pr->flags.power_setup_done)
1173 continue;
1174 cpuidle_disable_device(&_pr->power.dev);
1175 }
1176
1177 /* Populate Updated C-state information */
1178 acpi_processor_setup_cpuidle_states(pr);
1179
1180 /* Enable all cpuidle devices */
1181 for_each_online_cpu(cpu) {
1182 _pr = per_cpu(processors, cpu);
1183 if (!_pr || !_pr->flags.power_setup_done)
1184 continue;
1185 acpi_processor_get_power_info(_pr);
1186 if (_pr->flags.power) {
1187 acpi_processor_setup_cpuidle_cx(_pr);
1188 cpuidle_enable_device(&_pr->power.dev);
1189 }
1190 }
1191 put_online_cpus();
1192 cpuidle_resume_and_unlock();
1193 }
1194
1195 return 0;
1196}
1197
1198static int acpi_processor_registered;
1199
7af8b660 1200int __cpuinit acpi_processor_power_init(struct acpi_processor *pr,
4be44fcd 1201 struct acpi_device *device)
1da177e4 1202{
4be44fcd 1203 acpi_status status = 0;
46bcfad7 1204 int retval;
b6835052 1205 static int first_run;
1da177e4 1206
d1896049 1207 if (disabled_by_idle_boot_param())
36a91358 1208 return 0;
1da177e4
LT
1209
1210 if (!first_run) {
1211 dmi_check_system(processor_power_dmi_table);
c1c30634 1212 max_cstate = acpi_processor_cstate_check(max_cstate);
1da177e4 1213 if (max_cstate < ACPI_C_STATES_MAX)
4be44fcd
LB
1214 printk(KERN_NOTICE
1215 "ACPI: processor limited to max C-state %d\n",
1216 max_cstate);
1da177e4
LT
1217 first_run++;
1218 }
1219
02df8b93 1220 if (!pr)
d550d98d 1221 return -EINVAL;
02df8b93 1222
cee324b1 1223 if (acpi_gbl_FADT.cst_control && !nocst) {
4be44fcd 1224 status =
cee324b1 1225 acpi_os_write_port(acpi_gbl_FADT.smi_command, acpi_gbl_FADT.cst_control, 8);
1da177e4 1226 if (ACPI_FAILURE(status)) {
a6fc6720
TR
1227 ACPI_EXCEPTION((AE_INFO, status,
1228 "Notifying BIOS of _CST ability failed"));
1da177e4
LT
1229 }
1230 }
1231
1232 acpi_processor_get_power_info(pr);
4f86d3a8 1233 pr->flags.power_setup_done = 1;
1da177e4
LT
1234
1235 /*
1236 * Install the idle handler if processor power management is supported.
1237 * Note that we use previously set idle handler will be used on
1238 * platforms that only support C1.
1239 */
36a91358 1240 if (pr->flags.power) {
46bcfad7
DD
1241 /* Register acpi_idle_driver if not already registered */
1242 if (!acpi_processor_registered) {
1243 acpi_processor_setup_cpuidle_states(pr);
1244 retval = cpuidle_register_driver(&acpi_idle_driver);
1245 if (retval)
1246 return retval;
1247 printk(KERN_DEBUG "ACPI: %s registered with cpuidle\n",
1248 acpi_idle_driver.name);
1249 }
1250 /* Register per-cpu cpuidle_device. Cpuidle driver
1251 * must already be registered before registering device
1252 */
1253 acpi_processor_setup_cpuidle_cx(pr);
1254 retval = cpuidle_register_device(&pr->power.dev);
1255 if (retval) {
1256 if (acpi_processor_registered == 0)
1257 cpuidle_unregister_driver(&acpi_idle_driver);
1258 return retval;
1259 }
1260 acpi_processor_registered++;
1da177e4 1261 }
d550d98d 1262 return 0;
1da177e4
LT
1263}
1264
4be44fcd
LB
1265int acpi_processor_power_exit(struct acpi_processor *pr,
1266 struct acpi_device *device)
1da177e4 1267{
d1896049 1268 if (disabled_by_idle_boot_param())
36a91358
VP
1269 return 0;
1270
46bcfad7
DD
1271 if (pr->flags.power) {
1272 cpuidle_unregister_device(&pr->power.dev);
1273 acpi_processor_registered--;
1274 if (acpi_processor_registered == 0)
1275 cpuidle_unregister_driver(&acpi_idle_driver);
1276 }
1da177e4 1277
46bcfad7 1278 pr->flags.power_setup_done = 0;
d550d98d 1279 return 0;
1da177e4 1280}