1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * sleep.c - ACPI sleep support. 4 * 5 * Copyright (c) 2005 Alexey Starikovskiy <alexey.y.starikovskiy@intel.com> 6 * Copyright (c) 2004 David Shaohua Li <shaohua.li@intel.com> 7 * Copyright (c) 2000-2003 Patrick Mochel 8 * Copyright (c) 2003 Open Source Development Lab 9 */ 10 11#include <linux/delay.h> 12#include <linux/irq.h> 13#include <linux/dmi.h> 14#include <linux/device.h> 15#include <linux/interrupt.h> 16#include <linux/suspend.h> 17#include <linux/reboot.h> 18#include <linux/acpi.h> 19#include <linux/module.h> 20#include <linux/syscore_ops.h> 21#include <asm/io.h> 22#include <trace/events/power.h> 23 24#include "internal.h" 25#include "sleep.h" 26 27/* 28 * Some HW-full platforms do not have _S5, so they may need 29 * to leverage efi power off for a shutdown. 30 */ 31bool acpi_no_s5; 32static u8 sleep_states[ACPI_S_STATE_COUNT]; 33 34static void acpi_sleep_tts_switch(u32 acpi_state) 35{ 36 acpi_status status; 37 38 status = acpi_execute_simple_method(NULL, "\\_TTS", acpi_state); 39 if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { 40 /* 41 * OS can't evaluate the _TTS object correctly. Some warning 42 * message will be printed. But it won't break anything. 43 */ 44 printk(KERN_NOTICE "Failure in evaluating _TTS object\n"); 45 } 46} 47 48static int tts_notify_reboot(struct notifier_block *this, 49 unsigned long code, void *x) 50{ 51 acpi_sleep_tts_switch(ACPI_STATE_S5); 52 return NOTIFY_DONE; 53} 54 55static struct notifier_block tts_notifier = { 56 .notifier_call = tts_notify_reboot, 57 .next = NULL, 58 .priority = 0, 59}; 60 61static int acpi_sleep_prepare(u32 acpi_state) 62{ 63#ifdef CONFIG_ACPI_SLEEP 64 unsigned long acpi_wakeup_address; 65 66 /* do we have a wakeup address for S2 and S3? */ 67 if (acpi_state == ACPI_STATE_S3) { 68 acpi_wakeup_address = acpi_get_wakeup_address(); 69 if (!acpi_wakeup_address) 70 return -EFAULT; 71 acpi_set_waking_vector(acpi_wakeup_address); 72 73 } 74 ACPI_FLUSH_CPU_CACHE(); 75#endif 76 printk(KERN_INFO PREFIX "Preparing to enter system sleep state S%d\n", 77 acpi_state); 78 acpi_enable_wakeup_devices(acpi_state); 79 acpi_enter_sleep_state_prep(acpi_state); 80 return 0; 81} 82 83bool acpi_sleep_state_supported(u8 sleep_state) 84{ 85 acpi_status status; 86 u8 type_a, type_b; 87 88 status = acpi_get_sleep_type_data(sleep_state, &type_a, &type_b); 89 return ACPI_SUCCESS(status) && (!acpi_gbl_reduced_hardware 90 || (acpi_gbl_FADT.sleep_control.address 91 && acpi_gbl_FADT.sleep_status.address)); 92} 93 94#ifdef CONFIG_ACPI_SLEEP 95static bool sleep_no_lps0 __read_mostly; 96module_param(sleep_no_lps0, bool, 0644); 97MODULE_PARM_DESC(sleep_no_lps0, "Do not use the special LPS0 device interface"); 98 99static u32 acpi_target_sleep_state = ACPI_STATE_S0; 100 101u32 acpi_target_system_state(void) 102{ 103 return acpi_target_sleep_state; 104} 105EXPORT_SYMBOL_GPL(acpi_target_system_state); 106 107static bool pwr_btn_event_pending; 108 109/* 110 * The ACPI specification wants us to save NVS memory regions during hibernation 111 * and to restore them during the subsequent resume. Windows does that also for 112 * suspend to RAM. However, it is known that this mechanism does not work on 113 * all machines, so we allow the user to disable it with the help of the 114 * 'acpi_sleep=nonvs' kernel command line option. 115 */ 116static bool nvs_nosave; 117 118void __init acpi_nvs_nosave(void) 119{ 120 nvs_nosave = true; 121} 122 123/* 124 * The ACPI specification wants us to save NVS memory regions during hibernation 125 * but says nothing about saving NVS during S3. Not all versions of Windows 126 * save NVS on S3 suspend either, and it is clear that not all systems need 127 * NVS to be saved at S3 time. To improve suspend/resume time, allow the 128 * user to disable saving NVS on S3 if their system does not require it, but 129 * continue to save/restore NVS for S4 as specified. 130 */ 131static bool nvs_nosave_s3; 132 133void __init acpi_nvs_nosave_s3(void) 134{ 135 nvs_nosave_s3 = true; 136} 137 138static int __init init_nvs_save_s3(const struct dmi_system_id *d) 139{ 140 nvs_nosave_s3 = false; 141 return 0; 142} 143 144/* 145 * ACPI 1.0 wants us to execute _PTS before suspending devices, so we allow the 146 * user to request that behavior by using the 'acpi_old_suspend_ordering' 147 * kernel command line option that causes the following variable to be set. 148 */ 149static bool old_suspend_ordering; 150 151void __init acpi_old_suspend_ordering(void) 152{ 153 old_suspend_ordering = true; 154} 155 156static int __init init_old_suspend_ordering(const struct dmi_system_id *d) 157{ 158 acpi_old_suspend_ordering(); 159 return 0; 160} 161 162static int __init init_nvs_nosave(const struct dmi_system_id *d) 163{ 164 acpi_nvs_nosave(); 165 return 0; 166} 167 168static bool acpi_sleep_default_s3; 169 170static int __init init_default_s3(const struct dmi_system_id *d) 171{ 172 acpi_sleep_default_s3 = true; 173 return 0; 174} 175 176static const struct dmi_system_id acpisleep_dmi_table[] __initconst = { 177 { 178 .callback = init_old_suspend_ordering, 179 .ident = "Abit KN9 (nForce4 variant)", 180 .matches = { 181 DMI_MATCH(DMI_BOARD_VENDOR, "http://www.abit.com.tw/"), 182 DMI_MATCH(DMI_BOARD_NAME, "KN9 Series(NF-CK804)"), 183 }, 184 }, 185 { 186 .callback = init_old_suspend_ordering, 187 .ident = "HP xw4600 Workstation", 188 .matches = { 189 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 190 DMI_MATCH(DMI_PRODUCT_NAME, "HP xw4600 Workstation"), 191 }, 192 }, 193 { 194 .callback = init_old_suspend_ordering, 195 .ident = "Asus Pundit P1-AH2 (M2N8L motherboard)", 196 .matches = { 197 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTek Computer INC."), 198 DMI_MATCH(DMI_BOARD_NAME, "M2N8L"), 199 }, 200 }, 201 { 202 .callback = init_old_suspend_ordering, 203 .ident = "Panasonic CF51-2L", 204 .matches = { 205 DMI_MATCH(DMI_BOARD_VENDOR, 206 "Matsushita Electric Industrial Co.,Ltd."), 207 DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"), 208 }, 209 }, 210 { 211 .callback = init_nvs_nosave, 212 .ident = "Sony Vaio VGN-FW41E_H", 213 .matches = { 214 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 215 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW41E_H"), 216 }, 217 }, 218 { 219 .callback = init_nvs_nosave, 220 .ident = "Sony Vaio VGN-FW21E", 221 .matches = { 222 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 223 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW21E"), 224 }, 225 }, 226 { 227 .callback = init_nvs_nosave, 228 .ident = "Sony Vaio VGN-FW21M", 229 .matches = { 230 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 231 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW21M"), 232 }, 233 }, 234 { 235 .callback = init_nvs_nosave, 236 .ident = "Sony Vaio VPCEB17FX", 237 .matches = { 238 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 239 DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB17FX"), 240 }, 241 }, 242 { 243 .callback = init_nvs_nosave, 244 .ident = "Sony Vaio VGN-SR11M", 245 .matches = { 246 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 247 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR11M"), 248 }, 249 }, 250 { 251 .callback = init_nvs_nosave, 252 .ident = "Everex StepNote Series", 253 .matches = { 254 DMI_MATCH(DMI_SYS_VENDOR, "Everex Systems, Inc."), 255 DMI_MATCH(DMI_PRODUCT_NAME, "Everex StepNote Series"), 256 }, 257 }, 258 { 259 .callback = init_nvs_nosave, 260 .ident = "Sony Vaio VPCEB1Z1E", 261 .matches = { 262 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 263 DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1Z1E"), 264 }, 265 }, 266 { 267 .callback = init_nvs_nosave, 268 .ident = "Sony Vaio VGN-NW130D", 269 .matches = { 270 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 271 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-NW130D"), 272 }, 273 }, 274 { 275 .callback = init_nvs_nosave, 276 .ident = "Sony Vaio VPCCW29FX", 277 .matches = { 278 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 279 DMI_MATCH(DMI_PRODUCT_NAME, "VPCCW29FX"), 280 }, 281 }, 282 { 283 .callback = init_nvs_nosave, 284 .ident = "Averatec AV1020-ED2", 285 .matches = { 286 DMI_MATCH(DMI_SYS_VENDOR, "AVERATEC"), 287 DMI_MATCH(DMI_PRODUCT_NAME, "1000 Series"), 288 }, 289 }, 290 { 291 .callback = init_old_suspend_ordering, 292 .ident = "Asus A8N-SLI DELUXE", 293 .matches = { 294 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), 295 DMI_MATCH(DMI_BOARD_NAME, "A8N-SLI DELUXE"), 296 }, 297 }, 298 { 299 .callback = init_old_suspend_ordering, 300 .ident = "Asus A8N-SLI Premium", 301 .matches = { 302 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), 303 DMI_MATCH(DMI_BOARD_NAME, "A8N-SLI Premium"), 304 }, 305 }, 306 { 307 .callback = init_nvs_nosave, 308 .ident = "Sony Vaio VGN-SR26GN_P", 309 .matches = { 310 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 311 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR26GN_P"), 312 }, 313 }, 314 { 315 .callback = init_nvs_nosave, 316 .ident = "Sony Vaio VPCEB1S1E", 317 .matches = { 318 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 319 DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1S1E"), 320 }, 321 }, 322 { 323 .callback = init_nvs_nosave, 324 .ident = "Sony Vaio VGN-FW520F", 325 .matches = { 326 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 327 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW520F"), 328 }, 329 }, 330 { 331 .callback = init_nvs_nosave, 332 .ident = "Asus K54C", 333 .matches = { 334 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), 335 DMI_MATCH(DMI_PRODUCT_NAME, "K54C"), 336 }, 337 }, 338 { 339 .callback = init_nvs_nosave, 340 .ident = "Asus K54HR", 341 .matches = { 342 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), 343 DMI_MATCH(DMI_PRODUCT_NAME, "K54HR"), 344 }, 345 }, 346 { 347 .callback = init_nvs_save_s3, 348 .ident = "Asus 1025C", 349 .matches = { 350 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 351 DMI_MATCH(DMI_PRODUCT_NAME, "1025C"), 352 }, 353 }, 354 /* 355 * https://bugzilla.kernel.org/show_bug.cgi?id=189431 356 * Lenovo G50-45 is a platform later than 2012, but needs nvs memory 357 * saving during S3. 358 */ 359 { 360 .callback = init_nvs_save_s3, 361 .ident = "Lenovo G50-45", 362 .matches = { 363 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 364 DMI_MATCH(DMI_PRODUCT_NAME, "80E3"), 365 }, 366 }, 367 { 368 .callback = init_nvs_save_s3, 369 .ident = "Lenovo G40-45", 370 .matches = { 371 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 372 DMI_MATCH(DMI_PRODUCT_NAME, "80E1"), 373 }, 374 }, 375 /* 376 * ThinkPad X1 Tablet(2016) cannot do suspend-to-idle using 377 * the Low Power S0 Idle firmware interface (see 378 * https://bugzilla.kernel.org/show_bug.cgi?id=199057). 379 */ 380 { 381 .callback = init_default_s3, 382 .ident = "ThinkPad X1 Tablet(2016)", 383 .matches = { 384 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 385 DMI_MATCH(DMI_PRODUCT_NAME, "20GGA00L00"), 386 }, 387 }, 388 /* 389 * ASUS B1400CEAE hangs on resume from suspend (see 390 * https://bugzilla.kernel.org/show_bug.cgi?id=215742). 391 */ 392 { 393 .callback = init_default_s3, 394 .ident = "ASUS B1400CEAE", 395 .matches = { 396 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 397 DMI_MATCH(DMI_PRODUCT_NAME, "ASUS EXPERTBOOK B1400CEAE"), 398 }, 399 }, 400 {}, 401}; 402 403static bool ignore_blacklist; 404 405void __init acpi_sleep_no_blacklist(void) 406{ 407 ignore_blacklist = true; 408} 409 410static void __init acpi_sleep_dmi_check(void) 411{ 412 if (ignore_blacklist) 413 return; 414 415 if (dmi_get_bios_year() >= 2012) 416 acpi_nvs_nosave_s3(); 417 418 dmi_check_system(acpisleep_dmi_table); 419} 420 421/** 422 * acpi_pm_freeze - Disable the GPEs and suspend EC transactions. 423 */ 424static int acpi_pm_freeze(void) 425{ 426 acpi_disable_all_gpes(); 427 acpi_os_wait_events_complete(); 428 acpi_ec_block_transactions(); 429 return 0; 430} 431 432/** 433 * acpi_pre_suspend - Enable wakeup devices, "freeze" EC and save NVS. 434 */ 435static int acpi_pm_pre_suspend(void) 436{ 437 acpi_pm_freeze(); 438 return suspend_nvs_save(); 439} 440 441/** 442 * __acpi_pm_prepare - Prepare the platform to enter the target state. 443 * 444 * If necessary, set the firmware waking vector and do arch-specific 445 * nastiness to get the wakeup code to the waking vector. 446 */ 447static int __acpi_pm_prepare(void) 448{ 449 int error = acpi_sleep_prepare(acpi_target_sleep_state); 450 if (error) 451 acpi_target_sleep_state = ACPI_STATE_S0; 452 453 return error; 454} 455 456/** 457 * acpi_pm_prepare - Prepare the platform to enter the target sleep 458 * state and disable the GPEs. 459 */ 460static int acpi_pm_prepare(void) 461{ 462 int error = __acpi_pm_prepare(); 463 if (!error) 464 error = acpi_pm_pre_suspend(); 465 466 return error; 467} 468 469/** 470 * acpi_pm_finish - Instruct the platform to leave a sleep state. 471 * 472 * This is called after we wake back up (or if entering the sleep state 473 * failed). 474 */ 475static void acpi_pm_finish(void) 476{ 477 struct acpi_device *pwr_btn_adev; 478 u32 acpi_state = acpi_target_sleep_state; 479 480 acpi_ec_unblock_transactions(); 481 suspend_nvs_free(); 482 483 if (acpi_state == ACPI_STATE_S0) 484 return; 485 486 printk(KERN_INFO PREFIX "Waking up from system sleep state S%d\n", 487 acpi_state); 488 acpi_disable_wakeup_devices(acpi_state); 489 acpi_leave_sleep_state(acpi_state); 490 491 /* reset firmware waking vector */ 492 acpi_set_waking_vector(0); 493 494 acpi_target_sleep_state = ACPI_STATE_S0; 495 496 acpi_resume_power_resources(); 497 498 /* If we were woken with the fixed power button, provide a small 499 * hint to userspace in the form of a wakeup event on the fixed power 500 * button device (if it can be found). 501 * 502 * We delay the event generation til now, as the PM layer requires 503 * timekeeping to be running before we generate events. */ 504 if (!pwr_btn_event_pending) 505 return; 506 507 pwr_btn_event_pending = false; 508 pwr_btn_adev = acpi_dev_get_first_match_dev(ACPI_BUTTON_HID_POWERF, 509 NULL, -1); 510 if (pwr_btn_adev) { 511 pm_wakeup_event(&pwr_btn_adev->dev, 0); 512 acpi_dev_put(pwr_btn_adev); 513 } 514} 515 516/** 517 * acpi_pm_start - Start system PM transition. 518 */ 519static void acpi_pm_start(u32 acpi_state) 520{ 521 acpi_target_sleep_state = acpi_state; 522 acpi_sleep_tts_switch(acpi_target_sleep_state); 523 acpi_scan_lock_acquire(); 524} 525 526/** 527 * acpi_pm_end - Finish up system PM transition. 528 */ 529static void acpi_pm_end(void) 530{ 531 acpi_turn_off_unused_power_resources(); 532 acpi_scan_lock_release(); 533 /* 534 * This is necessary in case acpi_pm_finish() is not called during a 535 * failing transition to a sleep state. 536 */ 537 acpi_target_sleep_state = ACPI_STATE_S0; 538 acpi_sleep_tts_switch(acpi_target_sleep_state); 539} 540#else /* !CONFIG_ACPI_SLEEP */ 541#define sleep_no_lps0 (1) 542#define acpi_target_sleep_state ACPI_STATE_S0 543#define acpi_sleep_default_s3 (1) 544static inline void acpi_sleep_dmi_check(void) {} 545#endif /* CONFIG_ACPI_SLEEP */ 546 547#ifdef CONFIG_SUSPEND 548static u32 acpi_suspend_states[] = { 549 [PM_SUSPEND_ON] = ACPI_STATE_S0, 550 [PM_SUSPEND_STANDBY] = ACPI_STATE_S1, 551 [PM_SUSPEND_MEM] = ACPI_STATE_S3, 552 [PM_SUSPEND_MAX] = ACPI_STATE_S5 553}; 554 555/** 556 * acpi_suspend_begin - Set the target system sleep state to the state 557 * associated with given @pm_state, if supported. 558 */ 559static int acpi_suspend_begin(suspend_state_t pm_state) 560{ 561 u32 acpi_state = acpi_suspend_states[pm_state]; 562 int error; 563 564 error = (nvs_nosave || nvs_nosave_s3) ? 0 : suspend_nvs_alloc(); 565 if (error) 566 return error; 567 568 if (!sleep_states[acpi_state]) { 569 pr_err("ACPI does not support sleep state S%u\n", acpi_state); 570 return -ENOSYS; 571 } 572 if (acpi_state > ACPI_STATE_S1) 573 pm_set_suspend_via_firmware(); 574 575 acpi_pm_start(acpi_state); 576 return 0; 577} 578 579/** 580 * acpi_suspend_enter - Actually enter a sleep state. 581 * @pm_state: ignored 582 * 583 * Flush caches and go to sleep. For STR we have to call arch-specific 584 * assembly, which in turn call acpi_enter_sleep_state(). 585 * It's unfortunate, but it works. Please fix if you're feeling frisky. 586 */ 587static int acpi_suspend_enter(suspend_state_t pm_state) 588{ 589 acpi_status status = AE_OK; 590 u32 acpi_state = acpi_target_sleep_state; 591 int error; 592 593 ACPI_FLUSH_CPU_CACHE(); 594 595 trace_suspend_resume(TPS("acpi_suspend"), acpi_state, true); 596 switch (acpi_state) { 597 case ACPI_STATE_S1: 598 barrier(); 599 status = acpi_enter_sleep_state(acpi_state); 600 break; 601 602 case ACPI_STATE_S3: 603 if (!acpi_suspend_lowlevel) 604 return -ENOSYS; 605 error = acpi_suspend_lowlevel(); 606 if (error) 607 return error; 608 pr_info(PREFIX "Low-level resume complete\n"); 609 pm_set_resume_via_firmware(); 610 break; 611 } 612 trace_suspend_resume(TPS("acpi_suspend"), acpi_state, false); 613 614 /* This violates the spec but is required for bug compatibility. */ 615 acpi_write_bit_register(ACPI_BITREG_SCI_ENABLE, 1); 616 617 /* Reprogram control registers */ 618 acpi_leave_sleep_state_prep(acpi_state); 619 620 /* ACPI 3.0 specs (P62) says that it's the responsibility 621 * of the OSPM to clear the status bit [ implying that the 622 * POWER_BUTTON event should not reach userspace ] 623 * 624 * However, we do generate a small hint for userspace in the form of 625 * a wakeup event. We flag this condition for now and generate the 626 * event later, as we're currently too early in resume to be able to 627 * generate wakeup events. 628 */ 629 if (ACPI_SUCCESS(status) && (acpi_state == ACPI_STATE_S3)) { 630 acpi_event_status pwr_btn_status = ACPI_EVENT_FLAG_DISABLED; 631 632 acpi_get_event_status(ACPI_EVENT_POWER_BUTTON, &pwr_btn_status); 633 634 if (pwr_btn_status & ACPI_EVENT_FLAG_STATUS_SET) { 635 acpi_clear_event(ACPI_EVENT_POWER_BUTTON); 636 /* Flag for later */ 637 pwr_btn_event_pending = true; 638 } 639 } 640 641 /* 642 * Disable and clear GPE status before interrupt is enabled. Some GPEs 643 * (like wakeup GPE) haven't handler, this can avoid such GPE misfire. 644 * acpi_leave_sleep_state will reenable specific GPEs later 645 */ 646 acpi_disable_all_gpes(); 647 /* Allow EC transactions to happen. */ 648 acpi_ec_unblock_transactions(); 649 650 suspend_nvs_restore(); 651 652 return ACPI_SUCCESS(status) ? 0 : -EFAULT; 653} 654 655static int acpi_suspend_state_valid(suspend_state_t pm_state) 656{ 657 u32 acpi_state; 658 659 switch (pm_state) { 660 case PM_SUSPEND_ON: 661 case PM_SUSPEND_STANDBY: 662 case PM_SUSPEND_MEM: 663 acpi_state = acpi_suspend_states[pm_state]; 664 665 return sleep_states[acpi_state]; 666 default: 667 return 0; 668 } 669} 670 671static const struct platform_suspend_ops acpi_suspend_ops = { 672 .valid = acpi_suspend_state_valid, 673 .begin = acpi_suspend_begin, 674 .prepare_late = acpi_pm_prepare, 675 .enter = acpi_suspend_enter, 676 .wake = acpi_pm_finish, 677 .end = acpi_pm_end, 678}; 679 680/** 681 * acpi_suspend_begin_old - Set the target system sleep state to the 682 * state associated with given @pm_state, if supported, and 683 * execute the _PTS control method. This function is used if the 684 * pre-ACPI 2.0 suspend ordering has been requested. 685 */ 686static int acpi_suspend_begin_old(suspend_state_t pm_state) 687{ 688 int error = acpi_suspend_begin(pm_state); 689 if (!error) 690 error = __acpi_pm_prepare(); 691 692 return error; 693} 694 695/* 696 * The following callbacks are used if the pre-ACPI 2.0 suspend ordering has 697 * been requested. 698 */ 699static const struct platform_suspend_ops acpi_suspend_ops_old = { 700 .valid = acpi_suspend_state_valid, 701 .begin = acpi_suspend_begin_old, 702 .prepare_late = acpi_pm_pre_suspend, 703 .enter = acpi_suspend_enter, 704 .wake = acpi_pm_finish, 705 .end = acpi_pm_end, 706 .recover = acpi_pm_finish, 707}; 708 709static bool s2idle_wakeup; 710 711/* 712 * On platforms supporting the Low Power S0 Idle interface there is an ACPI 713 * device object with the PNP0D80 compatible device ID (System Power Management 714 * Controller) and a specific _DSM method under it. That method, if present, 715 * can be used to indicate to the platform that the OS is transitioning into a 716 * low-power state in which certain types of activity are not desirable or that 717 * it is leaving such a state, which allows the platform to adjust its operation 718 * mode accordingly. 719 */ 720static const struct acpi_device_id lps0_device_ids[] = { 721 {"PNP0D80", }, 722 {"", }, 723}; 724 725#define ACPI_LPS0_DSM_UUID "c4eb40a0-6cd2-11e2-bcfd-0800200c9a66" 726 727#define ACPI_LPS0_GET_DEVICE_CONSTRAINTS 1 728#define ACPI_LPS0_SCREEN_OFF 3 729#define ACPI_LPS0_SCREEN_ON 4 730#define ACPI_LPS0_ENTRY 5 731#define ACPI_LPS0_EXIT 6 732 733static acpi_handle lps0_device_handle; 734static guid_t lps0_dsm_guid; 735static char lps0_dsm_func_mask; 736 737/* Device constraint entry structure */ 738struct lpi_device_info { 739 char *name; 740 int enabled; 741 union acpi_object *package; 742}; 743 744/* Constraint package structure */ 745struct lpi_device_constraint { 746 int uid; 747 int min_dstate; 748 int function_states; 749}; 750 751struct lpi_constraints { 752 acpi_handle handle; 753 int min_dstate; 754}; 755 756static struct lpi_constraints *lpi_constraints_table; 757static int lpi_constraints_table_size; 758 759static void lpi_device_get_constraints(void) 760{ 761 union acpi_object *out_obj; 762 int i; 763 764 out_obj = acpi_evaluate_dsm_typed(lps0_device_handle, &lps0_dsm_guid, 765 1, ACPI_LPS0_GET_DEVICE_CONSTRAINTS, 766 NULL, ACPI_TYPE_PACKAGE); 767 768 acpi_handle_debug(lps0_device_handle, "_DSM function 1 eval %s\n", 769 out_obj ? "successful" : "failed"); 770 771 if (!out_obj) 772 return; 773 774 lpi_constraints_table = kcalloc(out_obj->package.count, 775 sizeof(*lpi_constraints_table), 776 GFP_KERNEL); 777 if (!lpi_constraints_table) 778 goto free_acpi_buffer; 779 780 acpi_handle_debug(lps0_device_handle, "LPI: constraints list begin:\n"); 781 782 for (i = 0; i < out_obj->package.count; i++) { 783 struct lpi_constraints *constraint; 784 acpi_status status; 785 union acpi_object *package = &out_obj->package.elements[i]; 786 struct lpi_device_info info = { }; 787 int package_count = 0, j; 788 789 if (!package) 790 continue; 791 792 for (j = 0; j < package->package.count; ++j) { 793 union acpi_object *element = 794 &(package->package.elements[j]); 795 796 switch (element->type) { 797 case ACPI_TYPE_INTEGER: 798 info.enabled = element->integer.value; 799 break; 800 case ACPI_TYPE_STRING: 801 info.name = element->string.pointer; 802 break; 803 case ACPI_TYPE_PACKAGE: 804 package_count = element->package.count; 805 info.package = element->package.elements; 806 break; 807 } 808 } 809 810 if (!info.enabled || !info.package || !info.name) 811 continue; 812 813 constraint = &lpi_constraints_table[lpi_constraints_table_size]; 814 815 status = acpi_get_handle(NULL, info.name, &constraint->handle); 816 if (ACPI_FAILURE(status)) 817 continue; 818 819 acpi_handle_debug(lps0_device_handle, 820 "index:%d Name:%s\n", i, info.name); 821 822 constraint->min_dstate = -1; 823 824 for (j = 0; j < package_count; ++j) { 825 union acpi_object *info_obj = &info.package[j]; 826 union acpi_object *cnstr_pkg; 827 union acpi_object *obj; 828 struct lpi_device_constraint dev_info; 829 830 switch (info_obj->type) { 831 case ACPI_TYPE_INTEGER: 832 /* version */ 833 break; 834 case ACPI_TYPE_PACKAGE: 835 if (info_obj->package.count < 2) 836 break; 837 838 cnstr_pkg = info_obj->package.elements; 839 obj = &cnstr_pkg[0]; 840 dev_info.uid = obj->integer.value; 841 obj = &cnstr_pkg[1]; 842 dev_info.min_dstate = obj->integer.value; 843 844 acpi_handle_debug(lps0_device_handle, 845 "uid:%d min_dstate:%s\n", 846 dev_info.uid, 847 acpi_power_state_string(dev_info.min_dstate)); 848 849 constraint->min_dstate = dev_info.min_dstate; 850 break; 851 } 852 } 853 854 if (constraint->min_dstate < 0) { 855 acpi_handle_debug(lps0_device_handle, 856 "Incomplete constraint defined\n"); 857 continue; 858 } 859 860 lpi_constraints_table_size++; 861 } 862 863 acpi_handle_debug(lps0_device_handle, "LPI: constraints list end\n"); 864 865free_acpi_buffer: 866 ACPI_FREE(out_obj); 867} 868 869static void lpi_check_constraints(void) 870{ 871 int i; 872 873 for (i = 0; i < lpi_constraints_table_size; ++i) { 874 acpi_handle handle = lpi_constraints_table[i].handle; 875 struct acpi_device *adev; 876 877 if (!handle || acpi_bus_get_device(handle, &adev)) 878 continue; 879 880 acpi_handle_debug(handle, 881 "LPI: required min power state:%s current power state:%s\n", 882 acpi_power_state_string(lpi_constraints_table[i].min_dstate), 883 acpi_power_state_string(adev->power.state)); 884 885 if (!adev->flags.power_manageable) { 886 acpi_handle_info(handle, "LPI: Device not power manageable\n"); 887 lpi_constraints_table[i].handle = NULL; 888 continue; 889 } 890 891 if (adev->power.state < lpi_constraints_table[i].min_dstate) 892 acpi_handle_info(handle, 893 "LPI: Constraint not met; min power state:%s current power state:%s\n", 894 acpi_power_state_string(lpi_constraints_table[i].min_dstate), 895 acpi_power_state_string(adev->power.state)); 896 } 897} 898 899static void acpi_sleep_run_lps0_dsm(unsigned int func) 900{ 901 union acpi_object *out_obj; 902 903 if (!(lps0_dsm_func_mask & (1 << func))) 904 return; 905 906 out_obj = acpi_evaluate_dsm(lps0_device_handle, &lps0_dsm_guid, 1, func, NULL); 907 ACPI_FREE(out_obj); 908 909 acpi_handle_debug(lps0_device_handle, "_DSM function %u evaluation %s\n", 910 func, out_obj ? "successful" : "failed"); 911} 912 913static int lps0_device_attach(struct acpi_device *adev, 914 const struct acpi_device_id *not_used) 915{ 916 union acpi_object *out_obj; 917 918 if (lps0_device_handle) 919 return 0; 920 921 if (!(acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0)) 922 return 0; 923 924 guid_parse(ACPI_LPS0_DSM_UUID, &lps0_dsm_guid); 925 /* Check if the _DSM is present and as expected. */ 926 out_obj = acpi_evaluate_dsm(adev->handle, &lps0_dsm_guid, 1, 0, NULL); 927 if (!out_obj || out_obj->type != ACPI_TYPE_BUFFER) { 928 acpi_handle_debug(adev->handle, 929 "_DSM function 0 evaluation failed\n"); 930 return 0; 931 } 932 933 lps0_dsm_func_mask = *(char *)out_obj->buffer.pointer; 934 935 ACPI_FREE(out_obj); 936 937 acpi_handle_debug(adev->handle, "_DSM function mask: 0x%x\n", 938 lps0_dsm_func_mask); 939 940 lps0_device_handle = adev->handle; 941 942 lpi_device_get_constraints(); 943 944 /* 945 * Use suspend-to-idle by default if the default suspend mode was not 946 * set from the command line. 947 */ 948 if (mem_sleep_default > PM_SUSPEND_MEM && !acpi_sleep_default_s3) 949 mem_sleep_current = PM_SUSPEND_TO_IDLE; 950 951 /* 952 * Some LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U, require the 953 * EC GPE to be enabled while suspended for certain wakeup devices to 954 * work, so mark it as wakeup-capable. 955 */ 956 acpi_ec_mark_gpe_for_wake(); 957 958 return 0; 959} 960 961static struct acpi_scan_handler lps0_handler = { 962 .ids = lps0_device_ids, 963 .attach = lps0_device_attach, 964}; 965 966static int acpi_s2idle_begin(void) 967{ 968 acpi_scan_lock_acquire(); 969 return 0; 970} 971 972static int acpi_s2idle_prepare(void) 973{ 974 if (acpi_sci_irq_valid()) { 975 enable_irq_wake(acpi_sci_irq); 976 acpi_ec_set_gpe_wake_mask(ACPI_GPE_ENABLE); 977 } 978 979 acpi_enable_wakeup_devices(ACPI_STATE_S0); 980 981 /* Change the configuration of GPEs to avoid spurious wakeup. */ 982 acpi_enable_all_wakeup_gpes(); 983 acpi_os_wait_events_complete(); 984 985 s2idle_wakeup = true; 986 return 0; 987} 988 989static int acpi_s2idle_prepare_late(void) 990{ 991 if (!lps0_device_handle || sleep_no_lps0) 992 return 0; 993 994 if (pm_debug_messages_on) 995 lpi_check_constraints(); 996 997 acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF); 998 acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY); 999 1000 return 0; 1001} 1002 1003static bool acpi_s2idle_wake(void) 1004{ 1005 if (!acpi_sci_irq_valid()) 1006 return pm_wakeup_pending(); 1007 1008 while (pm_wakeup_pending()) { 1009 /* 1010 * If IRQD_WAKEUP_ARMED is set for the SCI at this point, the 1011 * SCI has not triggered while suspended, so bail out (the 1012 * wakeup is pending anyway and the SCI is not the source of 1013 * it). 1014 */ 1015 if (irqd_is_wakeup_armed(irq_get_irq_data(acpi_sci_irq))) { 1016 pm_pr_dbg("Wakeup unrelated to ACPI SCI\n"); 1017 return true; 1018 } 1019 1020 /* 1021 * If the status bit of any enabled fixed event is set, the 1022 * wakeup is regarded as valid. 1023 */ 1024 if (acpi_any_fixed_event_status_set()) { 1025 pm_pr_dbg("ACPI fixed event wakeup\n"); 1026 return true; 1027 } 1028 1029 /* Check wakeups from drivers sharing the SCI. */ 1030 if (acpi_check_wakeup_handlers()) { 1031 pm_pr_dbg("ACPI custom handler wakeup\n"); 1032 return true; 1033 } 1034 1035 /* Check non-EC GPE wakeups and dispatch the EC GPE. */ 1036 if (acpi_ec_dispatch_gpe()) { 1037 pm_pr_dbg("ACPI non-EC GPE wakeup\n"); 1038 return true; 1039 } 1040 1041 /* 1042 * Cancel the SCI wakeup and process all pending events in case 1043 * there are any wakeup ones in there. 1044 * 1045 * Note that if any non-EC GPEs are active at this point, the 1046 * SCI will retrigger after the rearming below, so no events 1047 * should be missed by canceling the wakeup here. 1048 */ 1049 pm_system_cancel_wakeup(); 1050 acpi_os_wait_events_complete(); 1051 1052 /* 1053 * The SCI is in the "suspended" state now and it cannot produce 1054 * new wakeup events till the rearming below, so if any of them 1055 * are pending here, they must be resulting from the processing 1056 * of EC events above or coming from somewhere else. 1057 */ 1058 if (pm_wakeup_pending()) { 1059 pm_pr_dbg("Wakeup after ACPI Notify sync\n"); 1060 return true; 1061 } 1062 1063 pm_wakeup_clear(acpi_sci_irq); 1064 rearm_wake_irq(acpi_sci_irq); 1065 } 1066 1067 return false; 1068} 1069 1070static void acpi_s2idle_restore_early(void) 1071{ 1072 if (!lps0_device_handle || sleep_no_lps0) 1073 return; 1074 1075 acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT); 1076 acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON); 1077} 1078 1079static void acpi_s2idle_restore(void) 1080{ 1081 /* 1082 * Drain pending events before restoring the working-state configuration 1083 * of GPEs. 1084 */ 1085 acpi_os_wait_events_complete(); /* synchronize GPE processing */ 1086 acpi_ec_flush_work(); /* flush the EC driver's workqueues */ 1087 acpi_os_wait_events_complete(); /* synchronize Notify handling */ 1088 1089 s2idle_wakeup = false; 1090 1091 acpi_enable_all_runtime_gpes(); 1092 1093 acpi_disable_wakeup_devices(ACPI_STATE_S0); 1094 1095 if (acpi_sci_irq_valid()) { 1096 acpi_ec_set_gpe_wake_mask(ACPI_GPE_DISABLE); 1097 disable_irq_wake(acpi_sci_irq); 1098 } 1099} 1100 1101static void acpi_s2idle_end(void) 1102{ 1103 acpi_scan_lock_release(); 1104} 1105 1106static const struct platform_s2idle_ops acpi_s2idle_ops = { 1107 .begin = acpi_s2idle_begin, 1108 .prepare = acpi_s2idle_prepare, 1109 .prepare_late = acpi_s2idle_prepare_late, 1110 .wake = acpi_s2idle_wake, 1111 .restore_early = acpi_s2idle_restore_early, 1112 .restore = acpi_s2idle_restore, 1113 .end = acpi_s2idle_end, 1114}; 1115 1116static void acpi_sleep_suspend_setup(void) 1117{ 1118 int i; 1119 1120 for (i = ACPI_STATE_S1; i < ACPI_STATE_S4; i++) 1121 if (acpi_sleep_state_supported(i)) 1122 sleep_states[i] = 1; 1123 1124 suspend_set_ops(old_suspend_ordering ? 1125 &acpi_suspend_ops_old : &acpi_suspend_ops); 1126 1127 acpi_scan_add_handler(&lps0_handler); 1128 s2idle_set_ops(&acpi_s2idle_ops); 1129} 1130 1131#else /* !CONFIG_SUSPEND */ 1132#define s2idle_wakeup (false) 1133#define lps0_device_handle (NULL) 1134static inline void acpi_sleep_suspend_setup(void) {} 1135#endif /* !CONFIG_SUSPEND */ 1136 1137bool acpi_s2idle_wakeup(void) 1138{ 1139 return s2idle_wakeup; 1140} 1141 1142#ifdef CONFIG_PM_SLEEP 1143static u32 saved_bm_rld; 1144 1145static int acpi_save_bm_rld(void) 1146{ 1147 acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &saved_bm_rld); 1148 return 0; 1149} 1150 1151static void acpi_restore_bm_rld(void) 1152{ 1153 u32 resumed_bm_rld = 0; 1154 1155 acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &resumed_bm_rld); 1156 if (resumed_bm_rld == saved_bm_rld) 1157 return; 1158 1159 acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, saved_bm_rld); 1160} 1161 1162static struct syscore_ops acpi_sleep_syscore_ops = { 1163 .suspend = acpi_save_bm_rld, 1164 .resume = acpi_restore_bm_rld, 1165}; 1166 1167static void acpi_sleep_syscore_init(void) 1168{ 1169 register_syscore_ops(&acpi_sleep_syscore_ops); 1170} 1171#else 1172static inline void acpi_sleep_syscore_init(void) {} 1173#endif /* CONFIG_PM_SLEEP */ 1174 1175#ifdef CONFIG_HIBERNATION 1176static unsigned long s4_hardware_signature; 1177static struct acpi_table_facs *facs; 1178static bool nosigcheck; 1179 1180void __init acpi_no_s4_hw_signature(void) 1181{ 1182 nosigcheck = true; 1183} 1184 1185static int acpi_hibernation_begin(pm_message_t stage) 1186{ 1187 if (!nvs_nosave) { 1188 int error = suspend_nvs_alloc(); 1189 if (error) 1190 return error; 1191 } 1192 1193 if (stage.event == PM_EVENT_HIBERNATE) 1194 pm_set_suspend_via_firmware(); 1195 1196 acpi_pm_start(ACPI_STATE_S4); 1197 return 0; 1198} 1199 1200static int acpi_hibernation_enter(void) 1201{ 1202 acpi_status status = AE_OK; 1203 1204 ACPI_FLUSH_CPU_CACHE(); 1205 1206 /* This shouldn't return. If it returns, we have a problem */ 1207 status = acpi_enter_sleep_state(ACPI_STATE_S4); 1208 /* Reprogram control registers */ 1209 acpi_leave_sleep_state_prep(ACPI_STATE_S4); 1210 1211 return ACPI_SUCCESS(status) ? 0 : -EFAULT; 1212} 1213 1214static void acpi_hibernation_leave(void) 1215{ 1216 pm_set_resume_via_firmware(); 1217 /* 1218 * If ACPI is not enabled by the BIOS and the boot kernel, we need to 1219 * enable it here. 1220 */ 1221 acpi_enable(); 1222 /* Reprogram control registers */ 1223 acpi_leave_sleep_state_prep(ACPI_STATE_S4); 1224 /* Check the hardware signature */ 1225 if (facs && s4_hardware_signature != facs->hardware_signature) 1226 pr_crit("ACPI: Hardware changed while hibernated, success doubtful!\n"); 1227 /* Restore the NVS memory area */ 1228 suspend_nvs_restore(); 1229 /* Allow EC transactions to happen. */ 1230 acpi_ec_unblock_transactions(); 1231} 1232 1233static void acpi_pm_thaw(void) 1234{ 1235 acpi_ec_unblock_transactions(); 1236 acpi_enable_all_runtime_gpes(); 1237} 1238 1239static const struct platform_hibernation_ops acpi_hibernation_ops = { 1240 .begin = acpi_hibernation_begin, 1241 .end = acpi_pm_end, 1242 .pre_snapshot = acpi_pm_prepare, 1243 .finish = acpi_pm_finish, 1244 .prepare = acpi_pm_prepare, 1245 .enter = acpi_hibernation_enter, 1246 .leave = acpi_hibernation_leave, 1247 .pre_restore = acpi_pm_freeze, 1248 .restore_cleanup = acpi_pm_thaw, 1249}; 1250 1251/** 1252 * acpi_hibernation_begin_old - Set the target system sleep state to 1253 * ACPI_STATE_S4 and execute the _PTS control method. This 1254 * function is used if the pre-ACPI 2.0 suspend ordering has been 1255 * requested. 1256 */ 1257static int acpi_hibernation_begin_old(pm_message_t stage) 1258{ 1259 int error; 1260 /* 1261 * The _TTS object should always be evaluated before the _PTS object. 1262 * When the old_suspended_ordering is true, the _PTS object is 1263 * evaluated in the acpi_sleep_prepare. 1264 */ 1265 acpi_sleep_tts_switch(ACPI_STATE_S4); 1266 1267 error = acpi_sleep_prepare(ACPI_STATE_S4); 1268 if (error) 1269 return error; 1270 1271 if (!nvs_nosave) { 1272 error = suspend_nvs_alloc(); 1273 if (error) 1274 return error; 1275 } 1276 1277 if (stage.event == PM_EVENT_HIBERNATE) 1278 pm_set_suspend_via_firmware(); 1279 1280 acpi_target_sleep_state = ACPI_STATE_S4; 1281 acpi_scan_lock_acquire(); 1282 return 0; 1283} 1284 1285/* 1286 * The following callbacks are used if the pre-ACPI 2.0 suspend ordering has 1287 * been requested. 1288 */ 1289static const struct platform_hibernation_ops acpi_hibernation_ops_old = { 1290 .begin = acpi_hibernation_begin_old, 1291 .end = acpi_pm_end, 1292 .pre_snapshot = acpi_pm_pre_suspend, 1293 .prepare = acpi_pm_freeze, 1294 .finish = acpi_pm_finish, 1295 .enter = acpi_hibernation_enter, 1296 .leave = acpi_hibernation_leave, 1297 .pre_restore = acpi_pm_freeze, 1298 .restore_cleanup = acpi_pm_thaw, 1299 .recover = acpi_pm_finish, 1300}; 1301 1302static void acpi_sleep_hibernate_setup(void) 1303{ 1304 if (!acpi_sleep_state_supported(ACPI_STATE_S4)) 1305 return; 1306 1307 hibernation_set_ops(old_suspend_ordering ? 1308 &acpi_hibernation_ops_old : &acpi_hibernation_ops); 1309 sleep_states[ACPI_STATE_S4] = 1; 1310 if (nosigcheck) 1311 return; 1312 1313 acpi_get_table(ACPI_SIG_FACS, 1, (struct acpi_table_header **)&facs); 1314 if (facs) 1315 s4_hardware_signature = facs->hardware_signature; 1316} 1317#else /* !CONFIG_HIBERNATION */ 1318static inline void acpi_sleep_hibernate_setup(void) {} 1319#endif /* !CONFIG_HIBERNATION */ 1320 1321static void acpi_power_off_prepare(void) 1322{ 1323 /* Prepare to power off the system */ 1324 acpi_sleep_prepare(ACPI_STATE_S5); 1325 acpi_disable_all_gpes(); 1326 acpi_os_wait_events_complete(); 1327} 1328 1329static void acpi_power_off(void) 1330{ 1331 /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */ 1332 printk(KERN_DEBUG "%s called\n", __func__); 1333 local_irq_disable(); 1334 acpi_enter_sleep_state(ACPI_STATE_S5); 1335} 1336 1337int __init acpi_sleep_init(void) 1338{ 1339 char supported[ACPI_S_STATE_COUNT * 3 + 1]; 1340 char *pos = supported; 1341 int i; 1342 1343 acpi_sleep_dmi_check(); 1344 1345 sleep_states[ACPI_STATE_S0] = 1; 1346 1347 acpi_sleep_syscore_init(); 1348 acpi_sleep_suspend_setup(); 1349 acpi_sleep_hibernate_setup(); 1350 1351 if (acpi_sleep_state_supported(ACPI_STATE_S5)) { 1352 sleep_states[ACPI_STATE_S5] = 1; 1353 pm_power_off_prepare = acpi_power_off_prepare; 1354 pm_power_off = acpi_power_off; 1355 } else { 1356 acpi_no_s5 = true; 1357 } 1358 1359 supported[0] = 0; 1360 for (i = 0; i < ACPI_S_STATE_COUNT; i++) { 1361 if (sleep_states[i]) 1362 pos += sprintf(pos, " S%d", i); 1363 } 1364 pr_info(PREFIX "(supports%s)\n", supported); 1365 1366 /* 1367 * Register the tts_notifier to reboot notifier list so that the _TTS 1368 * object can also be evaluated when the system enters S5. 1369 */ 1370 register_reboot_notifier(&tts_notifier); 1371 return 0; 1372} 1373