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 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/kernel.h> 32 #include <linux/module.h> 33 #include <linux/init.h> 34 #include <linux/cpufreq.h> 35 #include <linux/proc_fs.h> 36 #include <linux/seq_file.h> 37 #include <linux/acpi.h> 38 #include <linux/dmi.h> 39 #include <linux/moduleparam.h> 40 #include <linux/sched.h> /* need_resched() */ 41 42 #include <asm/io.h> 43 #include <asm/uaccess.h> 44 45 #include <acpi/acpi_bus.h> 46 #include <acpi/processor.h> 47 48 #define ACPI_PROCESSOR_COMPONENT 0x01000000 49 #define ACPI_PROCESSOR_CLASS "processor" 50 #define ACPI_PROCESSOR_DRIVER_NAME "ACPI Processor Driver" 51 #define _COMPONENT ACPI_PROCESSOR_COMPONENT 52 ACPI_MODULE_NAME("acpi_processor") 53 #define ACPI_PROCESSOR_FILE_POWER "power" 54 #define US_TO_PM_TIMER_TICKS(t) ((t * (PM_TIMER_FREQUENCY/1000)) / 1000) 55 #define C2_OVERHEAD 4 /* 1us (3.579 ticks per us) */ 56 #define C3_OVERHEAD 4 /* 1us (3.579 ticks per us) */ 57 static void (*pm_idle_save) (void); 58 module_param(max_cstate, uint, 0644); 59 60 static unsigned int nocst = 0; 61 module_param(nocst, uint, 0000); 62 63 /* 64 * bm_history -- bit-mask with a bit per jiffy of bus-master activity 65 * 1000 HZ: 0xFFFFFFFF: 32 jiffies = 32ms 66 * 800 HZ: 0xFFFFFFFF: 32 jiffies = 40ms 67 * 100 HZ: 0x0000000F: 4 jiffies = 40ms 68 * reduce history for more aggressive entry into C3 69 */ 70 static unsigned int bm_history = 71 (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1)); 72 module_param(bm_history, uint, 0644); 73 /* -------------------------------------------------------------------------- 74 Power Management 75 -------------------------------------------------------------------------- */ 76 77 /* 78 * IBM ThinkPad R40e crashes mysteriously when going into C2 or C3. 79 * For now disable this. Probably a bug somewhere else. 80 * 81 * To skip this limit, boot/load with a large max_cstate limit. 82 */ 83 static int set_max_cstate(struct dmi_system_id *id) 84 { 85 if (max_cstate > ACPI_PROCESSOR_MAX_POWER) 86 return 0; 87 88 printk(KERN_NOTICE PREFIX "%s detected - limiting to C%ld max_cstate." 89 " Override with \"processor.max_cstate=%d\"\n", id->ident, 90 (long)id->driver_data, ACPI_PROCESSOR_MAX_POWER + 1); 91 92 max_cstate = (long)id->driver_data; 93 94 return 0; 95 } 96 97 static struct dmi_system_id __initdata processor_power_dmi_table[] = { 98 {set_max_cstate, "IBM ThinkPad R40e", { 99 DMI_MATCH(DMI_BIOS_VENDOR, 100 "IBM"), 101 DMI_MATCH(DMI_BIOS_VERSION, 102 "1SET60WW")}, 103 (void *)1}, 104 {set_max_cstate, "Medion 41700", { 105 DMI_MATCH(DMI_BIOS_VENDOR, 106 "Phoenix Technologies LTD"), 107 DMI_MATCH(DMI_BIOS_VERSION, 108 "R01-A1J")}, (void *)1}, 109 {set_max_cstate, "Clevo 5600D", { 110 DMI_MATCH(DMI_BIOS_VENDOR, 111 "Phoenix Technologies LTD"), 112 DMI_MATCH(DMI_BIOS_VERSION, 113 "SHE845M0.86C.0013.D.0302131307")}, 114 (void *)2}, 115 {}, 116 }; 117 118 static inline u32 ticks_elapsed(u32 t1, u32 t2) 119 { 120 if (t2 >= t1) 121 return (t2 - t1); 122 else if (!acpi_fadt.tmr_val_ext) 123 return (((0x00FFFFFF - t1) + t2) & 0x00FFFFFF); 124 else 125 return ((0xFFFFFFFF - t1) + t2); 126 } 127 128 static void 129 acpi_processor_power_activate(struct acpi_processor *pr, 130 struct acpi_processor_cx *new) 131 { 132 struct acpi_processor_cx *old; 133 134 if (!pr || !new) 135 return; 136 137 old = pr->power.state; 138 139 if (old) 140 old->promotion.count = 0; 141 new->demotion.count = 0; 142 143 /* Cleanup from old state. */ 144 if (old) { 145 switch (old->type) { 146 case ACPI_STATE_C3: 147 /* Disable bus master reload */ 148 if (new->type != ACPI_STATE_C3 && pr->flags.bm_check) 149 acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0, 150 ACPI_MTX_DO_NOT_LOCK); 151 break; 152 } 153 } 154 155 /* Prepare to use new state. */ 156 switch (new->type) { 157 case ACPI_STATE_C3: 158 /* Enable bus master reload */ 159 if (old->type != ACPI_STATE_C3 && pr->flags.bm_check) 160 acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 1, 161 ACPI_MTX_DO_NOT_LOCK); 162 break; 163 } 164 165 pr->power.state = new; 166 167 return; 168 } 169 170 static void acpi_safe_halt(void) 171 { 172 clear_thread_flag(TIF_POLLING_NRFLAG); 173 smp_mb__after_clear_bit(); 174 if (!need_resched()) 175 safe_halt(); 176 set_thread_flag(TIF_POLLING_NRFLAG); 177 } 178 179 static atomic_t c3_cpu_count; 180 181 static void acpi_processor_idle(void) 182 { 183 struct acpi_processor *pr = NULL; 184 struct acpi_processor_cx *cx = NULL; 185 struct acpi_processor_cx *next_state = NULL; 186 int sleep_ticks = 0; 187 u32 t1, t2 = 0; 188 189 pr = processors[smp_processor_id()]; 190 if (!pr) 191 return; 192 193 /* 194 * Interrupts must be disabled during bus mastering calculations and 195 * for C2/C3 transitions. 196 */ 197 local_irq_disable(); 198 199 /* 200 * Check whether we truly need to go idle, or should 201 * reschedule: 202 */ 203 if (unlikely(need_resched())) { 204 local_irq_enable(); 205 return; 206 } 207 208 cx = pr->power.state; 209 if (!cx) { 210 if (pm_idle_save) 211 pm_idle_save(); 212 else 213 acpi_safe_halt(); 214 return; 215 } 216 217 /* 218 * Check BM Activity 219 * ----------------- 220 * Check for bus mastering activity (if required), record, and check 221 * for demotion. 222 */ 223 if (pr->flags.bm_check) { 224 u32 bm_status = 0; 225 unsigned long diff = jiffies - pr->power.bm_check_timestamp; 226 227 if (diff > 32) 228 diff = 32; 229 230 while (diff) { 231 /* if we didn't get called, assume there was busmaster activity */ 232 diff--; 233 if (diff) 234 pr->power.bm_activity |= 0x1; 235 pr->power.bm_activity <<= 1; 236 } 237 238 acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, 239 &bm_status, ACPI_MTX_DO_NOT_LOCK); 240 if (bm_status) { 241 pr->power.bm_activity++; 242 acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 243 1, ACPI_MTX_DO_NOT_LOCK); 244 } 245 /* 246 * PIIX4 Erratum #18: Note that BM_STS doesn't always reflect 247 * the true state of bus mastering activity; forcing us to 248 * manually check the BMIDEA bit of each IDE channel. 249 */ 250 else if (errata.piix4.bmisx) { 251 if ((inb_p(errata.piix4.bmisx + 0x02) & 0x01) 252 || (inb_p(errata.piix4.bmisx + 0x0A) & 0x01)) 253 pr->power.bm_activity++; 254 } 255 256 pr->power.bm_check_timestamp = jiffies; 257 258 /* 259 * Apply bus mastering demotion policy. Automatically demote 260 * to avoid a faulty transition. Note that the processor 261 * won't enter a low-power state during this call (to this 262 * funciton) but should upon the next. 263 * 264 * TBD: A better policy might be to fallback to the demotion 265 * state (use it for this quantum only) istead of 266 * demoting -- and rely on duration as our sole demotion 267 * qualification. This may, however, introduce DMA 268 * issues (e.g. floppy DMA transfer overrun/underrun). 269 */ 270 if (pr->power.bm_activity & cx->demotion.threshold.bm) { 271 local_irq_enable(); 272 next_state = cx->demotion.state; 273 goto end; 274 } 275 } 276 277 cx->usage++; 278 279 #ifdef CONFIG_HOTPLUG_CPU 280 /* 281 * Check for P_LVL2_UP flag before entering C2 and above on 282 * an SMP system. We do it here instead of doing it at _CST/P_LVL 283 * detection phase, to work cleanly with logical CPU hotplug. 284 */ 285 if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) && 286 !pr->flags.has_cst && acpi_fadt.plvl2_up) 287 cx->type = ACPI_STATE_C1; 288 #endif 289 /* 290 * Sleep: 291 * ------ 292 * Invoke the current Cx state to put the processor to sleep. 293 */ 294 if (cx->type == ACPI_STATE_C2 || cx->type == ACPI_STATE_C3) { 295 clear_thread_flag(TIF_POLLING_NRFLAG); 296 smp_mb__after_clear_bit(); 297 if (need_resched()) { 298 set_thread_flag(TIF_POLLING_NRFLAG); 299 local_irq_enable(); 300 return; 301 } 302 } 303 304 switch (cx->type) { 305 306 case ACPI_STATE_C1: 307 /* 308 * Invoke C1. 309 * Use the appropriate idle routine, the one that would 310 * be used without acpi C-states. 311 */ 312 if (pm_idle_save) 313 pm_idle_save(); 314 else 315 acpi_safe_halt(); 316 317 /* 318 * TBD: Can't get time duration while in C1, as resumes 319 * go to an ISR rather than here. Need to instrument 320 * base interrupt handler. 321 */ 322 sleep_ticks = 0xFFFFFFFF; 323 break; 324 325 case ACPI_STATE_C2: 326 /* Get start time (ticks) */ 327 t1 = inl(acpi_fadt.xpm_tmr_blk.address); 328 /* Invoke C2 */ 329 inb(cx->address); 330 /* Dummy op - must do something useless after P_LVL2 read */ 331 t2 = inl(acpi_fadt.xpm_tmr_blk.address); 332 /* Get end time (ticks) */ 333 t2 = inl(acpi_fadt.xpm_tmr_blk.address); 334 /* Re-enable interrupts */ 335 local_irq_enable(); 336 set_thread_flag(TIF_POLLING_NRFLAG); 337 /* Compute time (ticks) that we were actually asleep */ 338 sleep_ticks = 339 ticks_elapsed(t1, t2) - cx->latency_ticks - C2_OVERHEAD; 340 break; 341 342 case ACPI_STATE_C3: 343 344 if (pr->flags.bm_check) { 345 if (atomic_inc_return(&c3_cpu_count) == 346 num_online_cpus()) { 347 /* 348 * All CPUs are trying to go to C3 349 * Disable bus master arbitration 350 */ 351 acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1, 352 ACPI_MTX_DO_NOT_LOCK); 353 } 354 } else { 355 /* SMP with no shared cache... Invalidate cache */ 356 ACPI_FLUSH_CPU_CACHE(); 357 } 358 359 /* Get start time (ticks) */ 360 t1 = inl(acpi_fadt.xpm_tmr_blk.address); 361 /* Invoke C3 */ 362 inb(cx->address); 363 /* Dummy op - must do something useless after P_LVL3 read */ 364 t2 = inl(acpi_fadt.xpm_tmr_blk.address); 365 /* Get end time (ticks) */ 366 t2 = inl(acpi_fadt.xpm_tmr_blk.address); 367 if (pr->flags.bm_check) { 368 /* Enable bus master arbitration */ 369 atomic_dec(&c3_cpu_count); 370 acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0, 371 ACPI_MTX_DO_NOT_LOCK); 372 } 373 374 /* Re-enable interrupts */ 375 local_irq_enable(); 376 set_thread_flag(TIF_POLLING_NRFLAG); 377 /* Compute time (ticks) that we were actually asleep */ 378 sleep_ticks = 379 ticks_elapsed(t1, t2) - cx->latency_ticks - C3_OVERHEAD; 380 break; 381 382 default: 383 local_irq_enable(); 384 return; 385 } 386 387 next_state = pr->power.state; 388 389 /* 390 * Promotion? 391 * ---------- 392 * Track the number of longs (time asleep is greater than threshold) 393 * and promote when the count threshold is reached. Note that bus 394 * mastering activity may prevent promotions. 395 * Do not promote above max_cstate. 396 */ 397 if (cx->promotion.state && 398 ((cx->promotion.state - pr->power.states) <= max_cstate)) { 399 if (sleep_ticks > cx->promotion.threshold.ticks) { 400 cx->promotion.count++; 401 cx->demotion.count = 0; 402 if (cx->promotion.count >= 403 cx->promotion.threshold.count) { 404 if (pr->flags.bm_check) { 405 if (! 406 (pr->power.bm_activity & cx-> 407 promotion.threshold.bm)) { 408 next_state = 409 cx->promotion.state; 410 goto end; 411 } 412 } else { 413 next_state = cx->promotion.state; 414 goto end; 415 } 416 } 417 } 418 } 419 420 /* 421 * Demotion? 422 * --------- 423 * Track the number of shorts (time asleep is less than time threshold) 424 * and demote when the usage threshold is reached. 425 */ 426 if (cx->demotion.state) { 427 if (sleep_ticks < cx->demotion.threshold.ticks) { 428 cx->demotion.count++; 429 cx->promotion.count = 0; 430 if (cx->demotion.count >= cx->demotion.threshold.count) { 431 next_state = cx->demotion.state; 432 goto end; 433 } 434 } 435 } 436 437 end: 438 /* 439 * Demote if current state exceeds max_cstate 440 */ 441 if ((pr->power.state - pr->power.states) > max_cstate) { 442 if (cx->demotion.state) 443 next_state = cx->demotion.state; 444 } 445 446 /* 447 * New Cx State? 448 * ------------- 449 * If we're going to start using a new Cx state we must clean up 450 * from the previous and prepare to use the new. 451 */ 452 if (next_state != pr->power.state) 453 acpi_processor_power_activate(pr, next_state); 454 } 455 456 static int acpi_processor_set_power_policy(struct acpi_processor *pr) 457 { 458 unsigned int i; 459 unsigned int state_is_set = 0; 460 struct acpi_processor_cx *lower = NULL; 461 struct acpi_processor_cx *higher = NULL; 462 struct acpi_processor_cx *cx; 463 464 ACPI_FUNCTION_TRACE("acpi_processor_set_power_policy"); 465 466 if (!pr) 467 return_VALUE(-EINVAL); 468 469 /* 470 * This function sets the default Cx state policy (OS idle handler). 471 * Our scheme is to promote quickly to C2 but more conservatively 472 * to C3. We're favoring C2 for its characteristics of low latency 473 * (quick response), good power savings, and ability to allow bus 474 * mastering activity. Note that the Cx state policy is completely 475 * customizable and can be altered dynamically. 476 */ 477 478 /* startup state */ 479 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { 480 cx = &pr->power.states[i]; 481 if (!cx->valid) 482 continue; 483 484 if (!state_is_set) 485 pr->power.state = cx; 486 state_is_set++; 487 break; 488 } 489 490 if (!state_is_set) 491 return_VALUE(-ENODEV); 492 493 /* demotion */ 494 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { 495 cx = &pr->power.states[i]; 496 if (!cx->valid) 497 continue; 498 499 if (lower) { 500 cx->demotion.state = lower; 501 cx->demotion.threshold.ticks = cx->latency_ticks; 502 cx->demotion.threshold.count = 1; 503 if (cx->type == ACPI_STATE_C3) 504 cx->demotion.threshold.bm = bm_history; 505 } 506 507 lower = cx; 508 } 509 510 /* promotion */ 511 for (i = (ACPI_PROCESSOR_MAX_POWER - 1); i > 0; i--) { 512 cx = &pr->power.states[i]; 513 if (!cx->valid) 514 continue; 515 516 if (higher) { 517 cx->promotion.state = higher; 518 cx->promotion.threshold.ticks = cx->latency_ticks; 519 if (cx->type >= ACPI_STATE_C2) 520 cx->promotion.threshold.count = 4; 521 else 522 cx->promotion.threshold.count = 10; 523 if (higher->type == ACPI_STATE_C3) 524 cx->promotion.threshold.bm = bm_history; 525 } 526 527 higher = cx; 528 } 529 530 return_VALUE(0); 531 } 532 533 static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) 534 { 535 ACPI_FUNCTION_TRACE("acpi_processor_get_power_info_fadt"); 536 537 if (!pr) 538 return_VALUE(-EINVAL); 539 540 if (!pr->pblk) 541 return_VALUE(-ENODEV); 542 543 memset(pr->power.states, 0, sizeof(pr->power.states)); 544 545 /* if info is obtained from pblk/fadt, type equals state */ 546 pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1; 547 pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2; 548 pr->power.states[ACPI_STATE_C3].type = ACPI_STATE_C3; 549 550 /* the C0 state only exists as a filler in our array, 551 * and all processors need to support C1 */ 552 pr->power.states[ACPI_STATE_C0].valid = 1; 553 pr->power.states[ACPI_STATE_C1].valid = 1; 554 555 #ifndef CONFIG_HOTPLUG_CPU 556 /* 557 * Check for P_LVL2_UP flag before entering C2 and above on 558 * an SMP system. 559 */ 560 if ((num_online_cpus() > 1) && acpi_fadt.plvl2_up) 561 return_VALUE(-ENODEV); 562 #endif 563 564 /* determine C2 and C3 address from pblk */ 565 pr->power.states[ACPI_STATE_C2].address = pr->pblk + 4; 566 pr->power.states[ACPI_STATE_C3].address = pr->pblk + 5; 567 568 /* determine latencies from FADT */ 569 pr->power.states[ACPI_STATE_C2].latency = acpi_fadt.plvl2_lat; 570 pr->power.states[ACPI_STATE_C3].latency = acpi_fadt.plvl3_lat; 571 572 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 573 "lvl2[0x%08x] lvl3[0x%08x]\n", 574 pr->power.states[ACPI_STATE_C2].address, 575 pr->power.states[ACPI_STATE_C3].address)); 576 577 return_VALUE(0); 578 } 579 580 static int acpi_processor_get_power_info_default_c1(struct acpi_processor *pr) 581 { 582 ACPI_FUNCTION_TRACE("acpi_processor_get_power_info_default_c1"); 583 584 memset(pr->power.states, 0, sizeof(pr->power.states)); 585 586 /* if info is obtained from pblk/fadt, type equals state */ 587 pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1; 588 pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2; 589 pr->power.states[ACPI_STATE_C3].type = ACPI_STATE_C3; 590 591 /* the C0 state only exists as a filler in our array, 592 * and all processors need to support C1 */ 593 pr->power.states[ACPI_STATE_C0].valid = 1; 594 pr->power.states[ACPI_STATE_C1].valid = 1; 595 596 return_VALUE(0); 597 } 598 599 static int acpi_processor_get_power_info_cst(struct acpi_processor *pr) 600 { 601 acpi_status status = 0; 602 acpi_integer count; 603 int i; 604 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 605 union acpi_object *cst; 606 607 ACPI_FUNCTION_TRACE("acpi_processor_get_power_info_cst"); 608 609 if (nocst) 610 return_VALUE(-ENODEV); 611 612 pr->power.count = 0; 613 for (i = 0; i < ACPI_PROCESSOR_MAX_POWER; i++) 614 memset(&(pr->power.states[i]), 0, 615 sizeof(struct acpi_processor_cx)); 616 617 status = acpi_evaluate_object(pr->handle, "_CST", NULL, &buffer); 618 if (ACPI_FAILURE(status)) { 619 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No _CST, giving up\n")); 620 return_VALUE(-ENODEV); 621 } 622 623 cst = (union acpi_object *)buffer.pointer; 624 625 /* There must be at least 2 elements */ 626 if (!cst || (cst->type != ACPI_TYPE_PACKAGE) || cst->package.count < 2) { 627 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 628 "not enough elements in _CST\n")); 629 status = -EFAULT; 630 goto end; 631 } 632 633 count = cst->package.elements[0].integer.value; 634 635 /* Validate number of power states. */ 636 if (count < 1 || count != cst->package.count - 1) { 637 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 638 "count given by _CST is not valid\n")); 639 status = -EFAULT; 640 goto end; 641 } 642 643 /* We support up to ACPI_PROCESSOR_MAX_POWER. */ 644 if (count > ACPI_PROCESSOR_MAX_POWER) { 645 printk(KERN_WARNING 646 "Limiting number of power states to max (%d)\n", 647 ACPI_PROCESSOR_MAX_POWER); 648 printk(KERN_WARNING 649 "Please increase ACPI_PROCESSOR_MAX_POWER if needed.\n"); 650 count = ACPI_PROCESSOR_MAX_POWER; 651 } 652 653 /* Tell driver that at least _CST is supported. */ 654 pr->flags.has_cst = 1; 655 656 for (i = 1; i <= count; i++) { 657 union acpi_object *element; 658 union acpi_object *obj; 659 struct acpi_power_register *reg; 660 struct acpi_processor_cx cx; 661 662 memset(&cx, 0, sizeof(cx)); 663 664 element = (union acpi_object *)&(cst->package.elements[i]); 665 if (element->type != ACPI_TYPE_PACKAGE) 666 continue; 667 668 if (element->package.count != 4) 669 continue; 670 671 obj = (union acpi_object *)&(element->package.elements[0]); 672 673 if (obj->type != ACPI_TYPE_BUFFER) 674 continue; 675 676 reg = (struct acpi_power_register *)obj->buffer.pointer; 677 678 if (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO && 679 (reg->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE)) 680 continue; 681 682 cx.address = (reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) ? 683 0 : reg->address; 684 685 /* There should be an easy way to extract an integer... */ 686 obj = (union acpi_object *)&(element->package.elements[1]); 687 if (obj->type != ACPI_TYPE_INTEGER) 688 continue; 689 690 cx.type = obj->integer.value; 691 692 if ((cx.type != ACPI_STATE_C1) && 693 (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO)) 694 continue; 695 696 if ((cx.type < ACPI_STATE_C1) || (cx.type > ACPI_STATE_C3)) 697 continue; 698 699 obj = (union acpi_object *)&(element->package.elements[2]); 700 if (obj->type != ACPI_TYPE_INTEGER) 701 continue; 702 703 cx.latency = obj->integer.value; 704 705 obj = (union acpi_object *)&(element->package.elements[3]); 706 if (obj->type != ACPI_TYPE_INTEGER) 707 continue; 708 709 cx.power = obj->integer.value; 710 711 (pr->power.count)++; 712 memcpy(&(pr->power.states[pr->power.count]), &cx, sizeof(cx)); 713 } 714 715 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d power states\n", 716 pr->power.count)); 717 718 /* Validate number of power states discovered */ 719 if (pr->power.count < 2) 720 status = -EFAULT; 721 722 end: 723 acpi_os_free(buffer.pointer); 724 725 return_VALUE(status); 726 } 727 728 static void acpi_processor_power_verify_c2(struct acpi_processor_cx *cx) 729 { 730 ACPI_FUNCTION_TRACE("acpi_processor_get_power_verify_c2"); 731 732 if (!cx->address) 733 return_VOID; 734 735 /* 736 * C2 latency must be less than or equal to 100 737 * microseconds. 738 */ 739 else if (cx->latency > ACPI_PROCESSOR_MAX_C2_LATENCY) { 740 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 741 "latency too large [%d]\n", cx->latency)); 742 return_VOID; 743 } 744 745 /* 746 * Otherwise we've met all of our C2 requirements. 747 * Normalize the C2 latency to expidite policy 748 */ 749 cx->valid = 1; 750 cx->latency_ticks = US_TO_PM_TIMER_TICKS(cx->latency); 751 752 return_VOID; 753 } 754 755 static void acpi_processor_power_verify_c3(struct acpi_processor *pr, 756 struct acpi_processor_cx *cx) 757 { 758 static int bm_check_flag; 759 760 ACPI_FUNCTION_TRACE("acpi_processor_get_power_verify_c3"); 761 762 if (!cx->address) 763 return_VOID; 764 765 /* 766 * C3 latency must be less than or equal to 1000 767 * microseconds. 768 */ 769 else if (cx->latency > ACPI_PROCESSOR_MAX_C3_LATENCY) { 770 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 771 "latency too large [%d]\n", cx->latency)); 772 return_VOID; 773 } 774 775 /* 776 * PIIX4 Erratum #18: We don't support C3 when Type-F (fast) 777 * DMA transfers are used by any ISA device to avoid livelock. 778 * Note that we could disable Type-F DMA (as recommended by 779 * the erratum), but this is known to disrupt certain ISA 780 * devices thus we take the conservative approach. 781 */ 782 else if (errata.piix4.fdma) { 783 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 784 "C3 not supported on PIIX4 with Type-F DMA\n")); 785 return_VOID; 786 } 787 788 /* All the logic here assumes flags.bm_check is same across all CPUs */ 789 if (!bm_check_flag) { 790 /* Determine whether bm_check is needed based on CPU */ 791 acpi_processor_power_init_bm_check(&(pr->flags), pr->id); 792 bm_check_flag = pr->flags.bm_check; 793 } else { 794 pr->flags.bm_check = bm_check_flag; 795 } 796 797 if (pr->flags.bm_check) { 798 /* bus mastering control is necessary */ 799 if (!pr->flags.bm_control) { 800 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 801 "C3 support requires bus mastering control\n")); 802 return_VOID; 803 } 804 } else { 805 /* 806 * WBINVD should be set in fadt, for C3 state to be 807 * supported on when bm_check is not required. 808 */ 809 if (acpi_fadt.wb_invd != 1) { 810 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 811 "Cache invalidation should work properly" 812 " for C3 to be enabled on SMP systems\n")); 813 return_VOID; 814 } 815 acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 816 0, ACPI_MTX_DO_NOT_LOCK); 817 } 818 819 /* 820 * Otherwise we've met all of our C3 requirements. 821 * Normalize the C3 latency to expidite policy. Enable 822 * checking of bus mastering status (bm_check) so we can 823 * use this in our C3 policy 824 */ 825 cx->valid = 1; 826 cx->latency_ticks = US_TO_PM_TIMER_TICKS(cx->latency); 827 828 return_VOID; 829 } 830 831 static int acpi_processor_power_verify(struct acpi_processor *pr) 832 { 833 unsigned int i; 834 unsigned int working = 0; 835 836 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { 837 struct acpi_processor_cx *cx = &pr->power.states[i]; 838 839 switch (cx->type) { 840 case ACPI_STATE_C1: 841 cx->valid = 1; 842 break; 843 844 case ACPI_STATE_C2: 845 acpi_processor_power_verify_c2(cx); 846 break; 847 848 case ACPI_STATE_C3: 849 acpi_processor_power_verify_c3(pr, cx); 850 break; 851 } 852 853 if (cx->valid) 854 working++; 855 } 856 857 return (working); 858 } 859 860 static int acpi_processor_get_power_info(struct acpi_processor *pr) 861 { 862 unsigned int i; 863 int result; 864 865 ACPI_FUNCTION_TRACE("acpi_processor_get_power_info"); 866 867 /* NOTE: the idle thread may not be running while calling 868 * this function */ 869 870 result = acpi_processor_get_power_info_cst(pr); 871 if (result == -ENODEV) 872 result = acpi_processor_get_power_info_fadt(pr); 873 874 if ((result) || (acpi_processor_power_verify(pr) < 2)) 875 result = acpi_processor_get_power_info_default_c1(pr); 876 877 /* 878 * Set Default Policy 879 * ------------------ 880 * Now that we know which states are supported, set the default 881 * policy. Note that this policy can be changed dynamically 882 * (e.g. encourage deeper sleeps to conserve battery life when 883 * not on AC). 884 */ 885 result = acpi_processor_set_power_policy(pr); 886 if (result) 887 return_VALUE(result); 888 889 /* 890 * if one state of type C2 or C3 is available, mark this 891 * CPU as being "idle manageable" 892 */ 893 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { 894 if (pr->power.states[i].valid) { 895 pr->power.count = i; 896 if (pr->power.states[i].type >= ACPI_STATE_C2) 897 pr->flags.power = 1; 898 } 899 } 900 901 return_VALUE(0); 902 } 903 904 int acpi_processor_cst_has_changed(struct acpi_processor *pr) 905 { 906 int result = 0; 907 908 ACPI_FUNCTION_TRACE("acpi_processor_cst_has_changed"); 909 910 if (!pr) 911 return_VALUE(-EINVAL); 912 913 if (nocst) { 914 return_VALUE(-ENODEV); 915 } 916 917 if (!pr->flags.power_setup_done) 918 return_VALUE(-ENODEV); 919 920 /* Fall back to the default idle loop */ 921 pm_idle = pm_idle_save; 922 synchronize_sched(); /* Relies on interrupts forcing exit from idle. */ 923 924 pr->flags.power = 0; 925 result = acpi_processor_get_power_info(pr); 926 if ((pr->flags.power == 1) && (pr->flags.power_setup_done)) 927 pm_idle = acpi_processor_idle; 928 929 return_VALUE(result); 930 } 931 932 /* proc interface */ 933 934 static int acpi_processor_power_seq_show(struct seq_file *seq, void *offset) 935 { 936 struct acpi_processor *pr = (struct acpi_processor *)seq->private; 937 unsigned int i; 938 939 ACPI_FUNCTION_TRACE("acpi_processor_power_seq_show"); 940 941 if (!pr) 942 goto end; 943 944 seq_printf(seq, "active state: C%zd\n" 945 "max_cstate: C%d\n" 946 "bus master activity: %08x\n", 947 pr->power.state ? pr->power.state - pr->power.states : 0, 948 max_cstate, (unsigned)pr->power.bm_activity); 949 950 seq_puts(seq, "states:\n"); 951 952 for (i = 1; i <= pr->power.count; i++) { 953 seq_printf(seq, " %cC%d: ", 954 (&pr->power.states[i] == 955 pr->power.state ? '*' : ' '), i); 956 957 if (!pr->power.states[i].valid) { 958 seq_puts(seq, "<not supported>\n"); 959 continue; 960 } 961 962 switch (pr->power.states[i].type) { 963 case ACPI_STATE_C1: 964 seq_printf(seq, "type[C1] "); 965 break; 966 case ACPI_STATE_C2: 967 seq_printf(seq, "type[C2] "); 968 break; 969 case ACPI_STATE_C3: 970 seq_printf(seq, "type[C3] "); 971 break; 972 default: 973 seq_printf(seq, "type[--] "); 974 break; 975 } 976 977 if (pr->power.states[i].promotion.state) 978 seq_printf(seq, "promotion[C%zd] ", 979 (pr->power.states[i].promotion.state - 980 pr->power.states)); 981 else 982 seq_puts(seq, "promotion[--] "); 983 984 if (pr->power.states[i].demotion.state) 985 seq_printf(seq, "demotion[C%zd] ", 986 (pr->power.states[i].demotion.state - 987 pr->power.states)); 988 else 989 seq_puts(seq, "demotion[--] "); 990 991 seq_printf(seq, "latency[%03d] usage[%08d]\n", 992 pr->power.states[i].latency, 993 pr->power.states[i].usage); 994 } 995 996 end: 997 return_VALUE(0); 998 } 999 1000 static int acpi_processor_power_open_fs(struct inode *inode, struct file *file) 1001 { 1002 return single_open(file, acpi_processor_power_seq_show, 1003 PDE(inode)->data); 1004 } 1005 1006 static struct file_operations acpi_processor_power_fops = { 1007 .open = acpi_processor_power_open_fs, 1008 .read = seq_read, 1009 .llseek = seq_lseek, 1010 .release = single_release, 1011 }; 1012 1013 int acpi_processor_power_init(struct acpi_processor *pr, 1014 struct acpi_device *device) 1015 { 1016 acpi_status status = 0; 1017 static int first_run = 0; 1018 struct proc_dir_entry *entry = NULL; 1019 unsigned int i; 1020 1021 ACPI_FUNCTION_TRACE("acpi_processor_power_init"); 1022 1023 if (!first_run) { 1024 dmi_check_system(processor_power_dmi_table); 1025 if (max_cstate < ACPI_C_STATES_MAX) 1026 printk(KERN_NOTICE 1027 "ACPI: processor limited to max C-state %d\n", 1028 max_cstate); 1029 first_run++; 1030 } 1031 1032 if (!pr) 1033 return_VALUE(-EINVAL); 1034 1035 if (acpi_fadt.cst_cnt && !nocst) { 1036 status = 1037 acpi_os_write_port(acpi_fadt.smi_cmd, acpi_fadt.cst_cnt, 8); 1038 if (ACPI_FAILURE(status)) { 1039 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 1040 "Notifying BIOS of _CST ability failed\n")); 1041 } 1042 } 1043 1044 acpi_processor_power_init_pdc(&(pr->power), pr->id); 1045 acpi_processor_set_pdc(pr, pr->power.pdc); 1046 acpi_processor_get_power_info(pr); 1047 1048 /* 1049 * Install the idle handler if processor power management is supported. 1050 * Note that we use previously set idle handler will be used on 1051 * platforms that only support C1. 1052 */ 1053 if ((pr->flags.power) && (!boot_option_idle_override)) { 1054 printk(KERN_INFO PREFIX "CPU%d (power states:", pr->id); 1055 for (i = 1; i <= pr->power.count; i++) 1056 if (pr->power.states[i].valid) 1057 printk(" C%d[C%d]", i, 1058 pr->power.states[i].type); 1059 printk(")\n"); 1060 1061 if (pr->id == 0) { 1062 pm_idle_save = pm_idle; 1063 pm_idle = acpi_processor_idle; 1064 } 1065 } 1066 1067 /* 'power' [R] */ 1068 entry = create_proc_entry(ACPI_PROCESSOR_FILE_POWER, 1069 S_IRUGO, acpi_device_dir(device)); 1070 if (!entry) 1071 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 1072 "Unable to create '%s' fs entry\n", 1073 ACPI_PROCESSOR_FILE_POWER)); 1074 else { 1075 entry->proc_fops = &acpi_processor_power_fops; 1076 entry->data = acpi_driver_data(device); 1077 entry->owner = THIS_MODULE; 1078 } 1079 1080 pr->flags.power_setup_done = 1; 1081 1082 return_VALUE(0); 1083 } 1084 1085 int acpi_processor_power_exit(struct acpi_processor *pr, 1086 struct acpi_device *device) 1087 { 1088 ACPI_FUNCTION_TRACE("acpi_processor_power_exit"); 1089 1090 pr->flags.power_setup_done = 0; 1091 1092 if (acpi_device_dir(device)) 1093 remove_proc_entry(ACPI_PROCESSOR_FILE_POWER, 1094 acpi_device_dir(device)); 1095 1096 /* Unregister the idle handler when processor #0 is removed. */ 1097 if (pr->id == 0) { 1098 pm_idle = pm_idle_save; 1099 1100 /* 1101 * We are about to unload the current idle thread pm callback 1102 * (pm_idle), Wait for all processors to update cached/local 1103 * copies of pm_idle before proceeding. 1104 */ 1105 cpu_idle_wait(); 1106 } 1107 1108 return_VALUE(0); 1109 } 1110