1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * drivers/base/power/main.c - Where the driver meets power management. 4 * 5 * Copyright (c) 2003 Patrick Mochel 6 * Copyright (c) 2003 Open Source Development Lab 7 * 8 * The driver model core calls device_pm_add() when a device is registered. 9 * This will initialize the embedded device_pm_info object in the device 10 * and add it to the list of power-controlled devices. sysfs entries for 11 * controlling device power management will also be added. 12 * 13 * A separate list is used for keeping track of power info, because the power 14 * domain dependencies may differ from the ancestral dependencies that the 15 * subsystem list maintains. 16 */ 17 18 #define pr_fmt(fmt) "PM: " fmt 19 20 #include <linux/device.h> 21 #include <linux/export.h> 22 #include <linux/mutex.h> 23 #include <linux/pm.h> 24 #include <linux/pm_runtime.h> 25 #include <linux/pm-trace.h> 26 #include <linux/pm_wakeirq.h> 27 #include <linux/interrupt.h> 28 #include <linux/sched.h> 29 #include <linux/sched/debug.h> 30 #include <linux/async.h> 31 #include <linux/suspend.h> 32 #include <trace/events/power.h> 33 #include <linux/cpufreq.h> 34 #include <linux/cpuidle.h> 35 #include <linux/devfreq.h> 36 #include <linux/timer.h> 37 38 #include "../base.h" 39 #include "power.h" 40 41 typedef int (*pm_callback_t)(struct device *); 42 43 /* 44 * The entries in the dpm_list list are in a depth first order, simply 45 * because children are guaranteed to be discovered after parents, and 46 * are inserted at the back of the list on discovery. 47 * 48 * Since device_pm_add() may be called with a device lock held, 49 * we must never try to acquire a device lock while holding 50 * dpm_list_mutex. 51 */ 52 53 LIST_HEAD(dpm_list); 54 static LIST_HEAD(dpm_prepared_list); 55 static LIST_HEAD(dpm_suspended_list); 56 static LIST_HEAD(dpm_late_early_list); 57 static LIST_HEAD(dpm_noirq_list); 58 59 struct suspend_stats suspend_stats; 60 static DEFINE_MUTEX(dpm_list_mtx); 61 static pm_message_t pm_transition; 62 63 static int async_error; 64 65 static const char *pm_verb(int event) 66 { 67 switch (event) { 68 case PM_EVENT_SUSPEND: 69 return "suspend"; 70 case PM_EVENT_RESUME: 71 return "resume"; 72 case PM_EVENT_FREEZE: 73 return "freeze"; 74 case PM_EVENT_QUIESCE: 75 return "quiesce"; 76 case PM_EVENT_HIBERNATE: 77 return "hibernate"; 78 case PM_EVENT_THAW: 79 return "thaw"; 80 case PM_EVENT_RESTORE: 81 return "restore"; 82 case PM_EVENT_RECOVER: 83 return "recover"; 84 default: 85 return "(unknown PM event)"; 86 } 87 } 88 89 /** 90 * device_pm_sleep_init - Initialize system suspend-related device fields. 91 * @dev: Device object being initialized. 92 */ 93 void device_pm_sleep_init(struct device *dev) 94 { 95 dev->power.is_prepared = false; 96 dev->power.is_suspended = false; 97 dev->power.is_noirq_suspended = false; 98 dev->power.is_late_suspended = false; 99 init_completion(&dev->power.completion); 100 complete_all(&dev->power.completion); 101 dev->power.wakeup = NULL; 102 INIT_LIST_HEAD(&dev->power.entry); 103 } 104 105 /** 106 * device_pm_lock - Lock the list of active devices used by the PM core. 107 */ 108 void device_pm_lock(void) 109 { 110 mutex_lock(&dpm_list_mtx); 111 } 112 113 /** 114 * device_pm_unlock - Unlock the list of active devices used by the PM core. 115 */ 116 void device_pm_unlock(void) 117 { 118 mutex_unlock(&dpm_list_mtx); 119 } 120 121 /** 122 * device_pm_add - Add a device to the PM core's list of active devices. 123 * @dev: Device to add to the list. 124 */ 125 void device_pm_add(struct device *dev) 126 { 127 /* Skip PM setup/initialization. */ 128 if (device_pm_not_required(dev)) 129 return; 130 131 pr_debug("Adding info for %s:%s\n", 132 dev->bus ? dev->bus->name : "No Bus", dev_name(dev)); 133 device_pm_check_callbacks(dev); 134 mutex_lock(&dpm_list_mtx); 135 if (dev->parent && dev->parent->power.is_prepared) 136 dev_warn(dev, "parent %s should not be sleeping\n", 137 dev_name(dev->parent)); 138 list_add_tail(&dev->power.entry, &dpm_list); 139 dev->power.in_dpm_list = true; 140 mutex_unlock(&dpm_list_mtx); 141 } 142 143 /** 144 * device_pm_remove - Remove a device from the PM core's list of active devices. 145 * @dev: Device to be removed from the list. 146 */ 147 void device_pm_remove(struct device *dev) 148 { 149 if (device_pm_not_required(dev)) 150 return; 151 152 pr_debug("Removing info for %s:%s\n", 153 dev->bus ? dev->bus->name : "No Bus", dev_name(dev)); 154 complete_all(&dev->power.completion); 155 mutex_lock(&dpm_list_mtx); 156 list_del_init(&dev->power.entry); 157 dev->power.in_dpm_list = false; 158 mutex_unlock(&dpm_list_mtx); 159 device_wakeup_disable(dev); 160 pm_runtime_remove(dev); 161 device_pm_check_callbacks(dev); 162 } 163 164 /** 165 * device_pm_move_before - Move device in the PM core's list of active devices. 166 * @deva: Device to move in dpm_list. 167 * @devb: Device @deva should come before. 168 */ 169 void device_pm_move_before(struct device *deva, struct device *devb) 170 { 171 pr_debug("Moving %s:%s before %s:%s\n", 172 deva->bus ? deva->bus->name : "No Bus", dev_name(deva), 173 devb->bus ? devb->bus->name : "No Bus", dev_name(devb)); 174 /* Delete deva from dpm_list and reinsert before devb. */ 175 list_move_tail(&deva->power.entry, &devb->power.entry); 176 } 177 178 /** 179 * device_pm_move_after - Move device in the PM core's list of active devices. 180 * @deva: Device to move in dpm_list. 181 * @devb: Device @deva should come after. 182 */ 183 void device_pm_move_after(struct device *deva, struct device *devb) 184 { 185 pr_debug("Moving %s:%s after %s:%s\n", 186 deva->bus ? deva->bus->name : "No Bus", dev_name(deva), 187 devb->bus ? devb->bus->name : "No Bus", dev_name(devb)); 188 /* Delete deva from dpm_list and reinsert after devb. */ 189 list_move(&deva->power.entry, &devb->power.entry); 190 } 191 192 /** 193 * device_pm_move_last - Move device to end of the PM core's list of devices. 194 * @dev: Device to move in dpm_list. 195 */ 196 void device_pm_move_last(struct device *dev) 197 { 198 pr_debug("Moving %s:%s to end of list\n", 199 dev->bus ? dev->bus->name : "No Bus", dev_name(dev)); 200 list_move_tail(&dev->power.entry, &dpm_list); 201 } 202 203 static ktime_t initcall_debug_start(struct device *dev, void *cb) 204 { 205 if (!pm_print_times_enabled) 206 return 0; 207 208 dev_info(dev, "calling %pS @ %i, parent: %s\n", cb, 209 task_pid_nr(current), 210 dev->parent ? dev_name(dev->parent) : "none"); 211 return ktime_get(); 212 } 213 214 static void initcall_debug_report(struct device *dev, ktime_t calltime, 215 void *cb, int error) 216 { 217 ktime_t rettime; 218 s64 nsecs; 219 220 if (!pm_print_times_enabled) 221 return; 222 223 rettime = ktime_get(); 224 nsecs = (s64) ktime_to_ns(ktime_sub(rettime, calltime)); 225 226 dev_info(dev, "%pS returned %d after %Ld usecs\n", cb, error, 227 (unsigned long long)nsecs >> 10); 228 } 229 230 /** 231 * dpm_wait - Wait for a PM operation to complete. 232 * @dev: Device to wait for. 233 * @async: If unset, wait only if the device's power.async_suspend flag is set. 234 */ 235 static void dpm_wait(struct device *dev, bool async) 236 { 237 if (!dev) 238 return; 239 240 if (async || (pm_async_enabled && dev->power.async_suspend)) 241 wait_for_completion(&dev->power.completion); 242 } 243 244 static int dpm_wait_fn(struct device *dev, void *async_ptr) 245 { 246 dpm_wait(dev, *((bool *)async_ptr)); 247 return 0; 248 } 249 250 static void dpm_wait_for_children(struct device *dev, bool async) 251 { 252 device_for_each_child(dev, &async, dpm_wait_fn); 253 } 254 255 static void dpm_wait_for_suppliers(struct device *dev, bool async) 256 { 257 struct device_link *link; 258 int idx; 259 260 idx = device_links_read_lock(); 261 262 /* 263 * If the supplier goes away right after we've checked the link to it, 264 * we'll wait for its completion to change the state, but that's fine, 265 * because the only things that will block as a result are the SRCU 266 * callbacks freeing the link objects for the links in the list we're 267 * walking. 268 */ 269 list_for_each_entry_rcu(link, &dev->links.suppliers, c_node) 270 if (READ_ONCE(link->status) != DL_STATE_DORMANT) 271 dpm_wait(link->supplier, async); 272 273 device_links_read_unlock(idx); 274 } 275 276 static void dpm_wait_for_superior(struct device *dev, bool async) 277 { 278 dpm_wait(dev->parent, async); 279 dpm_wait_for_suppliers(dev, async); 280 } 281 282 static void dpm_wait_for_consumers(struct device *dev, bool async) 283 { 284 struct device_link *link; 285 int idx; 286 287 idx = device_links_read_lock(); 288 289 /* 290 * The status of a device link can only be changed from "dormant" by a 291 * probe, but that cannot happen during system suspend/resume. In 292 * theory it can change to "dormant" at that time, but then it is 293 * reasonable to wait for the target device anyway (eg. if it goes 294 * away, it's better to wait for it to go away completely and then 295 * continue instead of trying to continue in parallel with its 296 * unregistration). 297 */ 298 list_for_each_entry_rcu(link, &dev->links.consumers, s_node) 299 if (READ_ONCE(link->status) != DL_STATE_DORMANT) 300 dpm_wait(link->consumer, async); 301 302 device_links_read_unlock(idx); 303 } 304 305 static void dpm_wait_for_subordinate(struct device *dev, bool async) 306 { 307 dpm_wait_for_children(dev, async); 308 dpm_wait_for_consumers(dev, async); 309 } 310 311 /** 312 * pm_op - Return the PM operation appropriate for given PM event. 313 * @ops: PM operations to choose from. 314 * @state: PM transition of the system being carried out. 315 */ 316 static pm_callback_t pm_op(const struct dev_pm_ops *ops, pm_message_t state) 317 { 318 switch (state.event) { 319 #ifdef CONFIG_SUSPEND 320 case PM_EVENT_SUSPEND: 321 return ops->suspend; 322 case PM_EVENT_RESUME: 323 return ops->resume; 324 #endif /* CONFIG_SUSPEND */ 325 #ifdef CONFIG_HIBERNATE_CALLBACKS 326 case PM_EVENT_FREEZE: 327 case PM_EVENT_QUIESCE: 328 return ops->freeze; 329 case PM_EVENT_HIBERNATE: 330 return ops->poweroff; 331 case PM_EVENT_THAW: 332 case PM_EVENT_RECOVER: 333 return ops->thaw; 334 break; 335 case PM_EVENT_RESTORE: 336 return ops->restore; 337 #endif /* CONFIG_HIBERNATE_CALLBACKS */ 338 } 339 340 return NULL; 341 } 342 343 /** 344 * pm_late_early_op - Return the PM operation appropriate for given PM event. 345 * @ops: PM operations to choose from. 346 * @state: PM transition of the system being carried out. 347 * 348 * Runtime PM is disabled for @dev while this function is being executed. 349 */ 350 static pm_callback_t pm_late_early_op(const struct dev_pm_ops *ops, 351 pm_message_t state) 352 { 353 switch (state.event) { 354 #ifdef CONFIG_SUSPEND 355 case PM_EVENT_SUSPEND: 356 return ops->suspend_late; 357 case PM_EVENT_RESUME: 358 return ops->resume_early; 359 #endif /* CONFIG_SUSPEND */ 360 #ifdef CONFIG_HIBERNATE_CALLBACKS 361 case PM_EVENT_FREEZE: 362 case PM_EVENT_QUIESCE: 363 return ops->freeze_late; 364 case PM_EVENT_HIBERNATE: 365 return ops->poweroff_late; 366 case PM_EVENT_THAW: 367 case PM_EVENT_RECOVER: 368 return ops->thaw_early; 369 case PM_EVENT_RESTORE: 370 return ops->restore_early; 371 #endif /* CONFIG_HIBERNATE_CALLBACKS */ 372 } 373 374 return NULL; 375 } 376 377 /** 378 * pm_noirq_op - Return the PM operation appropriate for given PM event. 379 * @ops: PM operations to choose from. 380 * @state: PM transition of the system being carried out. 381 * 382 * The driver of @dev will not receive interrupts while this function is being 383 * executed. 384 */ 385 static pm_callback_t pm_noirq_op(const struct dev_pm_ops *ops, pm_message_t state) 386 { 387 switch (state.event) { 388 #ifdef CONFIG_SUSPEND 389 case PM_EVENT_SUSPEND: 390 return ops->suspend_noirq; 391 case PM_EVENT_RESUME: 392 return ops->resume_noirq; 393 #endif /* CONFIG_SUSPEND */ 394 #ifdef CONFIG_HIBERNATE_CALLBACKS 395 case PM_EVENT_FREEZE: 396 case PM_EVENT_QUIESCE: 397 return ops->freeze_noirq; 398 case PM_EVENT_HIBERNATE: 399 return ops->poweroff_noirq; 400 case PM_EVENT_THAW: 401 case PM_EVENT_RECOVER: 402 return ops->thaw_noirq; 403 case PM_EVENT_RESTORE: 404 return ops->restore_noirq; 405 #endif /* CONFIG_HIBERNATE_CALLBACKS */ 406 } 407 408 return NULL; 409 } 410 411 static void pm_dev_dbg(struct device *dev, pm_message_t state, const char *info) 412 { 413 dev_dbg(dev, "%s%s%s\n", info, pm_verb(state.event), 414 ((state.event & PM_EVENT_SLEEP) && device_may_wakeup(dev)) ? 415 ", may wakeup" : ""); 416 } 417 418 static void pm_dev_err(struct device *dev, pm_message_t state, const char *info, 419 int error) 420 { 421 pr_err("Device %s failed to %s%s: error %d\n", 422 dev_name(dev), pm_verb(state.event), info, error); 423 } 424 425 static void dpm_show_time(ktime_t starttime, pm_message_t state, int error, 426 const char *info) 427 { 428 ktime_t calltime; 429 u64 usecs64; 430 int usecs; 431 432 calltime = ktime_get(); 433 usecs64 = ktime_to_ns(ktime_sub(calltime, starttime)); 434 do_div(usecs64, NSEC_PER_USEC); 435 usecs = usecs64; 436 if (usecs == 0) 437 usecs = 1; 438 439 pm_pr_dbg("%s%s%s of devices %s after %ld.%03ld msecs\n", 440 info ?: "", info ? " " : "", pm_verb(state.event), 441 error ? "aborted" : "complete", 442 usecs / USEC_PER_MSEC, usecs % USEC_PER_MSEC); 443 } 444 445 static int dpm_run_callback(pm_callback_t cb, struct device *dev, 446 pm_message_t state, const char *info) 447 { 448 ktime_t calltime; 449 int error; 450 451 if (!cb) 452 return 0; 453 454 calltime = initcall_debug_start(dev, cb); 455 456 pm_dev_dbg(dev, state, info); 457 trace_device_pm_callback_start(dev, info, state.event); 458 error = cb(dev); 459 trace_device_pm_callback_end(dev, error); 460 suspend_report_result(cb, error); 461 462 initcall_debug_report(dev, calltime, cb, error); 463 464 return error; 465 } 466 467 #ifdef CONFIG_DPM_WATCHDOG 468 struct dpm_watchdog { 469 struct device *dev; 470 struct task_struct *tsk; 471 struct timer_list timer; 472 }; 473 474 #define DECLARE_DPM_WATCHDOG_ON_STACK(wd) \ 475 struct dpm_watchdog wd 476 477 /** 478 * dpm_watchdog_handler - Driver suspend / resume watchdog handler. 479 * @t: The timer that PM watchdog depends on. 480 * 481 * Called when a driver has timed out suspending or resuming. 482 * There's not much we can do here to recover so panic() to 483 * capture a crash-dump in pstore. 484 */ 485 static void dpm_watchdog_handler(struct timer_list *t) 486 { 487 struct dpm_watchdog *wd = from_timer(wd, t, timer); 488 489 dev_emerg(wd->dev, "**** DPM device timeout ****\n"); 490 show_stack(wd->tsk, NULL); 491 panic("%s %s: unrecoverable failure\n", 492 dev_driver_string(wd->dev), dev_name(wd->dev)); 493 } 494 495 /** 496 * dpm_watchdog_set - Enable pm watchdog for given device. 497 * @wd: Watchdog. Must be allocated on the stack. 498 * @dev: Device to handle. 499 */ 500 static void dpm_watchdog_set(struct dpm_watchdog *wd, struct device *dev) 501 { 502 struct timer_list *timer = &wd->timer; 503 504 wd->dev = dev; 505 wd->tsk = current; 506 507 timer_setup_on_stack(timer, dpm_watchdog_handler, 0); 508 /* use same timeout value for both suspend and resume */ 509 timer->expires = jiffies + HZ * CONFIG_DPM_WATCHDOG_TIMEOUT; 510 add_timer(timer); 511 } 512 513 /** 514 * dpm_watchdog_clear - Disable suspend/resume watchdog. 515 * @wd: Watchdog to disable. 516 */ 517 static void dpm_watchdog_clear(struct dpm_watchdog *wd) 518 { 519 struct timer_list *timer = &wd->timer; 520 521 del_timer_sync(timer); 522 destroy_timer_on_stack(timer); 523 } 524 #else 525 #define DECLARE_DPM_WATCHDOG_ON_STACK(wd) 526 #define dpm_watchdog_set(x, y) 527 #define dpm_watchdog_clear(x) 528 #endif 529 530 /*------------------------- Resume routines -------------------------*/ 531 532 /** 533 * suspend_event - Return a "suspend" message for given "resume" one. 534 * @resume_msg: PM message representing a system-wide resume transition. 535 */ 536 static pm_message_t suspend_event(pm_message_t resume_msg) 537 { 538 switch (resume_msg.event) { 539 case PM_EVENT_RESUME: 540 return PMSG_SUSPEND; 541 case PM_EVENT_THAW: 542 case PM_EVENT_RESTORE: 543 return PMSG_FREEZE; 544 case PM_EVENT_RECOVER: 545 return PMSG_HIBERNATE; 546 } 547 return PMSG_ON; 548 } 549 550 /** 551 * dev_pm_may_skip_resume - System-wide device resume optimization check. 552 * @dev: Target device. 553 * 554 * Checks whether or not the device may be left in suspend after a system-wide 555 * transition to the working state. 556 */ 557 bool dev_pm_may_skip_resume(struct device *dev) 558 { 559 return !dev->power.must_resume && pm_transition.event != PM_EVENT_RESTORE; 560 } 561 562 static pm_callback_t dpm_subsys_resume_noirq_cb(struct device *dev, 563 pm_message_t state, 564 const char **info_p) 565 { 566 pm_callback_t callback; 567 const char *info; 568 569 if (dev->pm_domain) { 570 info = "noirq power domain "; 571 callback = pm_noirq_op(&dev->pm_domain->ops, state); 572 } else if (dev->type && dev->type->pm) { 573 info = "noirq type "; 574 callback = pm_noirq_op(dev->type->pm, state); 575 } else if (dev->class && dev->class->pm) { 576 info = "noirq class "; 577 callback = pm_noirq_op(dev->class->pm, state); 578 } else if (dev->bus && dev->bus->pm) { 579 info = "noirq bus "; 580 callback = pm_noirq_op(dev->bus->pm, state); 581 } else { 582 return NULL; 583 } 584 585 if (info_p) 586 *info_p = info; 587 588 return callback; 589 } 590 591 static pm_callback_t dpm_subsys_suspend_noirq_cb(struct device *dev, 592 pm_message_t state, 593 const char **info_p); 594 595 static pm_callback_t dpm_subsys_suspend_late_cb(struct device *dev, 596 pm_message_t state, 597 const char **info_p); 598 599 /** 600 * device_resume_noirq - Execute a "noirq resume" callback for given device. 601 * @dev: Device to handle. 602 * @state: PM transition of the system being carried out. 603 * @async: If true, the device is being resumed asynchronously. 604 * 605 * The driver of @dev will not receive interrupts while this function is being 606 * executed. 607 */ 608 static int device_resume_noirq(struct device *dev, pm_message_t state, bool async) 609 { 610 pm_callback_t callback; 611 const char *info; 612 bool skip_resume; 613 int error = 0; 614 615 TRACE_DEVICE(dev); 616 TRACE_RESUME(0); 617 618 if (dev->power.syscore || dev->power.direct_complete) 619 goto Out; 620 621 if (!dev->power.is_noirq_suspended) 622 goto Out; 623 624 dpm_wait_for_superior(dev, async); 625 626 skip_resume = dev_pm_may_skip_resume(dev); 627 628 callback = dpm_subsys_resume_noirq_cb(dev, state, &info); 629 if (callback) 630 goto Run; 631 632 if (skip_resume) 633 goto Skip; 634 635 if (dev_pm_smart_suspend_and_suspended(dev)) { 636 pm_message_t suspend_msg = suspend_event(state); 637 638 /* 639 * If "freeze" callbacks have been skipped during a transition 640 * related to hibernation, the subsequent "thaw" callbacks must 641 * be skipped too or bad things may happen. Otherwise, resume 642 * callbacks are going to be run for the device, so its runtime 643 * PM status must be changed to reflect the new state after the 644 * transition under way. 645 */ 646 if (!dpm_subsys_suspend_late_cb(dev, suspend_msg, NULL) && 647 !dpm_subsys_suspend_noirq_cb(dev, suspend_msg, NULL)) { 648 if (state.event == PM_EVENT_THAW) { 649 skip_resume = true; 650 goto Skip; 651 } else { 652 pm_runtime_set_active(dev); 653 } 654 } 655 } 656 657 if (dev->driver && dev->driver->pm) { 658 info = "noirq driver "; 659 callback = pm_noirq_op(dev->driver->pm, state); 660 } 661 662 Run: 663 error = dpm_run_callback(callback, dev, state, info); 664 665 Skip: 666 dev->power.is_noirq_suspended = false; 667 668 if (skip_resume) { 669 /* Make the next phases of resume skip the device. */ 670 dev->power.is_late_suspended = false; 671 dev->power.is_suspended = false; 672 /* 673 * The device is going to be left in suspend, but it might not 674 * have been in runtime suspend before the system suspended, so 675 * its runtime PM status needs to be updated to avoid confusing 676 * the runtime PM framework when runtime PM is enabled for the 677 * device again. 678 */ 679 pm_runtime_set_suspended(dev); 680 } 681 682 Out: 683 complete_all(&dev->power.completion); 684 TRACE_RESUME(error); 685 return error; 686 } 687 688 static bool is_async(struct device *dev) 689 { 690 return dev->power.async_suspend && pm_async_enabled 691 && !pm_trace_is_enabled(); 692 } 693 694 static bool dpm_async_fn(struct device *dev, async_func_t func) 695 { 696 reinit_completion(&dev->power.completion); 697 698 if (is_async(dev)) { 699 get_device(dev); 700 async_schedule(func, dev); 701 return true; 702 } 703 704 return false; 705 } 706 707 static void async_resume_noirq(void *data, async_cookie_t cookie) 708 { 709 struct device *dev = (struct device *)data; 710 int error; 711 712 error = device_resume_noirq(dev, pm_transition, true); 713 if (error) 714 pm_dev_err(dev, pm_transition, " async", error); 715 716 put_device(dev); 717 } 718 719 static void dpm_noirq_resume_devices(pm_message_t state) 720 { 721 struct device *dev; 722 ktime_t starttime = ktime_get(); 723 724 trace_suspend_resume(TPS("dpm_resume_noirq"), state.event, true); 725 mutex_lock(&dpm_list_mtx); 726 pm_transition = state; 727 728 /* 729 * Advanced the async threads upfront, 730 * in case the starting of async threads is 731 * delayed by non-async resuming devices. 732 */ 733 list_for_each_entry(dev, &dpm_noirq_list, power.entry) 734 dpm_async_fn(dev, async_resume_noirq); 735 736 while (!list_empty(&dpm_noirq_list)) { 737 dev = to_device(dpm_noirq_list.next); 738 get_device(dev); 739 list_move_tail(&dev->power.entry, &dpm_late_early_list); 740 mutex_unlock(&dpm_list_mtx); 741 742 if (!is_async(dev)) { 743 int error; 744 745 error = device_resume_noirq(dev, state, false); 746 if (error) { 747 suspend_stats.failed_resume_noirq++; 748 dpm_save_failed_step(SUSPEND_RESUME_NOIRQ); 749 dpm_save_failed_dev(dev_name(dev)); 750 pm_dev_err(dev, state, " noirq", error); 751 } 752 } 753 754 mutex_lock(&dpm_list_mtx); 755 put_device(dev); 756 } 757 mutex_unlock(&dpm_list_mtx); 758 async_synchronize_full(); 759 dpm_show_time(starttime, state, 0, "noirq"); 760 trace_suspend_resume(TPS("dpm_resume_noirq"), state.event, false); 761 } 762 763 /** 764 * dpm_resume_noirq - Execute "noirq resume" callbacks for all devices. 765 * @state: PM transition of the system being carried out. 766 * 767 * Invoke the "noirq" resume callbacks for all devices in dpm_noirq_list and 768 * allow device drivers' interrupt handlers to be called. 769 */ 770 void dpm_resume_noirq(pm_message_t state) 771 { 772 dpm_noirq_resume_devices(state); 773 774 resume_device_irqs(); 775 device_wakeup_disarm_wake_irqs(); 776 777 cpuidle_resume(); 778 } 779 780 static pm_callback_t dpm_subsys_resume_early_cb(struct device *dev, 781 pm_message_t state, 782 const char **info_p) 783 { 784 pm_callback_t callback; 785 const char *info; 786 787 if (dev->pm_domain) { 788 info = "early power domain "; 789 callback = pm_late_early_op(&dev->pm_domain->ops, state); 790 } else if (dev->type && dev->type->pm) { 791 info = "early type "; 792 callback = pm_late_early_op(dev->type->pm, state); 793 } else if (dev->class && dev->class->pm) { 794 info = "early class "; 795 callback = pm_late_early_op(dev->class->pm, state); 796 } else if (dev->bus && dev->bus->pm) { 797 info = "early bus "; 798 callback = pm_late_early_op(dev->bus->pm, state); 799 } else { 800 return NULL; 801 } 802 803 if (info_p) 804 *info_p = info; 805 806 return callback; 807 } 808 809 /** 810 * device_resume_early - Execute an "early resume" callback for given device. 811 * @dev: Device to handle. 812 * @state: PM transition of the system being carried out. 813 * @async: If true, the device is being resumed asynchronously. 814 * 815 * Runtime PM is disabled for @dev while this function is being executed. 816 */ 817 static int device_resume_early(struct device *dev, pm_message_t state, bool async) 818 { 819 pm_callback_t callback; 820 const char *info; 821 int error = 0; 822 823 TRACE_DEVICE(dev); 824 TRACE_RESUME(0); 825 826 if (dev->power.syscore || dev->power.direct_complete) 827 goto Out; 828 829 if (!dev->power.is_late_suspended) 830 goto Out; 831 832 dpm_wait_for_superior(dev, async); 833 834 callback = dpm_subsys_resume_early_cb(dev, state, &info); 835 836 if (!callback && dev->driver && dev->driver->pm) { 837 info = "early driver "; 838 callback = pm_late_early_op(dev->driver->pm, state); 839 } 840 841 error = dpm_run_callback(callback, dev, state, info); 842 dev->power.is_late_suspended = false; 843 844 Out: 845 TRACE_RESUME(error); 846 847 pm_runtime_enable(dev); 848 complete_all(&dev->power.completion); 849 return error; 850 } 851 852 static void async_resume_early(void *data, async_cookie_t cookie) 853 { 854 struct device *dev = (struct device *)data; 855 int error; 856 857 error = device_resume_early(dev, pm_transition, true); 858 if (error) 859 pm_dev_err(dev, pm_transition, " async", error); 860 861 put_device(dev); 862 } 863 864 /** 865 * dpm_resume_early - Execute "early resume" callbacks for all devices. 866 * @state: PM transition of the system being carried out. 867 */ 868 void dpm_resume_early(pm_message_t state) 869 { 870 struct device *dev; 871 ktime_t starttime = ktime_get(); 872 873 trace_suspend_resume(TPS("dpm_resume_early"), state.event, true); 874 mutex_lock(&dpm_list_mtx); 875 pm_transition = state; 876 877 /* 878 * Advanced the async threads upfront, 879 * in case the starting of async threads is 880 * delayed by non-async resuming devices. 881 */ 882 list_for_each_entry(dev, &dpm_late_early_list, power.entry) 883 dpm_async_fn(dev, async_resume_early); 884 885 while (!list_empty(&dpm_late_early_list)) { 886 dev = to_device(dpm_late_early_list.next); 887 get_device(dev); 888 list_move_tail(&dev->power.entry, &dpm_suspended_list); 889 mutex_unlock(&dpm_list_mtx); 890 891 if (!is_async(dev)) { 892 int error; 893 894 error = device_resume_early(dev, state, false); 895 if (error) { 896 suspend_stats.failed_resume_early++; 897 dpm_save_failed_step(SUSPEND_RESUME_EARLY); 898 dpm_save_failed_dev(dev_name(dev)); 899 pm_dev_err(dev, state, " early", error); 900 } 901 } 902 mutex_lock(&dpm_list_mtx); 903 put_device(dev); 904 } 905 mutex_unlock(&dpm_list_mtx); 906 async_synchronize_full(); 907 dpm_show_time(starttime, state, 0, "early"); 908 trace_suspend_resume(TPS("dpm_resume_early"), state.event, false); 909 } 910 911 /** 912 * dpm_resume_start - Execute "noirq" and "early" device callbacks. 913 * @state: PM transition of the system being carried out. 914 */ 915 void dpm_resume_start(pm_message_t state) 916 { 917 dpm_resume_noirq(state); 918 dpm_resume_early(state); 919 } 920 EXPORT_SYMBOL_GPL(dpm_resume_start); 921 922 /** 923 * device_resume - Execute "resume" callbacks for given device. 924 * @dev: Device to handle. 925 * @state: PM transition of the system being carried out. 926 * @async: If true, the device is being resumed asynchronously. 927 */ 928 static int device_resume(struct device *dev, pm_message_t state, bool async) 929 { 930 pm_callback_t callback = NULL; 931 const char *info = NULL; 932 int error = 0; 933 DECLARE_DPM_WATCHDOG_ON_STACK(wd); 934 935 TRACE_DEVICE(dev); 936 TRACE_RESUME(0); 937 938 if (dev->power.syscore) 939 goto Complete; 940 941 if (dev->power.direct_complete) { 942 /* Match the pm_runtime_disable() in __device_suspend(). */ 943 pm_runtime_enable(dev); 944 goto Complete; 945 } 946 947 dpm_wait_for_superior(dev, async); 948 dpm_watchdog_set(&wd, dev); 949 device_lock(dev); 950 951 /* 952 * This is a fib. But we'll allow new children to be added below 953 * a resumed device, even if the device hasn't been completed yet. 954 */ 955 dev->power.is_prepared = false; 956 957 if (!dev->power.is_suspended) 958 goto Unlock; 959 960 if (dev->pm_domain) { 961 info = "power domain "; 962 callback = pm_op(&dev->pm_domain->ops, state); 963 goto Driver; 964 } 965 966 if (dev->type && dev->type->pm) { 967 info = "type "; 968 callback = pm_op(dev->type->pm, state); 969 goto Driver; 970 } 971 972 if (dev->class && dev->class->pm) { 973 info = "class "; 974 callback = pm_op(dev->class->pm, state); 975 goto Driver; 976 } 977 978 if (dev->bus) { 979 if (dev->bus->pm) { 980 info = "bus "; 981 callback = pm_op(dev->bus->pm, state); 982 } else if (dev->bus->resume) { 983 info = "legacy bus "; 984 callback = dev->bus->resume; 985 goto End; 986 } 987 } 988 989 Driver: 990 if (!callback && dev->driver && dev->driver->pm) { 991 info = "driver "; 992 callback = pm_op(dev->driver->pm, state); 993 } 994 995 End: 996 error = dpm_run_callback(callback, dev, state, info); 997 dev->power.is_suspended = false; 998 999 Unlock: 1000 device_unlock(dev); 1001 dpm_watchdog_clear(&wd); 1002 1003 Complete: 1004 complete_all(&dev->power.completion); 1005 1006 TRACE_RESUME(error); 1007 1008 return error; 1009 } 1010 1011 static void async_resume(void *data, async_cookie_t cookie) 1012 { 1013 struct device *dev = (struct device *)data; 1014 int error; 1015 1016 error = device_resume(dev, pm_transition, true); 1017 if (error) 1018 pm_dev_err(dev, pm_transition, " async", error); 1019 put_device(dev); 1020 } 1021 1022 /** 1023 * dpm_resume - Execute "resume" callbacks for non-sysdev devices. 1024 * @state: PM transition of the system being carried out. 1025 * 1026 * Execute the appropriate "resume" callback for all devices whose status 1027 * indicates that they are suspended. 1028 */ 1029 void dpm_resume(pm_message_t state) 1030 { 1031 struct device *dev; 1032 ktime_t starttime = ktime_get(); 1033 1034 trace_suspend_resume(TPS("dpm_resume"), state.event, true); 1035 might_sleep(); 1036 1037 mutex_lock(&dpm_list_mtx); 1038 pm_transition = state; 1039 async_error = 0; 1040 1041 list_for_each_entry(dev, &dpm_suspended_list, power.entry) 1042 dpm_async_fn(dev, async_resume); 1043 1044 while (!list_empty(&dpm_suspended_list)) { 1045 dev = to_device(dpm_suspended_list.next); 1046 get_device(dev); 1047 if (!is_async(dev)) { 1048 int error; 1049 1050 mutex_unlock(&dpm_list_mtx); 1051 1052 error = device_resume(dev, state, false); 1053 if (error) { 1054 suspend_stats.failed_resume++; 1055 dpm_save_failed_step(SUSPEND_RESUME); 1056 dpm_save_failed_dev(dev_name(dev)); 1057 pm_dev_err(dev, state, "", error); 1058 } 1059 1060 mutex_lock(&dpm_list_mtx); 1061 } 1062 if (!list_empty(&dev->power.entry)) 1063 list_move_tail(&dev->power.entry, &dpm_prepared_list); 1064 put_device(dev); 1065 } 1066 mutex_unlock(&dpm_list_mtx); 1067 async_synchronize_full(); 1068 dpm_show_time(starttime, state, 0, NULL); 1069 1070 cpufreq_resume(); 1071 devfreq_resume(); 1072 trace_suspend_resume(TPS("dpm_resume"), state.event, false); 1073 } 1074 1075 /** 1076 * device_complete - Complete a PM transition for given device. 1077 * @dev: Device to handle. 1078 * @state: PM transition of the system being carried out. 1079 */ 1080 static void device_complete(struct device *dev, pm_message_t state) 1081 { 1082 void (*callback)(struct device *) = NULL; 1083 const char *info = NULL; 1084 1085 if (dev->power.syscore) 1086 return; 1087 1088 device_lock(dev); 1089 1090 if (dev->pm_domain) { 1091 info = "completing power domain "; 1092 callback = dev->pm_domain->ops.complete; 1093 } else if (dev->type && dev->type->pm) { 1094 info = "completing type "; 1095 callback = dev->type->pm->complete; 1096 } else if (dev->class && dev->class->pm) { 1097 info = "completing class "; 1098 callback = dev->class->pm->complete; 1099 } else if (dev->bus && dev->bus->pm) { 1100 info = "completing bus "; 1101 callback = dev->bus->pm->complete; 1102 } 1103 1104 if (!callback && dev->driver && dev->driver->pm) { 1105 info = "completing driver "; 1106 callback = dev->driver->pm->complete; 1107 } 1108 1109 if (callback) { 1110 pm_dev_dbg(dev, state, info); 1111 callback(dev); 1112 } 1113 1114 device_unlock(dev); 1115 1116 pm_runtime_put(dev); 1117 } 1118 1119 /** 1120 * dpm_complete - Complete a PM transition for all non-sysdev devices. 1121 * @state: PM transition of the system being carried out. 1122 * 1123 * Execute the ->complete() callbacks for all devices whose PM status is not 1124 * DPM_ON (this allows new devices to be registered). 1125 */ 1126 void dpm_complete(pm_message_t state) 1127 { 1128 struct list_head list; 1129 1130 trace_suspend_resume(TPS("dpm_complete"), state.event, true); 1131 might_sleep(); 1132 1133 INIT_LIST_HEAD(&list); 1134 mutex_lock(&dpm_list_mtx); 1135 while (!list_empty(&dpm_prepared_list)) { 1136 struct device *dev = to_device(dpm_prepared_list.prev); 1137 1138 get_device(dev); 1139 dev->power.is_prepared = false; 1140 list_move(&dev->power.entry, &list); 1141 mutex_unlock(&dpm_list_mtx); 1142 1143 trace_device_pm_callback_start(dev, "", state.event); 1144 device_complete(dev, state); 1145 trace_device_pm_callback_end(dev, 0); 1146 1147 mutex_lock(&dpm_list_mtx); 1148 put_device(dev); 1149 } 1150 list_splice(&list, &dpm_list); 1151 mutex_unlock(&dpm_list_mtx); 1152 1153 /* Allow device probing and trigger re-probing of deferred devices */ 1154 device_unblock_probing(); 1155 trace_suspend_resume(TPS("dpm_complete"), state.event, false); 1156 } 1157 1158 /** 1159 * dpm_resume_end - Execute "resume" callbacks and complete system transition. 1160 * @state: PM transition of the system being carried out. 1161 * 1162 * Execute "resume" callbacks for all devices and complete the PM transition of 1163 * the system. 1164 */ 1165 void dpm_resume_end(pm_message_t state) 1166 { 1167 dpm_resume(state); 1168 dpm_complete(state); 1169 } 1170 EXPORT_SYMBOL_GPL(dpm_resume_end); 1171 1172 1173 /*------------------------- Suspend routines -------------------------*/ 1174 1175 /** 1176 * resume_event - Return a "resume" message for given "suspend" sleep state. 1177 * @sleep_state: PM message representing a sleep state. 1178 * 1179 * Return a PM message representing the resume event corresponding to given 1180 * sleep state. 1181 */ 1182 static pm_message_t resume_event(pm_message_t sleep_state) 1183 { 1184 switch (sleep_state.event) { 1185 case PM_EVENT_SUSPEND: 1186 return PMSG_RESUME; 1187 case PM_EVENT_FREEZE: 1188 case PM_EVENT_QUIESCE: 1189 return PMSG_RECOVER; 1190 case PM_EVENT_HIBERNATE: 1191 return PMSG_RESTORE; 1192 } 1193 return PMSG_ON; 1194 } 1195 1196 static void dpm_superior_set_must_resume(struct device *dev) 1197 { 1198 struct device_link *link; 1199 int idx; 1200 1201 if (dev->parent) 1202 dev->parent->power.must_resume = true; 1203 1204 idx = device_links_read_lock(); 1205 1206 list_for_each_entry_rcu(link, &dev->links.suppliers, c_node) 1207 link->supplier->power.must_resume = true; 1208 1209 device_links_read_unlock(idx); 1210 } 1211 1212 static pm_callback_t dpm_subsys_suspend_noirq_cb(struct device *dev, 1213 pm_message_t state, 1214 const char **info_p) 1215 { 1216 pm_callback_t callback; 1217 const char *info; 1218 1219 if (dev->pm_domain) { 1220 info = "noirq power domain "; 1221 callback = pm_noirq_op(&dev->pm_domain->ops, state); 1222 } else if (dev->type && dev->type->pm) { 1223 info = "noirq type "; 1224 callback = pm_noirq_op(dev->type->pm, state); 1225 } else if (dev->class && dev->class->pm) { 1226 info = "noirq class "; 1227 callback = pm_noirq_op(dev->class->pm, state); 1228 } else if (dev->bus && dev->bus->pm) { 1229 info = "noirq bus "; 1230 callback = pm_noirq_op(dev->bus->pm, state); 1231 } else { 1232 return NULL; 1233 } 1234 1235 if (info_p) 1236 *info_p = info; 1237 1238 return callback; 1239 } 1240 1241 static bool device_must_resume(struct device *dev, pm_message_t state, 1242 bool no_subsys_suspend_noirq) 1243 { 1244 pm_message_t resume_msg = resume_event(state); 1245 1246 /* 1247 * If all of the device driver's "noirq", "late" and "early" callbacks 1248 * are invoked directly by the core, the decision to allow the device to 1249 * stay in suspend can be based on its current runtime PM status and its 1250 * wakeup settings. 1251 */ 1252 if (no_subsys_suspend_noirq && 1253 !dpm_subsys_suspend_late_cb(dev, state, NULL) && 1254 !dpm_subsys_resume_early_cb(dev, resume_msg, NULL) && 1255 !dpm_subsys_resume_noirq_cb(dev, resume_msg, NULL)) 1256 return !pm_runtime_status_suspended(dev) && 1257 (resume_msg.event != PM_EVENT_RESUME || 1258 (device_can_wakeup(dev) && !device_may_wakeup(dev))); 1259 1260 /* 1261 * The only safe strategy here is to require that if the device may not 1262 * be left in suspend, resume callbacks must be invoked for it. 1263 */ 1264 return !dev->power.may_skip_resume; 1265 } 1266 1267 /** 1268 * __device_suspend_noirq - Execute a "noirq suspend" callback for given device. 1269 * @dev: Device to handle. 1270 * @state: PM transition of the system being carried out. 1271 * @async: If true, the device is being suspended asynchronously. 1272 * 1273 * The driver of @dev will not receive interrupts while this function is being 1274 * executed. 1275 */ 1276 static int __device_suspend_noirq(struct device *dev, pm_message_t state, bool async) 1277 { 1278 pm_callback_t callback; 1279 const char *info; 1280 bool no_subsys_cb = false; 1281 int error = 0; 1282 1283 TRACE_DEVICE(dev); 1284 TRACE_SUSPEND(0); 1285 1286 dpm_wait_for_subordinate(dev, async); 1287 1288 if (async_error) 1289 goto Complete; 1290 1291 if (dev->power.syscore || dev->power.direct_complete) 1292 goto Complete; 1293 1294 callback = dpm_subsys_suspend_noirq_cb(dev, state, &info); 1295 if (callback) 1296 goto Run; 1297 1298 no_subsys_cb = !dpm_subsys_suspend_late_cb(dev, state, NULL); 1299 1300 if (dev_pm_smart_suspend_and_suspended(dev) && no_subsys_cb) 1301 goto Skip; 1302 1303 if (dev->driver && dev->driver->pm) { 1304 info = "noirq driver "; 1305 callback = pm_noirq_op(dev->driver->pm, state); 1306 } 1307 1308 Run: 1309 error = dpm_run_callback(callback, dev, state, info); 1310 if (error) { 1311 async_error = error; 1312 goto Complete; 1313 } 1314 1315 Skip: 1316 dev->power.is_noirq_suspended = true; 1317 1318 if (dev_pm_test_driver_flags(dev, DPM_FLAG_LEAVE_SUSPENDED)) { 1319 dev->power.must_resume = dev->power.must_resume || 1320 atomic_read(&dev->power.usage_count) > 1 || 1321 device_must_resume(dev, state, no_subsys_cb); 1322 } else { 1323 dev->power.must_resume = true; 1324 } 1325 1326 if (dev->power.must_resume) 1327 dpm_superior_set_must_resume(dev); 1328 1329 Complete: 1330 complete_all(&dev->power.completion); 1331 TRACE_SUSPEND(error); 1332 return error; 1333 } 1334 1335 static void async_suspend_noirq(void *data, async_cookie_t cookie) 1336 { 1337 struct device *dev = (struct device *)data; 1338 int error; 1339 1340 error = __device_suspend_noirq(dev, pm_transition, true); 1341 if (error) { 1342 dpm_save_failed_dev(dev_name(dev)); 1343 pm_dev_err(dev, pm_transition, " async", error); 1344 } 1345 1346 put_device(dev); 1347 } 1348 1349 static int device_suspend_noirq(struct device *dev) 1350 { 1351 if (dpm_async_fn(dev, async_suspend_noirq)) 1352 return 0; 1353 1354 return __device_suspend_noirq(dev, pm_transition, false); 1355 } 1356 1357 static int dpm_noirq_suspend_devices(pm_message_t state) 1358 { 1359 ktime_t starttime = ktime_get(); 1360 int error = 0; 1361 1362 trace_suspend_resume(TPS("dpm_suspend_noirq"), state.event, true); 1363 mutex_lock(&dpm_list_mtx); 1364 pm_transition = state; 1365 async_error = 0; 1366 1367 while (!list_empty(&dpm_late_early_list)) { 1368 struct device *dev = to_device(dpm_late_early_list.prev); 1369 1370 get_device(dev); 1371 mutex_unlock(&dpm_list_mtx); 1372 1373 error = device_suspend_noirq(dev); 1374 1375 mutex_lock(&dpm_list_mtx); 1376 if (error) { 1377 pm_dev_err(dev, state, " noirq", error); 1378 dpm_save_failed_dev(dev_name(dev)); 1379 put_device(dev); 1380 break; 1381 } 1382 if (!list_empty(&dev->power.entry)) 1383 list_move(&dev->power.entry, &dpm_noirq_list); 1384 put_device(dev); 1385 1386 if (async_error) 1387 break; 1388 } 1389 mutex_unlock(&dpm_list_mtx); 1390 async_synchronize_full(); 1391 if (!error) 1392 error = async_error; 1393 1394 if (error) { 1395 suspend_stats.failed_suspend_noirq++; 1396 dpm_save_failed_step(SUSPEND_SUSPEND_NOIRQ); 1397 } 1398 dpm_show_time(starttime, state, error, "noirq"); 1399 trace_suspend_resume(TPS("dpm_suspend_noirq"), state.event, false); 1400 return error; 1401 } 1402 1403 /** 1404 * dpm_suspend_noirq - Execute "noirq suspend" callbacks for all devices. 1405 * @state: PM transition of the system being carried out. 1406 * 1407 * Prevent device drivers' interrupt handlers from being called and invoke 1408 * "noirq" suspend callbacks for all non-sysdev devices. 1409 */ 1410 int dpm_suspend_noirq(pm_message_t state) 1411 { 1412 int ret; 1413 1414 cpuidle_pause(); 1415 1416 device_wakeup_arm_wake_irqs(); 1417 suspend_device_irqs(); 1418 1419 ret = dpm_noirq_suspend_devices(state); 1420 if (ret) 1421 dpm_resume_noirq(resume_event(state)); 1422 1423 return ret; 1424 } 1425 1426 static void dpm_propagate_wakeup_to_parent(struct device *dev) 1427 { 1428 struct device *parent = dev->parent; 1429 1430 if (!parent) 1431 return; 1432 1433 spin_lock_irq(&parent->power.lock); 1434 1435 if (dev->power.wakeup_path && !parent->power.ignore_children) 1436 parent->power.wakeup_path = true; 1437 1438 spin_unlock_irq(&parent->power.lock); 1439 } 1440 1441 static pm_callback_t dpm_subsys_suspend_late_cb(struct device *dev, 1442 pm_message_t state, 1443 const char **info_p) 1444 { 1445 pm_callback_t callback; 1446 const char *info; 1447 1448 if (dev->pm_domain) { 1449 info = "late power domain "; 1450 callback = pm_late_early_op(&dev->pm_domain->ops, state); 1451 } else if (dev->type && dev->type->pm) { 1452 info = "late type "; 1453 callback = pm_late_early_op(dev->type->pm, state); 1454 } else if (dev->class && dev->class->pm) { 1455 info = "late class "; 1456 callback = pm_late_early_op(dev->class->pm, state); 1457 } else if (dev->bus && dev->bus->pm) { 1458 info = "late bus "; 1459 callback = pm_late_early_op(dev->bus->pm, state); 1460 } else { 1461 return NULL; 1462 } 1463 1464 if (info_p) 1465 *info_p = info; 1466 1467 return callback; 1468 } 1469 1470 /** 1471 * __device_suspend_late - Execute a "late suspend" callback for given device. 1472 * @dev: Device to handle. 1473 * @state: PM transition of the system being carried out. 1474 * @async: If true, the device is being suspended asynchronously. 1475 * 1476 * Runtime PM is disabled for @dev while this function is being executed. 1477 */ 1478 static int __device_suspend_late(struct device *dev, pm_message_t state, bool async) 1479 { 1480 pm_callback_t callback; 1481 const char *info; 1482 int error = 0; 1483 1484 TRACE_DEVICE(dev); 1485 TRACE_SUSPEND(0); 1486 1487 __pm_runtime_disable(dev, false); 1488 1489 dpm_wait_for_subordinate(dev, async); 1490 1491 if (async_error) 1492 goto Complete; 1493 1494 if (pm_wakeup_pending()) { 1495 async_error = -EBUSY; 1496 goto Complete; 1497 } 1498 1499 if (dev->power.syscore || dev->power.direct_complete) 1500 goto Complete; 1501 1502 callback = dpm_subsys_suspend_late_cb(dev, state, &info); 1503 if (callback) 1504 goto Run; 1505 1506 if (dev_pm_smart_suspend_and_suspended(dev) && 1507 !dpm_subsys_suspend_noirq_cb(dev, state, NULL)) 1508 goto Skip; 1509 1510 if (dev->driver && dev->driver->pm) { 1511 info = "late driver "; 1512 callback = pm_late_early_op(dev->driver->pm, state); 1513 } 1514 1515 Run: 1516 error = dpm_run_callback(callback, dev, state, info); 1517 if (error) { 1518 async_error = error; 1519 goto Complete; 1520 } 1521 dpm_propagate_wakeup_to_parent(dev); 1522 1523 Skip: 1524 dev->power.is_late_suspended = true; 1525 1526 Complete: 1527 TRACE_SUSPEND(error); 1528 complete_all(&dev->power.completion); 1529 return error; 1530 } 1531 1532 static void async_suspend_late(void *data, async_cookie_t cookie) 1533 { 1534 struct device *dev = (struct device *)data; 1535 int error; 1536 1537 error = __device_suspend_late(dev, pm_transition, true); 1538 if (error) { 1539 dpm_save_failed_dev(dev_name(dev)); 1540 pm_dev_err(dev, pm_transition, " async", error); 1541 } 1542 put_device(dev); 1543 } 1544 1545 static int device_suspend_late(struct device *dev) 1546 { 1547 if (dpm_async_fn(dev, async_suspend_late)) 1548 return 0; 1549 1550 return __device_suspend_late(dev, pm_transition, false); 1551 } 1552 1553 /** 1554 * dpm_suspend_late - Execute "late suspend" callbacks for all devices. 1555 * @state: PM transition of the system being carried out. 1556 */ 1557 int dpm_suspend_late(pm_message_t state) 1558 { 1559 ktime_t starttime = ktime_get(); 1560 int error = 0; 1561 1562 trace_suspend_resume(TPS("dpm_suspend_late"), state.event, true); 1563 mutex_lock(&dpm_list_mtx); 1564 pm_transition = state; 1565 async_error = 0; 1566 1567 while (!list_empty(&dpm_suspended_list)) { 1568 struct device *dev = to_device(dpm_suspended_list.prev); 1569 1570 get_device(dev); 1571 mutex_unlock(&dpm_list_mtx); 1572 1573 error = device_suspend_late(dev); 1574 1575 mutex_lock(&dpm_list_mtx); 1576 if (!list_empty(&dev->power.entry)) 1577 list_move(&dev->power.entry, &dpm_late_early_list); 1578 1579 if (error) { 1580 pm_dev_err(dev, state, " late", error); 1581 dpm_save_failed_dev(dev_name(dev)); 1582 put_device(dev); 1583 break; 1584 } 1585 put_device(dev); 1586 1587 if (async_error) 1588 break; 1589 } 1590 mutex_unlock(&dpm_list_mtx); 1591 async_synchronize_full(); 1592 if (!error) 1593 error = async_error; 1594 if (error) { 1595 suspend_stats.failed_suspend_late++; 1596 dpm_save_failed_step(SUSPEND_SUSPEND_LATE); 1597 dpm_resume_early(resume_event(state)); 1598 } 1599 dpm_show_time(starttime, state, error, "late"); 1600 trace_suspend_resume(TPS("dpm_suspend_late"), state.event, false); 1601 return error; 1602 } 1603 1604 /** 1605 * dpm_suspend_end - Execute "late" and "noirq" device suspend callbacks. 1606 * @state: PM transition of the system being carried out. 1607 */ 1608 int dpm_suspend_end(pm_message_t state) 1609 { 1610 ktime_t starttime = ktime_get(); 1611 int error; 1612 1613 error = dpm_suspend_late(state); 1614 if (error) 1615 goto out; 1616 1617 error = dpm_suspend_noirq(state); 1618 if (error) 1619 dpm_resume_early(resume_event(state)); 1620 1621 out: 1622 dpm_show_time(starttime, state, error, "end"); 1623 return error; 1624 } 1625 EXPORT_SYMBOL_GPL(dpm_suspend_end); 1626 1627 /** 1628 * legacy_suspend - Execute a legacy (bus or class) suspend callback for device. 1629 * @dev: Device to suspend. 1630 * @state: PM transition of the system being carried out. 1631 * @cb: Suspend callback to execute. 1632 * @info: string description of caller. 1633 */ 1634 static int legacy_suspend(struct device *dev, pm_message_t state, 1635 int (*cb)(struct device *dev, pm_message_t state), 1636 const char *info) 1637 { 1638 int error; 1639 ktime_t calltime; 1640 1641 calltime = initcall_debug_start(dev, cb); 1642 1643 trace_device_pm_callback_start(dev, info, state.event); 1644 error = cb(dev, state); 1645 trace_device_pm_callback_end(dev, error); 1646 suspend_report_result(cb, error); 1647 1648 initcall_debug_report(dev, calltime, cb, error); 1649 1650 return error; 1651 } 1652 1653 static void dpm_clear_superiors_direct_complete(struct device *dev) 1654 { 1655 struct device_link *link; 1656 int idx; 1657 1658 if (dev->parent) { 1659 spin_lock_irq(&dev->parent->power.lock); 1660 dev->parent->power.direct_complete = false; 1661 spin_unlock_irq(&dev->parent->power.lock); 1662 } 1663 1664 idx = device_links_read_lock(); 1665 1666 list_for_each_entry_rcu(link, &dev->links.suppliers, c_node) { 1667 spin_lock_irq(&link->supplier->power.lock); 1668 link->supplier->power.direct_complete = false; 1669 spin_unlock_irq(&link->supplier->power.lock); 1670 } 1671 1672 device_links_read_unlock(idx); 1673 } 1674 1675 /** 1676 * __device_suspend - Execute "suspend" callbacks for given device. 1677 * @dev: Device to handle. 1678 * @state: PM transition of the system being carried out. 1679 * @async: If true, the device is being suspended asynchronously. 1680 */ 1681 static int __device_suspend(struct device *dev, pm_message_t state, bool async) 1682 { 1683 pm_callback_t callback = NULL; 1684 const char *info = NULL; 1685 int error = 0; 1686 DECLARE_DPM_WATCHDOG_ON_STACK(wd); 1687 1688 TRACE_DEVICE(dev); 1689 TRACE_SUSPEND(0); 1690 1691 dpm_wait_for_subordinate(dev, async); 1692 1693 if (async_error) { 1694 dev->power.direct_complete = false; 1695 goto Complete; 1696 } 1697 1698 /* 1699 * If a device configured to wake up the system from sleep states 1700 * has been suspended at run time and there's a resume request pending 1701 * for it, this is equivalent to the device signaling wakeup, so the 1702 * system suspend operation should be aborted. 1703 */ 1704 if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) 1705 pm_wakeup_event(dev, 0); 1706 1707 if (pm_wakeup_pending()) { 1708 dev->power.direct_complete = false; 1709 async_error = -EBUSY; 1710 goto Complete; 1711 } 1712 1713 if (dev->power.syscore) 1714 goto Complete; 1715 1716 /* Avoid direct_complete to let wakeup_path propagate. */ 1717 if (device_may_wakeup(dev) || dev->power.wakeup_path) 1718 dev->power.direct_complete = false; 1719 1720 if (dev->power.direct_complete) { 1721 if (pm_runtime_status_suspended(dev)) { 1722 pm_runtime_disable(dev); 1723 if (pm_runtime_status_suspended(dev)) { 1724 pm_dev_dbg(dev, state, "direct-complete "); 1725 goto Complete; 1726 } 1727 1728 pm_runtime_enable(dev); 1729 } 1730 dev->power.direct_complete = false; 1731 } 1732 1733 dev->power.may_skip_resume = false; 1734 dev->power.must_resume = false; 1735 1736 dpm_watchdog_set(&wd, dev); 1737 device_lock(dev); 1738 1739 if (dev->pm_domain) { 1740 info = "power domain "; 1741 callback = pm_op(&dev->pm_domain->ops, state); 1742 goto Run; 1743 } 1744 1745 if (dev->type && dev->type->pm) { 1746 info = "type "; 1747 callback = pm_op(dev->type->pm, state); 1748 goto Run; 1749 } 1750 1751 if (dev->class && dev->class->pm) { 1752 info = "class "; 1753 callback = pm_op(dev->class->pm, state); 1754 goto Run; 1755 } 1756 1757 if (dev->bus) { 1758 if (dev->bus->pm) { 1759 info = "bus "; 1760 callback = pm_op(dev->bus->pm, state); 1761 } else if (dev->bus->suspend) { 1762 pm_dev_dbg(dev, state, "legacy bus "); 1763 error = legacy_suspend(dev, state, dev->bus->suspend, 1764 "legacy bus "); 1765 goto End; 1766 } 1767 } 1768 1769 Run: 1770 if (!callback && dev->driver && dev->driver->pm) { 1771 info = "driver "; 1772 callback = pm_op(dev->driver->pm, state); 1773 } 1774 1775 error = dpm_run_callback(callback, dev, state, info); 1776 1777 End: 1778 if (!error) { 1779 dev->power.is_suspended = true; 1780 if (device_may_wakeup(dev)) 1781 dev->power.wakeup_path = true; 1782 1783 dpm_propagate_wakeup_to_parent(dev); 1784 dpm_clear_superiors_direct_complete(dev); 1785 } 1786 1787 device_unlock(dev); 1788 dpm_watchdog_clear(&wd); 1789 1790 Complete: 1791 if (error) 1792 async_error = error; 1793 1794 complete_all(&dev->power.completion); 1795 TRACE_SUSPEND(error); 1796 return error; 1797 } 1798 1799 static void async_suspend(void *data, async_cookie_t cookie) 1800 { 1801 struct device *dev = (struct device *)data; 1802 int error; 1803 1804 error = __device_suspend(dev, pm_transition, true); 1805 if (error) { 1806 dpm_save_failed_dev(dev_name(dev)); 1807 pm_dev_err(dev, pm_transition, " async", error); 1808 } 1809 1810 put_device(dev); 1811 } 1812 1813 static int device_suspend(struct device *dev) 1814 { 1815 if (dpm_async_fn(dev, async_suspend)) 1816 return 0; 1817 1818 return __device_suspend(dev, pm_transition, false); 1819 } 1820 1821 /** 1822 * dpm_suspend - Execute "suspend" callbacks for all non-sysdev devices. 1823 * @state: PM transition of the system being carried out. 1824 */ 1825 int dpm_suspend(pm_message_t state) 1826 { 1827 ktime_t starttime = ktime_get(); 1828 int error = 0; 1829 1830 trace_suspend_resume(TPS("dpm_suspend"), state.event, true); 1831 might_sleep(); 1832 1833 devfreq_suspend(); 1834 cpufreq_suspend(); 1835 1836 mutex_lock(&dpm_list_mtx); 1837 pm_transition = state; 1838 async_error = 0; 1839 while (!list_empty(&dpm_prepared_list)) { 1840 struct device *dev = to_device(dpm_prepared_list.prev); 1841 1842 get_device(dev); 1843 mutex_unlock(&dpm_list_mtx); 1844 1845 error = device_suspend(dev); 1846 1847 mutex_lock(&dpm_list_mtx); 1848 if (error) { 1849 pm_dev_err(dev, state, "", error); 1850 dpm_save_failed_dev(dev_name(dev)); 1851 put_device(dev); 1852 break; 1853 } 1854 if (!list_empty(&dev->power.entry)) 1855 list_move(&dev->power.entry, &dpm_suspended_list); 1856 put_device(dev); 1857 if (async_error) 1858 break; 1859 } 1860 mutex_unlock(&dpm_list_mtx); 1861 async_synchronize_full(); 1862 if (!error) 1863 error = async_error; 1864 if (error) { 1865 suspend_stats.failed_suspend++; 1866 dpm_save_failed_step(SUSPEND_SUSPEND); 1867 } 1868 dpm_show_time(starttime, state, error, NULL); 1869 trace_suspend_resume(TPS("dpm_suspend"), state.event, false); 1870 return error; 1871 } 1872 1873 /** 1874 * device_prepare - Prepare a device for system power transition. 1875 * @dev: Device to handle. 1876 * @state: PM transition of the system being carried out. 1877 * 1878 * Execute the ->prepare() callback(s) for given device. No new children of the 1879 * device may be registered after this function has returned. 1880 */ 1881 static int device_prepare(struct device *dev, pm_message_t state) 1882 { 1883 int (*callback)(struct device *) = NULL; 1884 int ret = 0; 1885 1886 if (dev->power.syscore) 1887 return 0; 1888 1889 WARN_ON(!pm_runtime_enabled(dev) && 1890 dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND | 1891 DPM_FLAG_LEAVE_SUSPENDED)); 1892 1893 /* 1894 * If a device's parent goes into runtime suspend at the wrong time, 1895 * it won't be possible to resume the device. To prevent this we 1896 * block runtime suspend here, during the prepare phase, and allow 1897 * it again during the complete phase. 1898 */ 1899 pm_runtime_get_noresume(dev); 1900 1901 device_lock(dev); 1902 1903 dev->power.wakeup_path = false; 1904 1905 if (dev->power.no_pm_callbacks) 1906 goto unlock; 1907 1908 if (dev->pm_domain) 1909 callback = dev->pm_domain->ops.prepare; 1910 else if (dev->type && dev->type->pm) 1911 callback = dev->type->pm->prepare; 1912 else if (dev->class && dev->class->pm) 1913 callback = dev->class->pm->prepare; 1914 else if (dev->bus && dev->bus->pm) 1915 callback = dev->bus->pm->prepare; 1916 1917 if (!callback && dev->driver && dev->driver->pm) 1918 callback = dev->driver->pm->prepare; 1919 1920 if (callback) 1921 ret = callback(dev); 1922 1923 unlock: 1924 device_unlock(dev); 1925 1926 if (ret < 0) { 1927 suspend_report_result(callback, ret); 1928 pm_runtime_put(dev); 1929 return ret; 1930 } 1931 /* 1932 * A positive return value from ->prepare() means "this device appears 1933 * to be runtime-suspended and its state is fine, so if it really is 1934 * runtime-suspended, you can leave it in that state provided that you 1935 * will do the same thing with all of its descendants". This only 1936 * applies to suspend transitions, however. 1937 */ 1938 spin_lock_irq(&dev->power.lock); 1939 dev->power.direct_complete = state.event == PM_EVENT_SUSPEND && 1940 ((pm_runtime_suspended(dev) && ret > 0) || 1941 dev->power.no_pm_callbacks) && 1942 !dev_pm_test_driver_flags(dev, DPM_FLAG_NEVER_SKIP); 1943 spin_unlock_irq(&dev->power.lock); 1944 return 0; 1945 } 1946 1947 /** 1948 * dpm_prepare - Prepare all non-sysdev devices for a system PM transition. 1949 * @state: PM transition of the system being carried out. 1950 * 1951 * Execute the ->prepare() callback(s) for all devices. 1952 */ 1953 int dpm_prepare(pm_message_t state) 1954 { 1955 int error = 0; 1956 1957 trace_suspend_resume(TPS("dpm_prepare"), state.event, true); 1958 might_sleep(); 1959 1960 /* 1961 * Give a chance for the known devices to complete their probes, before 1962 * disable probing of devices. This sync point is important at least 1963 * at boot time + hibernation restore. 1964 */ 1965 wait_for_device_probe(); 1966 /* 1967 * It is unsafe if probing of devices will happen during suspend or 1968 * hibernation and system behavior will be unpredictable in this case. 1969 * So, let's prohibit device's probing here and defer their probes 1970 * instead. The normal behavior will be restored in dpm_complete(). 1971 */ 1972 device_block_probing(); 1973 1974 mutex_lock(&dpm_list_mtx); 1975 while (!list_empty(&dpm_list)) { 1976 struct device *dev = to_device(dpm_list.next); 1977 1978 get_device(dev); 1979 mutex_unlock(&dpm_list_mtx); 1980 1981 trace_device_pm_callback_start(dev, "", state.event); 1982 error = device_prepare(dev, state); 1983 trace_device_pm_callback_end(dev, error); 1984 1985 mutex_lock(&dpm_list_mtx); 1986 if (error) { 1987 if (error == -EAGAIN) { 1988 put_device(dev); 1989 error = 0; 1990 continue; 1991 } 1992 pr_info("Device %s not prepared for power transition: code %d\n", 1993 dev_name(dev), error); 1994 put_device(dev); 1995 break; 1996 } 1997 dev->power.is_prepared = true; 1998 if (!list_empty(&dev->power.entry)) 1999 list_move_tail(&dev->power.entry, &dpm_prepared_list); 2000 put_device(dev); 2001 } 2002 mutex_unlock(&dpm_list_mtx); 2003 trace_suspend_resume(TPS("dpm_prepare"), state.event, false); 2004 return error; 2005 } 2006 2007 /** 2008 * dpm_suspend_start - Prepare devices for PM transition and suspend them. 2009 * @state: PM transition of the system being carried out. 2010 * 2011 * Prepare all non-sysdev devices for system PM transition and execute "suspend" 2012 * callbacks for them. 2013 */ 2014 int dpm_suspend_start(pm_message_t state) 2015 { 2016 ktime_t starttime = ktime_get(); 2017 int error; 2018 2019 error = dpm_prepare(state); 2020 if (error) { 2021 suspend_stats.failed_prepare++; 2022 dpm_save_failed_step(SUSPEND_PREPARE); 2023 } else 2024 error = dpm_suspend(state); 2025 dpm_show_time(starttime, state, error, "start"); 2026 return error; 2027 } 2028 EXPORT_SYMBOL_GPL(dpm_suspend_start); 2029 2030 void __suspend_report_result(const char *function, void *fn, int ret) 2031 { 2032 if (ret) 2033 pr_err("%s(): %pS returns %d\n", function, fn, ret); 2034 } 2035 EXPORT_SYMBOL_GPL(__suspend_report_result); 2036 2037 /** 2038 * device_pm_wait_for_dev - Wait for suspend/resume of a device to complete. 2039 * @subordinate: Device that needs to wait for @dev. 2040 * @dev: Device to wait for. 2041 */ 2042 int device_pm_wait_for_dev(struct device *subordinate, struct device *dev) 2043 { 2044 dpm_wait(dev, subordinate->power.async_suspend); 2045 return async_error; 2046 } 2047 EXPORT_SYMBOL_GPL(device_pm_wait_for_dev); 2048 2049 /** 2050 * dpm_for_each_dev - device iterator. 2051 * @data: data for the callback. 2052 * @fn: function to be called for each device. 2053 * 2054 * Iterate over devices in dpm_list, and call @fn for each device, 2055 * passing it @data. 2056 */ 2057 void dpm_for_each_dev(void *data, void (*fn)(struct device *, void *)) 2058 { 2059 struct device *dev; 2060 2061 if (!fn) 2062 return; 2063 2064 device_pm_lock(); 2065 list_for_each_entry(dev, &dpm_list, power.entry) 2066 fn(dev, data); 2067 device_pm_unlock(); 2068 } 2069 EXPORT_SYMBOL_GPL(dpm_for_each_dev); 2070 2071 static bool pm_ops_is_empty(const struct dev_pm_ops *ops) 2072 { 2073 if (!ops) 2074 return true; 2075 2076 return !ops->prepare && 2077 !ops->suspend && 2078 !ops->suspend_late && 2079 !ops->suspend_noirq && 2080 !ops->resume_noirq && 2081 !ops->resume_early && 2082 !ops->resume && 2083 !ops->complete; 2084 } 2085 2086 void device_pm_check_callbacks(struct device *dev) 2087 { 2088 spin_lock_irq(&dev->power.lock); 2089 dev->power.no_pm_callbacks = 2090 (!dev->bus || (pm_ops_is_empty(dev->bus->pm) && 2091 !dev->bus->suspend && !dev->bus->resume)) && 2092 (!dev->class || pm_ops_is_empty(dev->class->pm)) && 2093 (!dev->type || pm_ops_is_empty(dev->type->pm)) && 2094 (!dev->pm_domain || pm_ops_is_empty(&dev->pm_domain->ops)) && 2095 (!dev->driver || (pm_ops_is_empty(dev->driver->pm) && 2096 !dev->driver->suspend && !dev->driver->resume)); 2097 spin_unlock_irq(&dev->power.lock); 2098 } 2099 2100 bool dev_pm_smart_suspend_and_suspended(struct device *dev) 2101 { 2102 return dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) && 2103 pm_runtime_status_suspended(dev); 2104 } 2105