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