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