xref: /linux/drivers/pmdomain/core.c (revision a96e40f4afdcb52a9c97a5465c964e010734d105)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * drivers/base/power/domain.c - Common code related to device power domains.
4  *
5  * Copyright (C) 2011 Rafael J. Wysocki <rjw@sisk.pl>, Renesas Electronics Corp.
6  */
7 #define pr_fmt(fmt) "PM: " fmt
8 
9 #include <linux/delay.h>
10 #include <linux/idr.h>
11 #include <linux/kernel.h>
12 #include <linux/io.h>
13 #include <linux/platform_device.h>
14 #include <linux/pm_opp.h>
15 #include <linux/pm_runtime.h>
16 #include <linux/pm_domain.h>
17 #include <linux/pm_qos.h>
18 #include <linux/pm_clock.h>
19 #include <linux/slab.h>
20 #include <linux/err.h>
21 #include <linux/sched.h>
22 #include <linux/suspend.h>
23 #include <linux/export.h>
24 #include <linux/cpu.h>
25 #include <linux/debugfs.h>
26 
27 /* Provides a unique ID for each genpd device */
28 static DEFINE_IDA(genpd_ida);
29 
30 /* The bus for genpd_providers. */
31 static const struct bus_type genpd_provider_bus_type = {
32 	.name		= "genpd_provider",
33 };
34 
35 /* The parent for genpd_provider devices. */
36 static struct device *genpd_provider_bus;
37 
38 #define GENPD_RETRY_MAX_MS	250		/* Approximate */
39 
40 #define GENPD_DEV_CALLBACK(genpd, type, callback, dev)		\
41 ({								\
42 	type (*__routine)(struct device *__d); 			\
43 	type __ret = (type)0;					\
44 								\
45 	__routine = genpd->dev_ops.callback; 			\
46 	if (__routine) {					\
47 		__ret = __routine(dev); 			\
48 	}							\
49 	__ret;							\
50 })
51 
52 static LIST_HEAD(gpd_list);
53 static DEFINE_MUTEX(gpd_list_lock);
54 
55 struct genpd_lock_ops {
56 	void (*lock)(struct generic_pm_domain *genpd);
57 	void (*lock_nested)(struct generic_pm_domain *genpd, int depth);
58 	int (*lock_interruptible)(struct generic_pm_domain *genpd);
59 	void (*unlock)(struct generic_pm_domain *genpd);
60 };
61 
62 static void genpd_lock_mtx(struct generic_pm_domain *genpd)
63 {
64 	mutex_lock(&genpd->mlock);
65 }
66 
67 static void genpd_lock_nested_mtx(struct generic_pm_domain *genpd,
68 					int depth)
69 {
70 	mutex_lock_nested(&genpd->mlock, depth);
71 }
72 
73 static int genpd_lock_interruptible_mtx(struct generic_pm_domain *genpd)
74 {
75 	return mutex_lock_interruptible(&genpd->mlock);
76 }
77 
78 static void genpd_unlock_mtx(struct generic_pm_domain *genpd)
79 {
80 	return mutex_unlock(&genpd->mlock);
81 }
82 
83 static const struct genpd_lock_ops genpd_mtx_ops = {
84 	.lock = genpd_lock_mtx,
85 	.lock_nested = genpd_lock_nested_mtx,
86 	.lock_interruptible = genpd_lock_interruptible_mtx,
87 	.unlock = genpd_unlock_mtx,
88 };
89 
90 static void genpd_lock_spin(struct generic_pm_domain *genpd)
91 	__acquires(&genpd->slock)
92 {
93 	unsigned long flags;
94 
95 	spin_lock_irqsave(&genpd->slock, flags);
96 	genpd->lock_flags = flags;
97 }
98 
99 static void genpd_lock_nested_spin(struct generic_pm_domain *genpd,
100 					int depth)
101 	__acquires(&genpd->slock)
102 {
103 	unsigned long flags;
104 
105 	spin_lock_irqsave_nested(&genpd->slock, flags, depth);
106 	genpd->lock_flags = flags;
107 }
108 
109 static int genpd_lock_interruptible_spin(struct generic_pm_domain *genpd)
110 	__acquires(&genpd->slock)
111 {
112 	unsigned long flags;
113 
114 	spin_lock_irqsave(&genpd->slock, flags);
115 	genpd->lock_flags = flags;
116 	return 0;
117 }
118 
119 static void genpd_unlock_spin(struct generic_pm_domain *genpd)
120 	__releases(&genpd->slock)
121 {
122 	spin_unlock_irqrestore(&genpd->slock, genpd->lock_flags);
123 }
124 
125 static const struct genpd_lock_ops genpd_spin_ops = {
126 	.lock = genpd_lock_spin,
127 	.lock_nested = genpd_lock_nested_spin,
128 	.lock_interruptible = genpd_lock_interruptible_spin,
129 	.unlock = genpd_unlock_spin,
130 };
131 
132 static void genpd_lock_raw_spin(struct generic_pm_domain *genpd)
133 	__acquires(&genpd->raw_slock)
134 {
135 	unsigned long flags;
136 
137 	raw_spin_lock_irqsave(&genpd->raw_slock, flags);
138 	genpd->raw_lock_flags = flags;
139 }
140 
141 static void genpd_lock_nested_raw_spin(struct generic_pm_domain *genpd,
142 					int depth)
143 	__acquires(&genpd->raw_slock)
144 {
145 	unsigned long flags;
146 
147 	raw_spin_lock_irqsave_nested(&genpd->raw_slock, flags, depth);
148 	genpd->raw_lock_flags = flags;
149 }
150 
151 static int genpd_lock_interruptible_raw_spin(struct generic_pm_domain *genpd)
152 	__acquires(&genpd->raw_slock)
153 {
154 	unsigned long flags;
155 
156 	raw_spin_lock_irqsave(&genpd->raw_slock, flags);
157 	genpd->raw_lock_flags = flags;
158 	return 0;
159 }
160 
161 static void genpd_unlock_raw_spin(struct generic_pm_domain *genpd)
162 	__releases(&genpd->raw_slock)
163 {
164 	raw_spin_unlock_irqrestore(&genpd->raw_slock, genpd->raw_lock_flags);
165 }
166 
167 static const struct genpd_lock_ops genpd_raw_spin_ops = {
168 	.lock = genpd_lock_raw_spin,
169 	.lock_nested = genpd_lock_nested_raw_spin,
170 	.lock_interruptible = genpd_lock_interruptible_raw_spin,
171 	.unlock = genpd_unlock_raw_spin,
172 };
173 
174 #define genpd_lock(p)			p->lock_ops->lock(p)
175 #define genpd_lock_nested(p, d)		p->lock_ops->lock_nested(p, d)
176 #define genpd_lock_interruptible(p)	p->lock_ops->lock_interruptible(p)
177 #define genpd_unlock(p)			p->lock_ops->unlock(p)
178 
179 #define genpd_status_on(genpd)		(genpd->status == GENPD_STATE_ON)
180 #define genpd_is_irq_safe(genpd)	(genpd->flags & GENPD_FLAG_IRQ_SAFE)
181 #define genpd_is_always_on(genpd)	(genpd->flags & GENPD_FLAG_ALWAYS_ON)
182 #define genpd_is_active_wakeup(genpd)	(genpd->flags & GENPD_FLAG_ACTIVE_WAKEUP)
183 #define genpd_is_cpu_domain(genpd)	(genpd->flags & GENPD_FLAG_CPU_DOMAIN)
184 #define genpd_is_rpm_always_on(genpd)	(genpd->flags & GENPD_FLAG_RPM_ALWAYS_ON)
185 #define genpd_is_opp_table_fw(genpd)	(genpd->flags & GENPD_FLAG_OPP_TABLE_FW)
186 #define genpd_is_dev_name_fw(genpd)	(genpd->flags & GENPD_FLAG_DEV_NAME_FW)
187 #define genpd_is_no_sync_state(genpd)	(genpd->flags & GENPD_FLAG_NO_SYNC_STATE)
188 #define genpd_is_no_stay_on(genpd)	(genpd->flags & GENPD_FLAG_NO_STAY_ON)
189 
190 static inline bool irq_safe_dev_in_sleep_domain(struct device *dev,
191 		const struct generic_pm_domain *genpd)
192 {
193 	bool ret;
194 
195 	ret = pm_runtime_is_irq_safe(dev) && !genpd_is_irq_safe(genpd);
196 
197 	/*
198 	 * Warn once if an IRQ safe device is attached to a domain, which
199 	 * callbacks are allowed to sleep. This indicates a suboptimal
200 	 * configuration for PM, but it doesn't matter for an always on domain.
201 	 */
202 	if (genpd_is_always_on(genpd) || genpd_is_rpm_always_on(genpd))
203 		return ret;
204 
205 	if (ret)
206 		dev_warn_once(dev, "PM domain %s will not be powered off\n",
207 			      dev_name(&genpd->dev));
208 
209 	return ret;
210 }
211 
212 static int genpd_runtime_suspend(struct device *dev);
213 
214 /*
215  * Get the generic PM domain for a particular struct device.
216  * This validates the struct device pointer, the PM domain pointer,
217  * and checks that the PM domain pointer is a real generic PM domain.
218  * Any failure results in NULL being returned.
219  */
220 static struct generic_pm_domain *dev_to_genpd_safe(struct device *dev)
221 {
222 	if (IS_ERR_OR_NULL(dev) || IS_ERR_OR_NULL(dev->pm_domain))
223 		return NULL;
224 
225 	/* A genpd's always have its ->runtime_suspend() callback assigned. */
226 	if (dev->pm_domain->ops.runtime_suspend == genpd_runtime_suspend)
227 		return pd_to_genpd(dev->pm_domain);
228 
229 	return NULL;
230 }
231 
232 /*
233  * This should only be used where we are certain that the pm_domain
234  * attached to the device is a genpd domain.
235  */
236 static struct generic_pm_domain *dev_to_genpd(struct device *dev)
237 {
238 	if (IS_ERR_OR_NULL(dev->pm_domain))
239 		return ERR_PTR(-EINVAL);
240 
241 	return pd_to_genpd(dev->pm_domain);
242 }
243 
244 struct device *dev_to_genpd_dev(struct device *dev)
245 {
246 	struct generic_pm_domain *genpd = dev_to_genpd(dev);
247 
248 	if (IS_ERR(genpd))
249 		return ERR_CAST(genpd);
250 
251 	return &genpd->dev;
252 }
253 
254 static int genpd_stop_dev(const struct generic_pm_domain *genpd,
255 			  struct device *dev)
256 {
257 	return GENPD_DEV_CALLBACK(genpd, int, stop, dev);
258 }
259 
260 static int genpd_start_dev(const struct generic_pm_domain *genpd,
261 			   struct device *dev)
262 {
263 	return GENPD_DEV_CALLBACK(genpd, int, start, dev);
264 }
265 
266 static bool genpd_sd_counter_dec(struct generic_pm_domain *genpd)
267 {
268 	bool ret = false;
269 
270 	if (!WARN_ON(atomic_read(&genpd->sd_count) == 0))
271 		ret = !!atomic_dec_and_test(&genpd->sd_count);
272 
273 	return ret;
274 }
275 
276 static void genpd_sd_counter_inc(struct generic_pm_domain *genpd)
277 {
278 	atomic_inc(&genpd->sd_count);
279 	smp_mb__after_atomic();
280 }
281 
282 #ifdef CONFIG_DEBUG_FS
283 static struct dentry *genpd_debugfs_dir;
284 
285 static void genpd_debug_add(struct generic_pm_domain *genpd);
286 
287 static void genpd_debug_remove(struct generic_pm_domain *genpd)
288 {
289 	if (!genpd_debugfs_dir)
290 		return;
291 
292 	debugfs_lookup_and_remove(dev_name(&genpd->dev), genpd_debugfs_dir);
293 }
294 
295 static void genpd_update_accounting(struct generic_pm_domain *genpd)
296 {
297 	u64 delta, now;
298 
299 	now = ktime_get_mono_fast_ns();
300 	if (now <= genpd->accounting_time)
301 		return;
302 
303 	delta = now - genpd->accounting_time;
304 
305 	/*
306 	 * If genpd->status is active, it means we are just
307 	 * out of off and so update the idle time and vice
308 	 * versa.
309 	 */
310 	if (genpd->status == GENPD_STATE_ON)
311 		genpd->states[genpd->state_idx].idle_time += delta;
312 	else
313 		genpd->on_time += delta;
314 
315 	genpd->accounting_time = now;
316 }
317 
318 static void genpd_reflect_residency(struct generic_pm_domain *genpd)
319 {
320 	struct genpd_governor_data *gd = genpd->gd;
321 	struct genpd_power_state *state, *next_state;
322 	unsigned int state_idx;
323 	s64 sleep_ns, target_ns;
324 
325 	if (!gd || !gd->reflect_residency)
326 		return;
327 
328 	sleep_ns = ktime_to_ns(ktime_sub(ktime_get(), gd->last_enter));
329 	state_idx = genpd->state_idx;
330 	state = &genpd->states[state_idx];
331 	target_ns = state->power_off_latency_ns + state->residency_ns;
332 
333 	if (sleep_ns < target_ns) {
334 		state->above++;
335 	} else if (state_idx < (genpd->state_count -1)) {
336 		next_state = &genpd->states[state_idx + 1];
337 		target_ns = next_state->power_off_latency_ns +
338 			next_state->residency_ns;
339 
340 		if (sleep_ns >= target_ns)
341 			state->below++;
342 	}
343 
344 	gd->reflect_residency = false;
345 }
346 #else
347 static inline void genpd_debug_add(struct generic_pm_domain *genpd) {}
348 static inline void genpd_debug_remove(struct generic_pm_domain *genpd) {}
349 static inline void genpd_update_accounting(struct generic_pm_domain *genpd) {}
350 static inline void genpd_reflect_residency(struct generic_pm_domain *genpd) {}
351 #endif
352 
353 static int _genpd_reeval_performance_state(struct generic_pm_domain *genpd,
354 					   unsigned int state)
355 {
356 	struct generic_pm_domain_data *pd_data;
357 	struct pm_domain_data *pdd;
358 	struct gpd_link *link;
359 
360 	/* New requested state is same as Max requested state */
361 	if (state == genpd->performance_state)
362 		return state;
363 
364 	/* New requested state is higher than Max requested state */
365 	if (state > genpd->performance_state)
366 		return state;
367 
368 	/* Traverse all devices within the domain */
369 	list_for_each_entry(pdd, &genpd->dev_list, list_node) {
370 		pd_data = to_gpd_data(pdd);
371 
372 		if (pd_data->performance_state > state)
373 			state = pd_data->performance_state;
374 	}
375 
376 	/*
377 	 * Traverse all sub-domains within the domain. This can be
378 	 * done without any additional locking as the link->performance_state
379 	 * field is protected by the parent genpd->lock, which is already taken.
380 	 *
381 	 * Also note that link->performance_state (subdomain's performance state
382 	 * requirement to parent domain) is different from
383 	 * link->child->performance_state (current performance state requirement
384 	 * of the devices/sub-domains of the subdomain) and so can have a
385 	 * different value.
386 	 *
387 	 * Note that we also take vote from powered-off sub-domains into account
388 	 * as the same is done for devices right now.
389 	 */
390 	list_for_each_entry(link, &genpd->parent_links, parent_node) {
391 		if (link->performance_state > state)
392 			state = link->performance_state;
393 	}
394 
395 	return state;
396 }
397 
398 static int genpd_xlate_performance_state(struct generic_pm_domain *genpd,
399 					 struct generic_pm_domain *parent,
400 					 unsigned int pstate)
401 {
402 	if (!parent->set_performance_state)
403 		return pstate;
404 
405 	return dev_pm_opp_xlate_performance_state(genpd->opp_table,
406 						  parent->opp_table,
407 						  pstate);
408 }
409 
410 static int _genpd_set_performance_state(struct generic_pm_domain *genpd,
411 					unsigned int state, int depth);
412 
413 static void _genpd_rollback_parent_state(struct gpd_link *link, int depth)
414 {
415 	struct generic_pm_domain *parent = link->parent;
416 	int parent_state;
417 
418 	genpd_lock_nested(parent, depth + 1);
419 
420 	parent_state = link->prev_performance_state;
421 	link->performance_state = parent_state;
422 
423 	parent_state = _genpd_reeval_performance_state(parent, parent_state);
424 	if (_genpd_set_performance_state(parent, parent_state, depth + 1)) {
425 		pr_err("%s: Failed to roll back to %d performance state\n",
426 		       parent->name, parent_state);
427 	}
428 
429 	genpd_unlock(parent);
430 }
431 
432 static int _genpd_set_parent_state(struct generic_pm_domain *genpd,
433 				   struct gpd_link *link,
434 				   unsigned int state, int depth)
435 {
436 	struct generic_pm_domain *parent = link->parent;
437 	int parent_state, ret;
438 
439 	/* Find parent's performance state */
440 	ret = genpd_xlate_performance_state(genpd, parent, state);
441 	if (unlikely(ret < 0))
442 		return ret;
443 
444 	parent_state = ret;
445 
446 	genpd_lock_nested(parent, depth + 1);
447 
448 	link->prev_performance_state = link->performance_state;
449 	link->performance_state = parent_state;
450 
451 	parent_state = _genpd_reeval_performance_state(parent, parent_state);
452 	ret = _genpd_set_performance_state(parent, parent_state, depth + 1);
453 	if (ret)
454 		link->performance_state = link->prev_performance_state;
455 
456 	genpd_unlock(parent);
457 
458 	return ret;
459 }
460 
461 static int _genpd_set_performance_state(struct generic_pm_domain *genpd,
462 					unsigned int state, int depth)
463 {
464 	struct gpd_link *link = NULL;
465 	int ret;
466 
467 	if (state == genpd->performance_state)
468 		return 0;
469 
470 	/* When scaling up, propagate to parents first in normal order */
471 	if (state > genpd->performance_state) {
472 		list_for_each_entry(link, &genpd->child_links, child_node) {
473 			ret = _genpd_set_parent_state(genpd, link, state, depth);
474 			if (ret)
475 				goto rollback_parents_up;
476 		}
477 	}
478 
479 	if (genpd->set_performance_state) {
480 		ret = genpd->set_performance_state(genpd, state);
481 		if (ret) {
482 			if (link)
483 				goto rollback_parents_up;
484 			return ret;
485 		}
486 	}
487 
488 	/* When scaling down, propagate to parents last in reverse order */
489 	if (state < genpd->performance_state) {
490 		list_for_each_entry_reverse(link, &genpd->child_links, child_node) {
491 			ret = _genpd_set_parent_state(genpd, link, state, depth);
492 			if (ret)
493 				goto rollback_parents_down;
494 		}
495 	}
496 
497 	genpd->performance_state = state;
498 	return 0;
499 
500 rollback_parents_up:
501 	list_for_each_entry_continue_reverse(link, &genpd->child_links, child_node)
502 		_genpd_rollback_parent_state(link, depth);
503 	return ret;
504 rollback_parents_down:
505 	list_for_each_entry_continue(link, &genpd->child_links, child_node)
506 		_genpd_rollback_parent_state(link, depth);
507 	return ret;
508 }
509 
510 static int genpd_set_performance_state(struct device *dev, unsigned int state)
511 {
512 	struct generic_pm_domain *genpd = dev_to_genpd(dev);
513 	struct generic_pm_domain_data *gpd_data = dev_gpd_data(dev);
514 	unsigned int prev_state;
515 	int ret;
516 
517 	prev_state = gpd_data->performance_state;
518 	if (prev_state == state)
519 		return 0;
520 
521 	gpd_data->performance_state = state;
522 	state = _genpd_reeval_performance_state(genpd, state);
523 
524 	ret = _genpd_set_performance_state(genpd, state, 0);
525 	if (ret)
526 		gpd_data->performance_state = prev_state;
527 
528 	return ret;
529 }
530 
531 static int genpd_drop_performance_state(struct device *dev)
532 {
533 	unsigned int prev_state = dev_gpd_data(dev)->performance_state;
534 
535 	if (!genpd_set_performance_state(dev, 0))
536 		return prev_state;
537 
538 	return 0;
539 }
540 
541 static void genpd_restore_performance_state(struct device *dev,
542 					    unsigned int state)
543 {
544 	if (state)
545 		genpd_set_performance_state(dev, state);
546 }
547 
548 static int genpd_dev_pm_set_performance_state(struct device *dev,
549 					      unsigned int state)
550 {
551 	struct generic_pm_domain *genpd = dev_to_genpd(dev);
552 	int ret = 0;
553 
554 	genpd_lock(genpd);
555 	if (pm_runtime_suspended(dev)) {
556 		dev_gpd_data(dev)->rpm_pstate = state;
557 	} else {
558 		ret = genpd_set_performance_state(dev, state);
559 		if (!ret)
560 			dev_gpd_data(dev)->rpm_pstate = 0;
561 	}
562 	genpd_unlock(genpd);
563 
564 	return ret;
565 }
566 
567 /**
568  * dev_pm_genpd_set_performance_state- Set performance state of device's power
569  * domain.
570  *
571  * @dev: Device for which the performance-state needs to be set.
572  * @state: Target performance state of the device. This can be set as 0 when the
573  *	   device doesn't have any performance state constraints left (And so
574  *	   the device wouldn't participate anymore to find the target
575  *	   performance state of the genpd).
576  *
577  * It is assumed that the users guarantee that the genpd wouldn't be detached
578  * while this routine is getting called.
579  *
580  * Returns 0 on success and negative error values on failures.
581  */
582 int dev_pm_genpd_set_performance_state(struct device *dev, unsigned int state)
583 {
584 	struct generic_pm_domain *genpd;
585 
586 	genpd = dev_to_genpd_safe(dev);
587 	if (!genpd)
588 		return -ENODEV;
589 
590 	if (WARN_ON(!dev->power.subsys_data ||
591 		     !dev->power.subsys_data->domain_data))
592 		return -EINVAL;
593 
594 	return genpd_dev_pm_set_performance_state(dev, state);
595 }
596 EXPORT_SYMBOL_GPL(dev_pm_genpd_set_performance_state);
597 
598 /**
599  * dev_pm_genpd_set_next_wakeup - Notify PM framework of an impending wakeup.
600  *
601  * @dev: Device to handle
602  * @next: impending interrupt/wakeup for the device
603  *
604  *
605  * Allow devices to inform of the next wakeup. It's assumed that the users
606  * guarantee that the genpd wouldn't be detached while this routine is getting
607  * called. Additionally, it's also assumed that @dev isn't runtime suspended
608  * (RPM_SUSPENDED)."
609  * Although devices are expected to update the next_wakeup after the end of
610  * their usecase as well, it is possible the devices themselves may not know
611  * about that, so stale @next will be ignored when powering off the domain.
612  */
613 void dev_pm_genpd_set_next_wakeup(struct device *dev, ktime_t next)
614 {
615 	struct generic_pm_domain *genpd;
616 	struct gpd_timing_data *td;
617 
618 	genpd = dev_to_genpd_safe(dev);
619 	if (!genpd)
620 		return;
621 
622 	td = to_gpd_data(dev->power.subsys_data->domain_data)->td;
623 	if (td)
624 		td->next_wakeup = next;
625 }
626 EXPORT_SYMBOL_GPL(dev_pm_genpd_set_next_wakeup);
627 
628 /**
629  * dev_pm_genpd_get_next_hrtimer - Return the next_hrtimer for the genpd
630  * @dev: A device that is attached to the genpd.
631  *
632  * This routine should typically be called for a device, at the point of when a
633  * GENPD_NOTIFY_PRE_OFF notification has been sent for it.
634  *
635  * Returns the aggregated value of the genpd's next hrtimer or KTIME_MAX if no
636  * valid value have been set.
637  */
638 ktime_t dev_pm_genpd_get_next_hrtimer(struct device *dev)
639 {
640 	struct generic_pm_domain *genpd;
641 
642 	genpd = dev_to_genpd_safe(dev);
643 	if (!genpd)
644 		return KTIME_MAX;
645 
646 	if (genpd->gd)
647 		return genpd->gd->next_hrtimer;
648 
649 	return KTIME_MAX;
650 }
651 EXPORT_SYMBOL_GPL(dev_pm_genpd_get_next_hrtimer);
652 
653 /*
654  * dev_pm_genpd_synced_poweroff - Next power off should be synchronous
655  *
656  * @dev: A device that is attached to the genpd.
657  *
658  * Allows a consumer of the genpd to notify the provider that the next power off
659  * should be synchronous.
660  *
661  * It is assumed that the users guarantee that the genpd wouldn't be detached
662  * while this routine is getting called.
663  */
664 void dev_pm_genpd_synced_poweroff(struct device *dev)
665 {
666 	struct generic_pm_domain *genpd;
667 
668 	genpd = dev_to_genpd_safe(dev);
669 	if (!genpd)
670 		return;
671 
672 	genpd_lock(genpd);
673 	genpd->synced_poweroff = true;
674 	genpd_unlock(genpd);
675 }
676 EXPORT_SYMBOL_GPL(dev_pm_genpd_synced_poweroff);
677 
678 /**
679  * dev_pm_genpd_set_hwmode() - Set the HW mode for the device and its PM domain.
680  *
681  * @dev: Device for which the HW-mode should be changed.
682  * @enable: Value to set or unset the HW-mode.
683  *
684  * Some PM domains can rely on HW signals to control the power for a device. To
685  * allow a consumer driver to switch the behaviour for its device in runtime,
686  * which may be beneficial from a latency or energy point of view, this function
687  * may be called.
688  *
689  * It is assumed that the users guarantee that the genpd wouldn't be detached
690  * while this routine is getting called.
691  *
692  * Return: Returns 0 on success and negative error values on failures.
693  */
694 int dev_pm_genpd_set_hwmode(struct device *dev, bool enable)
695 {
696 	struct generic_pm_domain *genpd;
697 	int ret = 0;
698 
699 	genpd = dev_to_genpd_safe(dev);
700 	if (!genpd)
701 		return -ENODEV;
702 
703 	if (!genpd->set_hwmode_dev)
704 		return -EOPNOTSUPP;
705 
706 	genpd_lock(genpd);
707 
708 	if (dev_gpd_data(dev)->hw_mode == enable)
709 		goto out;
710 
711 	ret = genpd->set_hwmode_dev(genpd, dev, enable);
712 	if (!ret)
713 		dev_gpd_data(dev)->hw_mode = enable;
714 
715 out:
716 	genpd_unlock(genpd);
717 	return ret;
718 }
719 EXPORT_SYMBOL_GPL(dev_pm_genpd_set_hwmode);
720 
721 /**
722  * dev_pm_genpd_get_hwmode() - Get the HW mode setting for the device.
723  *
724  * @dev: Device for which the current HW-mode setting should be fetched.
725  *
726  * This helper function allows consumer drivers to fetch the current HW mode
727  * setting of its the device.
728  *
729  * It is assumed that the users guarantee that the genpd wouldn't be detached
730  * while this routine is getting called.
731  *
732  * Return: Returns the HW mode setting of device from SW cached hw_mode.
733  */
734 bool dev_pm_genpd_get_hwmode(struct device *dev)
735 {
736 	return dev_gpd_data(dev)->hw_mode;
737 }
738 EXPORT_SYMBOL_GPL(dev_pm_genpd_get_hwmode);
739 
740 /**
741  * dev_pm_genpd_rpm_always_on() - Control if the PM domain can be powered off.
742  *
743  * @dev: Device for which the PM domain may need to stay on for.
744  * @on: Value to set or unset for the condition.
745  *
746  * For some usecases a consumer driver requires its device to remain power-on
747  * from the PM domain perspective during runtime. This function allows the
748  * behaviour to be dynamically controlled for a device attached to a genpd.
749  *
750  * It is assumed that the users guarantee that the genpd wouldn't be detached
751  * while this routine is getting called.
752  *
753  * Return: Returns 0 on success and negative error values on failures.
754  */
755 int dev_pm_genpd_rpm_always_on(struct device *dev, bool on)
756 {
757 	struct generic_pm_domain *genpd;
758 
759 	genpd = dev_to_genpd_safe(dev);
760 	if (!genpd)
761 		return -ENODEV;
762 
763 	genpd_lock(genpd);
764 	dev_gpd_data(dev)->rpm_always_on = on;
765 	genpd_unlock(genpd);
766 
767 	return 0;
768 }
769 EXPORT_SYMBOL_GPL(dev_pm_genpd_rpm_always_on);
770 
771 /**
772  * dev_pm_genpd_is_on() - Get device's current power domain status
773  *
774  * @dev: Device to get the current power status
775  *
776  * This function checks whether the generic power domain associated with the
777  * given device is on or not by verifying if genpd_status_on equals
778  * GENPD_STATE_ON.
779  *
780  * Note: this function returns the power status of the genpd at the time of the
781  * call. The power status may change after due to activity from other devices
782  * sharing the same genpd. Therefore, this information should not be relied for
783  * long-term decisions about the device power state.
784  *
785  * Return: 'true' if the device's power domain is on, 'false' otherwise.
786  */
787 bool dev_pm_genpd_is_on(struct device *dev)
788 {
789 	struct generic_pm_domain *genpd;
790 	bool is_on;
791 
792 	genpd = dev_to_genpd_safe(dev);
793 	if (!genpd)
794 		return false;
795 
796 	genpd_lock(genpd);
797 	is_on = genpd_status_on(genpd);
798 	genpd_unlock(genpd);
799 
800 	return is_on;
801 }
802 EXPORT_SYMBOL_GPL(dev_pm_genpd_is_on);
803 
804 /**
805  * pm_genpd_inc_rejected() - Adjust the rejected/usage counts for an idle-state.
806  *
807  * @genpd: The PM domain the idle-state belongs to.
808  * @state_idx: The index of the idle-state that failed.
809  *
810  * In some special cases the ->power_off() callback is asynchronously powering
811  * off the PM domain, leading to that it may return zero to indicate success,
812  * even though the actual power-off could fail. To account for this correctly in
813  * the rejected/usage counts for the idle-state statistics, users can call this
814  * function to adjust the values.
815  *
816  * It is assumed that the users guarantee that the genpd doesn't get removed
817  * while this routine is getting called.
818  */
819 void pm_genpd_inc_rejected(struct generic_pm_domain *genpd,
820 			   unsigned int state_idx)
821 {
822 	genpd_lock(genpd);
823 	genpd->states[genpd->state_idx].rejected++;
824 	genpd->states[genpd->state_idx].usage--;
825 	genpd_unlock(genpd);
826 }
827 EXPORT_SYMBOL_GPL(pm_genpd_inc_rejected);
828 
829 static int _genpd_power_on(struct generic_pm_domain *genpd, bool timed)
830 {
831 	unsigned int state_idx = genpd->state_idx;
832 	ktime_t time_start;
833 	s64 elapsed_ns;
834 	int ret;
835 
836 	/* Notify consumers that we are about to power on. */
837 	ret = raw_notifier_call_chain_robust(&genpd->power_notifiers,
838 					     GENPD_NOTIFY_PRE_ON,
839 					     GENPD_NOTIFY_OFF, NULL);
840 	ret = notifier_to_errno(ret);
841 	if (ret)
842 		return ret;
843 
844 	if (!genpd->power_on)
845 		goto out;
846 
847 	timed = timed && genpd->gd && !genpd->states[state_idx].fwnode;
848 	if (!timed) {
849 		ret = genpd->power_on(genpd);
850 		if (ret)
851 			goto err;
852 
853 		goto out;
854 	}
855 
856 	time_start = ktime_get();
857 	ret = genpd->power_on(genpd);
858 	if (ret)
859 		goto err;
860 
861 	elapsed_ns = ktime_to_ns(ktime_sub(ktime_get(), time_start));
862 	if (elapsed_ns <= genpd->states[state_idx].power_on_latency_ns)
863 		goto out;
864 
865 	genpd->states[state_idx].power_on_latency_ns = elapsed_ns;
866 	genpd->gd->max_off_time_changed = true;
867 	pr_debug("%s: Power-%s latency exceeded, new value %lld ns\n",
868 		 dev_name(&genpd->dev), "on", elapsed_ns);
869 
870 out:
871 	raw_notifier_call_chain(&genpd->power_notifiers, GENPD_NOTIFY_ON, NULL);
872 	genpd->synced_poweroff = false;
873 	return 0;
874 err:
875 	raw_notifier_call_chain(&genpd->power_notifiers, GENPD_NOTIFY_OFF,
876 				NULL);
877 	return ret;
878 }
879 
880 static int _genpd_power_off(struct generic_pm_domain *genpd, bool timed)
881 {
882 	unsigned int state_idx = genpd->state_idx;
883 	ktime_t time_start;
884 	s64 elapsed_ns;
885 	int ret;
886 
887 	/* Notify consumers that we are about to power off. */
888 	ret = raw_notifier_call_chain_robust(&genpd->power_notifiers,
889 					     GENPD_NOTIFY_PRE_OFF,
890 					     GENPD_NOTIFY_ON, NULL);
891 	ret = notifier_to_errno(ret);
892 	if (ret)
893 		return ret;
894 
895 	if (!genpd->power_off)
896 		goto out;
897 
898 	timed = timed && genpd->gd && !genpd->states[state_idx].fwnode;
899 	if (!timed) {
900 		ret = genpd->power_off(genpd);
901 		if (ret)
902 			goto busy;
903 
904 		goto out;
905 	}
906 
907 	time_start = ktime_get();
908 	ret = genpd->power_off(genpd);
909 	if (ret)
910 		goto busy;
911 
912 	elapsed_ns = ktime_to_ns(ktime_sub(ktime_get(), time_start));
913 	if (elapsed_ns <= genpd->states[state_idx].power_off_latency_ns)
914 		goto out;
915 
916 	genpd->states[state_idx].power_off_latency_ns = elapsed_ns;
917 	genpd->gd->max_off_time_changed = true;
918 	pr_debug("%s: Power-%s latency exceeded, new value %lld ns\n",
919 		 dev_name(&genpd->dev), "off", elapsed_ns);
920 
921 out:
922 	raw_notifier_call_chain(&genpd->power_notifiers, GENPD_NOTIFY_OFF,
923 				NULL);
924 	return 0;
925 busy:
926 	raw_notifier_call_chain(&genpd->power_notifiers, GENPD_NOTIFY_ON, NULL);
927 	return ret;
928 }
929 
930 /**
931  * genpd_queue_power_off_work - Queue up the execution of genpd_power_off().
932  * @genpd: PM domain to power off.
933  *
934  * Queue up the execution of genpd_power_off() unless it's already been done
935  * before.
936  */
937 static void genpd_queue_power_off_work(struct generic_pm_domain *genpd)
938 {
939 	queue_work(pm_wq, &genpd->power_off_work);
940 }
941 
942 /**
943  * genpd_power_off - Remove power from a given PM domain.
944  * @genpd: PM domain to power down.
945  * @one_dev_on: If invoked from genpd's ->runtime_suspend|resume() callback, the
946  * RPM status of the releated device is in an intermediate state, not yet turned
947  * into RPM_SUSPENDED. This means genpd_power_off() must allow one device to not
948  * be RPM_SUSPENDED, while it tries to power off the PM domain.
949  * @depth: nesting count for lockdep.
950  *
951  * If all of the @genpd's devices have been suspended and all of its subdomains
952  * have been powered down, remove power from @genpd.
953  */
954 static void genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on,
955 			    unsigned int depth)
956 {
957 	struct pm_domain_data *pdd;
958 	struct gpd_link *link;
959 	unsigned int not_suspended = 0;
960 
961 	/*
962 	 * Do not try to power off the domain in the following situations:
963 	 * The domain is already in the "power off" state.
964 	 * System suspend is in progress.
965 	 * The domain is configured as always on.
966 	 * The domain was on at boot and still need to stay on.
967 	 * The domain has a subdomain being powered on.
968 	 */
969 	if (!genpd_status_on(genpd) || genpd->prepared_count > 0 ||
970 	    genpd_is_always_on(genpd) || genpd_is_rpm_always_on(genpd) ||
971 	    genpd->stay_on || atomic_read(&genpd->sd_count) > 0)
972 		return;
973 
974 	/*
975 	 * The children must be in their deepest (powered-off) states to allow
976 	 * the parent to be powered off. Note that, there's no need for
977 	 * additional locking, as powering on a child, requires the parent's
978 	 * lock to be acquired first.
979 	 */
980 	list_for_each_entry(link, &genpd->parent_links, parent_node) {
981 		struct generic_pm_domain *child = link->child;
982 		if (child->state_idx < child->state_count - 1)
983 			return;
984 	}
985 
986 	list_for_each_entry(pdd, &genpd->dev_list, list_node) {
987 		/*
988 		 * Do not allow PM domain to be powered off, when an IRQ safe
989 		 * device is part of a non-IRQ safe domain.
990 		 */
991 		if (!pm_runtime_suspended(pdd->dev) ||
992 			irq_safe_dev_in_sleep_domain(pdd->dev, genpd))
993 			not_suspended++;
994 
995 		/* The device may need its PM domain to stay powered on. */
996 		if (to_gpd_data(pdd)->rpm_always_on)
997 			return;
998 	}
999 
1000 	if (not_suspended > 1 || (not_suspended == 1 && !one_dev_on))
1001 		return;
1002 
1003 	if (genpd->gov && genpd->gov->power_down_ok) {
1004 		if (!genpd->gov->power_down_ok(&genpd->domain))
1005 			return;
1006 	}
1007 
1008 	/* Default to shallowest state. */
1009 	if (!genpd->gov)
1010 		genpd->state_idx = 0;
1011 
1012 	/* Don't power off, if a child domain is waiting to power on. */
1013 	if (atomic_read(&genpd->sd_count) > 0)
1014 		return;
1015 
1016 	if (_genpd_power_off(genpd, true)) {
1017 		genpd->states[genpd->state_idx].rejected++;
1018 		return;
1019 	}
1020 
1021 	genpd->status = GENPD_STATE_OFF;
1022 	genpd_update_accounting(genpd);
1023 	genpd->states[genpd->state_idx].usage++;
1024 
1025 	list_for_each_entry(link, &genpd->child_links, child_node) {
1026 		genpd_sd_counter_dec(link->parent);
1027 		genpd_lock_nested(link->parent, depth + 1);
1028 		genpd_power_off(link->parent, false, depth + 1);
1029 		genpd_unlock(link->parent);
1030 	}
1031 }
1032 
1033 /**
1034  * genpd_power_on - Restore power to a given PM domain and its parents.
1035  * @genpd: PM domain to power up.
1036  * @depth: nesting count for lockdep.
1037  *
1038  * Restore power to @genpd and all of its parents so that it is possible to
1039  * resume a device belonging to it.
1040  */
1041 static int genpd_power_on(struct generic_pm_domain *genpd, unsigned int depth)
1042 {
1043 	struct gpd_link *link;
1044 	int ret = 0;
1045 
1046 	if (genpd_status_on(genpd))
1047 		return 0;
1048 
1049 	/* Reflect over the entered idle-states residency for debugfs. */
1050 	genpd_reflect_residency(genpd);
1051 
1052 	/*
1053 	 * The list is guaranteed not to change while the loop below is being
1054 	 * executed, unless one of the parents' .power_on() callbacks fiddles
1055 	 * with it.
1056 	 */
1057 	list_for_each_entry(link, &genpd->child_links, child_node) {
1058 		struct generic_pm_domain *parent = link->parent;
1059 
1060 		genpd_sd_counter_inc(parent);
1061 
1062 		genpd_lock_nested(parent, depth + 1);
1063 		ret = genpd_power_on(parent, depth + 1);
1064 		genpd_unlock(parent);
1065 
1066 		if (ret) {
1067 			genpd_sd_counter_dec(parent);
1068 			goto err;
1069 		}
1070 	}
1071 
1072 	ret = _genpd_power_on(genpd, true);
1073 	if (ret)
1074 		goto err;
1075 
1076 	genpd->status = GENPD_STATE_ON;
1077 	genpd_update_accounting(genpd);
1078 
1079 	return 0;
1080 
1081  err:
1082 	list_for_each_entry_continue_reverse(link,
1083 					&genpd->child_links,
1084 					child_node) {
1085 		genpd_sd_counter_dec(link->parent);
1086 		genpd_lock_nested(link->parent, depth + 1);
1087 		genpd_power_off(link->parent, false, depth + 1);
1088 		genpd_unlock(link->parent);
1089 	}
1090 
1091 	return ret;
1092 }
1093 
1094 static int genpd_dev_pm_start(struct device *dev)
1095 {
1096 	struct generic_pm_domain *genpd = dev_to_genpd(dev);
1097 
1098 	return genpd_start_dev(genpd, dev);
1099 }
1100 
1101 static int genpd_dev_pm_qos_notifier(struct notifier_block *nb,
1102 				     unsigned long val, void *ptr)
1103 {
1104 	struct generic_pm_domain_data *gpd_data;
1105 	struct device *dev;
1106 
1107 	gpd_data = container_of(nb, struct generic_pm_domain_data, nb);
1108 	dev = gpd_data->base.dev;
1109 
1110 	for (;;) {
1111 		struct generic_pm_domain *genpd = ERR_PTR(-ENODATA);
1112 		struct pm_domain_data *pdd;
1113 		struct gpd_timing_data *td;
1114 
1115 		spin_lock_irq(&dev->power.lock);
1116 
1117 		pdd = dev->power.subsys_data ?
1118 				dev->power.subsys_data->domain_data : NULL;
1119 		if (pdd) {
1120 			td = to_gpd_data(pdd)->td;
1121 			if (td) {
1122 				td->constraint_changed = true;
1123 				genpd = dev_to_genpd(dev);
1124 			}
1125 		}
1126 
1127 		spin_unlock_irq(&dev->power.lock);
1128 
1129 		if (!IS_ERR(genpd)) {
1130 			genpd_lock(genpd);
1131 			genpd->gd->max_off_time_changed = true;
1132 			genpd_unlock(genpd);
1133 		}
1134 
1135 		dev = dev->parent;
1136 		if (!dev || dev->power.ignore_children)
1137 			break;
1138 	}
1139 
1140 	return NOTIFY_DONE;
1141 }
1142 
1143 /**
1144  * genpd_power_off_work_fn - Power off PM domain whose subdomain count is 0.
1145  * @work: Work structure used for scheduling the execution of this function.
1146  */
1147 static void genpd_power_off_work_fn(struct work_struct *work)
1148 {
1149 	struct generic_pm_domain *genpd;
1150 
1151 	genpd = container_of(work, struct generic_pm_domain, power_off_work);
1152 
1153 	genpd_lock(genpd);
1154 	genpd_power_off(genpd, false, 0);
1155 	genpd_unlock(genpd);
1156 }
1157 
1158 /**
1159  * __genpd_runtime_suspend - walk the hierarchy of ->runtime_suspend() callbacks
1160  * @dev: Device to handle.
1161  */
1162 static int __genpd_runtime_suspend(struct device *dev)
1163 {
1164 	int (*cb)(struct device *__dev);
1165 
1166 	if (dev->type && dev->type->pm)
1167 		cb = dev->type->pm->runtime_suspend;
1168 	else if (dev->class && dev->class->pm)
1169 		cb = dev->class->pm->runtime_suspend;
1170 	else if (dev->bus && dev->bus->pm)
1171 		cb = dev->bus->pm->runtime_suspend;
1172 	else
1173 		cb = NULL;
1174 
1175 	if (!cb && dev->driver && dev->driver->pm)
1176 		cb = dev->driver->pm->runtime_suspend;
1177 
1178 	return cb ? cb(dev) : 0;
1179 }
1180 
1181 /**
1182  * __genpd_runtime_resume - walk the hierarchy of ->runtime_resume() callbacks
1183  * @dev: Device to handle.
1184  */
1185 static int __genpd_runtime_resume(struct device *dev)
1186 {
1187 	int (*cb)(struct device *__dev);
1188 
1189 	if (dev->type && dev->type->pm)
1190 		cb = dev->type->pm->runtime_resume;
1191 	else if (dev->class && dev->class->pm)
1192 		cb = dev->class->pm->runtime_resume;
1193 	else if (dev->bus && dev->bus->pm)
1194 		cb = dev->bus->pm->runtime_resume;
1195 	else
1196 		cb = NULL;
1197 
1198 	if (!cb && dev->driver && dev->driver->pm)
1199 		cb = dev->driver->pm->runtime_resume;
1200 
1201 	return cb ? cb(dev) : 0;
1202 }
1203 
1204 /**
1205  * genpd_runtime_suspend - Suspend a device belonging to I/O PM domain.
1206  * @dev: Device to suspend.
1207  *
1208  * Carry out a runtime suspend of a device under the assumption that its
1209  * pm_domain field points to the domain member of an object of type
1210  * struct generic_pm_domain representing a PM domain consisting of I/O devices.
1211  */
1212 static int genpd_runtime_suspend(struct device *dev)
1213 {
1214 	struct generic_pm_domain *genpd;
1215 	bool (*suspend_ok)(struct device *__dev);
1216 	struct generic_pm_domain_data *gpd_data = dev_gpd_data(dev);
1217 	struct gpd_timing_data *td = gpd_data->td;
1218 	bool runtime_pm = pm_runtime_enabled(dev);
1219 	ktime_t time_start = 0;
1220 	s64 elapsed_ns;
1221 	int ret;
1222 
1223 	dev_dbg(dev, "%s()\n", __func__);
1224 
1225 	genpd = dev_to_genpd(dev);
1226 	if (IS_ERR(genpd))
1227 		return -EINVAL;
1228 
1229 	/*
1230 	 * A runtime PM centric subsystem/driver may re-use the runtime PM
1231 	 * callbacks for other purposes than runtime PM. In those scenarios
1232 	 * runtime PM is disabled. Under these circumstances, we shall skip
1233 	 * validating/measuring the PM QoS latency.
1234 	 */
1235 	suspend_ok = genpd->gov ? genpd->gov->suspend_ok : NULL;
1236 	if (runtime_pm && suspend_ok && !suspend_ok(dev))
1237 		return -EBUSY;
1238 
1239 	/* Measure suspend latency. */
1240 	if (td && runtime_pm)
1241 		time_start = ktime_get();
1242 
1243 	ret = __genpd_runtime_suspend(dev);
1244 	if (ret)
1245 		return ret;
1246 
1247 	ret = genpd_stop_dev(genpd, dev);
1248 	if (ret) {
1249 		__genpd_runtime_resume(dev);
1250 		return ret;
1251 	}
1252 
1253 	/* Update suspend latency value if the measured time exceeds it. */
1254 	if (td && runtime_pm) {
1255 		elapsed_ns = ktime_to_ns(ktime_sub(ktime_get(), time_start));
1256 		if (elapsed_ns > td->suspend_latency_ns) {
1257 			td->suspend_latency_ns = elapsed_ns;
1258 			dev_dbg(dev, "suspend latency exceeded, %lld ns\n",
1259 				elapsed_ns);
1260 			genpd->gd->max_off_time_changed = true;
1261 			td->constraint_changed = true;
1262 		}
1263 	}
1264 
1265 	/*
1266 	 * If power.irq_safe is set, this routine may be run with
1267 	 * IRQs disabled, so suspend only if the PM domain also is irq_safe.
1268 	 */
1269 	if (irq_safe_dev_in_sleep_domain(dev, genpd))
1270 		return 0;
1271 
1272 	genpd_lock(genpd);
1273 	genpd_power_off(genpd, true, 0);
1274 	gpd_data->rpm_pstate = genpd_drop_performance_state(dev);
1275 	genpd_unlock(genpd);
1276 
1277 	return 0;
1278 }
1279 
1280 /**
1281  * genpd_runtime_resume - Resume a device belonging to I/O PM domain.
1282  * @dev: Device to resume.
1283  *
1284  * Carry out a runtime resume of a device under the assumption that its
1285  * pm_domain field points to the domain member of an object of type
1286  * struct generic_pm_domain representing a PM domain consisting of I/O devices.
1287  */
1288 static int genpd_runtime_resume(struct device *dev)
1289 {
1290 	struct generic_pm_domain *genpd;
1291 	struct generic_pm_domain_data *gpd_data = dev_gpd_data(dev);
1292 	struct gpd_timing_data *td = gpd_data->td;
1293 	bool timed = td && pm_runtime_enabled(dev);
1294 	ktime_t time_start = 0;
1295 	s64 elapsed_ns;
1296 	int ret;
1297 
1298 	dev_dbg(dev, "%s()\n", __func__);
1299 
1300 	genpd = dev_to_genpd(dev);
1301 	if (IS_ERR(genpd))
1302 		return -EINVAL;
1303 
1304 	/*
1305 	 * As we don't power off a non IRQ safe domain, which holds
1306 	 * an IRQ safe device, we don't need to restore power to it.
1307 	 */
1308 	if (irq_safe_dev_in_sleep_domain(dev, genpd))
1309 		goto out;
1310 
1311 	genpd_lock(genpd);
1312 	genpd_restore_performance_state(dev, gpd_data->rpm_pstate);
1313 	ret = genpd_power_on(genpd, 0);
1314 	genpd_unlock(genpd);
1315 
1316 	if (ret)
1317 		return ret;
1318 
1319  out:
1320 	/* Measure resume latency. */
1321 	if (timed)
1322 		time_start = ktime_get();
1323 
1324 	ret = genpd_start_dev(genpd, dev);
1325 	if (ret)
1326 		goto err_poweroff;
1327 
1328 	ret = __genpd_runtime_resume(dev);
1329 	if (ret)
1330 		goto err_stop;
1331 
1332 	/* Update resume latency value if the measured time exceeds it. */
1333 	if (timed) {
1334 		elapsed_ns = ktime_to_ns(ktime_sub(ktime_get(), time_start));
1335 		if (elapsed_ns > td->resume_latency_ns) {
1336 			td->resume_latency_ns = elapsed_ns;
1337 			dev_dbg(dev, "resume latency exceeded, %lld ns\n",
1338 				elapsed_ns);
1339 			genpd->gd->max_off_time_changed = true;
1340 			td->constraint_changed = true;
1341 		}
1342 	}
1343 
1344 	return 0;
1345 
1346 err_stop:
1347 	genpd_stop_dev(genpd, dev);
1348 err_poweroff:
1349 	if (!pm_runtime_is_irq_safe(dev) || genpd_is_irq_safe(genpd)) {
1350 		genpd_lock(genpd);
1351 		genpd_power_off(genpd, true, 0);
1352 		gpd_data->rpm_pstate = genpd_drop_performance_state(dev);
1353 		genpd_unlock(genpd);
1354 	}
1355 
1356 	return ret;
1357 }
1358 
1359 static bool pd_ignore_unused;
1360 static int __init pd_ignore_unused_setup(char *__unused)
1361 {
1362 	pd_ignore_unused = true;
1363 	return 1;
1364 }
1365 __setup("pd_ignore_unused", pd_ignore_unused_setup);
1366 
1367 /**
1368  * genpd_power_off_unused - Power off all PM domains with no devices in use.
1369  */
1370 static int __init genpd_power_off_unused(void)
1371 {
1372 	struct generic_pm_domain *genpd;
1373 
1374 	if (pd_ignore_unused) {
1375 		pr_warn("genpd: Not disabling unused power domains\n");
1376 		return 0;
1377 	}
1378 
1379 	pr_info("genpd: Disabling unused power domains\n");
1380 	mutex_lock(&gpd_list_lock);
1381 
1382 	list_for_each_entry(genpd, &gpd_list, gpd_list_node) {
1383 		genpd_queue_power_off_work(genpd);
1384 	}
1385 
1386 	mutex_unlock(&gpd_list_lock);
1387 
1388 	return 0;
1389 }
1390 late_initcall_sync(genpd_power_off_unused);
1391 
1392 #ifdef CONFIG_PM_SLEEP
1393 
1394 /**
1395  * genpd_sync_power_off - Synchronously power off a PM domain and its parents.
1396  * @genpd: PM domain to power off, if possible.
1397  * @use_lock: use the lock.
1398  * @depth: nesting count for lockdep.
1399  *
1400  * Check if the given PM domain can be powered off (during system suspend or
1401  * hibernation) and do that if so.  Also, in that case propagate to its parents.
1402  *
1403  * This function is only called in "noirq" and "syscore" stages of system power
1404  * transitions. The "noirq" callbacks may be executed asynchronously, thus in
1405  * these cases the lock must be held.
1406  */
1407 static void genpd_sync_power_off(struct generic_pm_domain *genpd, bool use_lock,
1408 				 unsigned int depth)
1409 {
1410 	struct gpd_link *link;
1411 
1412 	if (!genpd_status_on(genpd) || genpd_is_always_on(genpd))
1413 		return;
1414 
1415 	if (genpd->suspended_count != genpd->device_count
1416 	    || atomic_read(&genpd->sd_count) > 0)
1417 		return;
1418 
1419 	/* Check that the children are in their deepest (powered-off) state. */
1420 	list_for_each_entry(link, &genpd->parent_links, parent_node) {
1421 		struct generic_pm_domain *child = link->child;
1422 		if (child->state_idx < child->state_count - 1)
1423 			return;
1424 	}
1425 
1426 	if (genpd->gov && genpd->gov->system_power_down_ok) {
1427 		if (!genpd->gov->system_power_down_ok(&genpd->domain))
1428 			return;
1429 	} else {
1430 		/* Default to the deepest state. */
1431 		genpd->state_idx = genpd->state_count - 1;
1432 	}
1433 
1434 	if (_genpd_power_off(genpd, false)) {
1435 		genpd->states[genpd->state_idx].rejected++;
1436 		return;
1437 	} else {
1438 		genpd->states[genpd->state_idx].usage++;
1439 
1440 		/*
1441 		 * The ->system_power_down_ok() callback is currently used only
1442 		 * for s2idle. Use it to know when to update the usage counter.
1443 		 */
1444 		if (genpd->gov && genpd->gov->system_power_down_ok)
1445 			genpd->states[genpd->state_idx].usage_s2idle++;
1446 	}
1447 
1448 	genpd->status = GENPD_STATE_OFF;
1449 
1450 	list_for_each_entry(link, &genpd->child_links, child_node) {
1451 		genpd_sd_counter_dec(link->parent);
1452 
1453 		if (use_lock)
1454 			genpd_lock_nested(link->parent, depth + 1);
1455 
1456 		genpd_sync_power_off(link->parent, use_lock, depth + 1);
1457 
1458 		if (use_lock)
1459 			genpd_unlock(link->parent);
1460 	}
1461 }
1462 
1463 /**
1464  * genpd_sync_power_on - Synchronously power on a PM domain and its parents.
1465  * @genpd: PM domain to power on.
1466  * @use_lock: use the lock.
1467  * @depth: nesting count for lockdep.
1468  *
1469  * This function is only called in "noirq" and "syscore" stages of system power
1470  * transitions. The "noirq" callbacks may be executed asynchronously, thus in
1471  * these cases the lock must be held.
1472  */
1473 static void genpd_sync_power_on(struct generic_pm_domain *genpd, bool use_lock,
1474 				unsigned int depth)
1475 {
1476 	struct gpd_link *link;
1477 
1478 	if (genpd_status_on(genpd))
1479 		return;
1480 
1481 	list_for_each_entry(link, &genpd->child_links, child_node) {
1482 		genpd_sd_counter_inc(link->parent);
1483 
1484 		if (use_lock)
1485 			genpd_lock_nested(link->parent, depth + 1);
1486 
1487 		genpd_sync_power_on(link->parent, use_lock, depth + 1);
1488 
1489 		if (use_lock)
1490 			genpd_unlock(link->parent);
1491 	}
1492 
1493 	_genpd_power_on(genpd, false);
1494 	genpd->status = GENPD_STATE_ON;
1495 }
1496 
1497 /**
1498  * genpd_prepare - Start power transition of a device in a PM domain.
1499  * @dev: Device to start the transition of.
1500  *
1501  * Start a power transition of a device (during a system-wide power transition)
1502  * under the assumption that its pm_domain field points to the domain member of
1503  * an object of type struct generic_pm_domain representing a PM domain
1504  * consisting of I/O devices.
1505  */
1506 static int genpd_prepare(struct device *dev)
1507 {
1508 	struct generic_pm_domain *genpd;
1509 	int ret;
1510 
1511 	dev_dbg(dev, "%s()\n", __func__);
1512 
1513 	genpd = dev_to_genpd(dev);
1514 	if (IS_ERR(genpd))
1515 		return -EINVAL;
1516 
1517 	genpd_lock(genpd);
1518 	genpd->prepared_count++;
1519 	genpd_unlock(genpd);
1520 
1521 	ret = pm_generic_prepare(dev);
1522 	if (ret < 0) {
1523 		genpd_lock(genpd);
1524 
1525 		genpd->prepared_count--;
1526 
1527 		genpd_unlock(genpd);
1528 	}
1529 
1530 	/* Never return 1, as genpd don't cope with the direct_complete path. */
1531 	return ret >= 0 ? 0 : ret;
1532 }
1533 
1534 /**
1535  * genpd_finish_suspend - Completion of suspend or hibernation of device in an
1536  *   I/O pm domain.
1537  * @dev: Device to suspend.
1538  * @suspend_noirq: Generic suspend_noirq callback.
1539  * @resume_noirq: Generic resume_noirq callback.
1540  *
1541  * Stop the device and remove power from the domain if all devices in it have
1542  * been stopped.
1543  */
1544 static int genpd_finish_suspend(struct device *dev,
1545 				int (*suspend_noirq)(struct device *dev),
1546 				int (*resume_noirq)(struct device *dev))
1547 {
1548 	struct generic_pm_domain *genpd;
1549 	int ret = 0;
1550 
1551 	genpd = dev_to_genpd(dev);
1552 	if (IS_ERR(genpd))
1553 		return -EINVAL;
1554 
1555 	ret = suspend_noirq(dev);
1556 	if (ret)
1557 		return ret;
1558 
1559 	if (device_awake_path(dev) && genpd_is_active_wakeup(genpd) &&
1560 	    !device_out_band_wakeup(dev))
1561 		return 0;
1562 
1563 	if (genpd->dev_ops.stop && genpd->dev_ops.start &&
1564 	    !pm_runtime_status_suspended(dev)) {
1565 		ret = genpd_stop_dev(genpd, dev);
1566 		if (ret) {
1567 			resume_noirq(dev);
1568 			return ret;
1569 		}
1570 	}
1571 
1572 	genpd_lock(genpd);
1573 	genpd->suspended_count++;
1574 	genpd_sync_power_off(genpd, true, 0);
1575 	genpd_unlock(genpd);
1576 
1577 	return 0;
1578 }
1579 
1580 /**
1581  * genpd_suspend_noirq - Completion of suspend of device in an I/O PM domain.
1582  * @dev: Device to suspend.
1583  *
1584  * Stop the device and remove power from the domain if all devices in it have
1585  * been stopped.
1586  */
1587 static int genpd_suspend_noirq(struct device *dev)
1588 {
1589 	dev_dbg(dev, "%s()\n", __func__);
1590 
1591 	return genpd_finish_suspend(dev,
1592 				    pm_generic_suspend_noirq,
1593 				    pm_generic_resume_noirq);
1594 }
1595 
1596 /**
1597  * genpd_finish_resume - Completion of resume of device in an I/O PM domain.
1598  * @dev: Device to resume.
1599  * @resume_noirq: Generic resume_noirq callback.
1600  *
1601  * Restore power to the device's PM domain, if necessary, and start the device.
1602  */
1603 static int genpd_finish_resume(struct device *dev,
1604 			       int (*resume_noirq)(struct device *dev))
1605 {
1606 	struct generic_pm_domain *genpd;
1607 	int ret;
1608 
1609 	dev_dbg(dev, "%s()\n", __func__);
1610 
1611 	genpd = dev_to_genpd(dev);
1612 	if (IS_ERR(genpd))
1613 		return -EINVAL;
1614 
1615 	if (device_awake_path(dev) && genpd_is_active_wakeup(genpd) &&
1616 	    !device_out_band_wakeup(dev))
1617 		return resume_noirq(dev);
1618 
1619 	genpd_lock(genpd);
1620 	genpd_sync_power_on(genpd, true, 0);
1621 	genpd->suspended_count--;
1622 	genpd_unlock(genpd);
1623 
1624 	if (genpd->dev_ops.stop && genpd->dev_ops.start &&
1625 	    !pm_runtime_status_suspended(dev)) {
1626 		ret = genpd_start_dev(genpd, dev);
1627 		if (ret)
1628 			return ret;
1629 	}
1630 
1631 	return pm_generic_resume_noirq(dev);
1632 }
1633 
1634 /**
1635  * genpd_resume_noirq - Start of resume of device in an I/O PM domain.
1636  * @dev: Device to resume.
1637  *
1638  * Restore power to the device's PM domain, if necessary, and start the device.
1639  */
1640 static int genpd_resume_noirq(struct device *dev)
1641 {
1642 	dev_dbg(dev, "%s()\n", __func__);
1643 
1644 	return genpd_finish_resume(dev, pm_generic_resume_noirq);
1645 }
1646 
1647 /**
1648  * genpd_freeze_noirq - Completion of freezing a device in an I/O PM domain.
1649  * @dev: Device to freeze.
1650  *
1651  * Carry out a late freeze of a device under the assumption that its
1652  * pm_domain field points to the domain member of an object of type
1653  * struct generic_pm_domain representing a power domain consisting of I/O
1654  * devices.
1655  */
1656 static int genpd_freeze_noirq(struct device *dev)
1657 {
1658 	dev_dbg(dev, "%s()\n", __func__);
1659 
1660 	return genpd_finish_suspend(dev,
1661 				    pm_generic_freeze_noirq,
1662 				    pm_generic_thaw_noirq);
1663 }
1664 
1665 /**
1666  * genpd_thaw_noirq - Early thaw of device in an I/O PM domain.
1667  * @dev: Device to thaw.
1668  *
1669  * Start the device, unless power has been removed from the domain already
1670  * before the system transition.
1671  */
1672 static int genpd_thaw_noirq(struct device *dev)
1673 {
1674 	dev_dbg(dev, "%s()\n", __func__);
1675 
1676 	return genpd_finish_resume(dev, pm_generic_thaw_noirq);
1677 }
1678 
1679 /**
1680  * genpd_poweroff_noirq - Completion of hibernation of device in an
1681  *   I/O PM domain.
1682  * @dev: Device to poweroff.
1683  *
1684  * Stop the device and remove power from the domain if all devices in it have
1685  * been stopped.
1686  */
1687 static int genpd_poweroff_noirq(struct device *dev)
1688 {
1689 	dev_dbg(dev, "%s()\n", __func__);
1690 
1691 	return genpd_finish_suspend(dev,
1692 				    pm_generic_poweroff_noirq,
1693 				    pm_generic_restore_noirq);
1694 }
1695 
1696 /**
1697  * genpd_restore_noirq - Start of restore of device in an I/O PM domain.
1698  * @dev: Device to resume.
1699  *
1700  * Make sure the domain will be in the same power state as before the
1701  * hibernation the system is resuming from and start the device if necessary.
1702  */
1703 static int genpd_restore_noirq(struct device *dev)
1704 {
1705 	dev_dbg(dev, "%s()\n", __func__);
1706 
1707 	return genpd_finish_resume(dev, pm_generic_restore_noirq);
1708 }
1709 
1710 /**
1711  * genpd_complete - Complete power transition of a device in a power domain.
1712  * @dev: Device to complete the transition of.
1713  *
1714  * Complete a power transition of a device (during a system-wide power
1715  * transition) under the assumption that its pm_domain field points to the
1716  * domain member of an object of type struct generic_pm_domain representing
1717  * a power domain consisting of I/O devices.
1718  */
1719 static void genpd_complete(struct device *dev)
1720 {
1721 	struct generic_pm_domain *genpd;
1722 
1723 	dev_dbg(dev, "%s()\n", __func__);
1724 
1725 	genpd = dev_to_genpd(dev);
1726 	if (IS_ERR(genpd))
1727 		return;
1728 
1729 	pm_generic_complete(dev);
1730 
1731 	genpd_lock(genpd);
1732 
1733 	genpd->prepared_count--;
1734 	if (!genpd->prepared_count)
1735 		genpd_queue_power_off_work(genpd);
1736 
1737 	genpd_unlock(genpd);
1738 }
1739 
1740 static void genpd_switch_state(struct device *dev, bool suspend)
1741 {
1742 	struct generic_pm_domain *genpd;
1743 	bool use_lock;
1744 
1745 	genpd = dev_to_genpd_safe(dev);
1746 	if (!genpd)
1747 		return;
1748 
1749 	use_lock = genpd_is_irq_safe(genpd);
1750 
1751 	if (use_lock)
1752 		genpd_lock(genpd);
1753 
1754 	if (suspend) {
1755 		genpd->suspended_count++;
1756 		genpd_sync_power_off(genpd, use_lock, 0);
1757 	} else {
1758 		genpd_sync_power_on(genpd, use_lock, 0);
1759 		genpd->suspended_count--;
1760 	}
1761 
1762 	if (use_lock)
1763 		genpd_unlock(genpd);
1764 }
1765 
1766 /**
1767  * dev_pm_genpd_suspend - Synchronously try to suspend the genpd for @dev
1768  * @dev: The device that is attached to the genpd, that can be suspended.
1769  *
1770  * This routine should typically be called for a device that needs to be
1771  * suspended during the syscore suspend phase. It may also be called during
1772  * suspend-to-idle to suspend a corresponding CPU device that is attached to a
1773  * genpd.
1774  */
1775 void dev_pm_genpd_suspend(struct device *dev)
1776 {
1777 	genpd_switch_state(dev, true);
1778 }
1779 EXPORT_SYMBOL_GPL(dev_pm_genpd_suspend);
1780 
1781 /**
1782  * dev_pm_genpd_resume - Synchronously try to resume the genpd for @dev
1783  * @dev: The device that is attached to the genpd, which needs to be resumed.
1784  *
1785  * This routine should typically be called for a device that needs to be resumed
1786  * during the syscore resume phase. It may also be called during suspend-to-idle
1787  * to resume a corresponding CPU device that is attached to a genpd.
1788  */
1789 void dev_pm_genpd_resume(struct device *dev)
1790 {
1791 	genpd_switch_state(dev, false);
1792 }
1793 EXPORT_SYMBOL_GPL(dev_pm_genpd_resume);
1794 
1795 #else /* !CONFIG_PM_SLEEP */
1796 
1797 #define genpd_prepare		NULL
1798 #define genpd_suspend_noirq	NULL
1799 #define genpd_resume_noirq	NULL
1800 #define genpd_freeze_noirq	NULL
1801 #define genpd_thaw_noirq	NULL
1802 #define genpd_poweroff_noirq	NULL
1803 #define genpd_restore_noirq	NULL
1804 #define genpd_complete		NULL
1805 
1806 #endif /* CONFIG_PM_SLEEP */
1807 
1808 static struct generic_pm_domain_data *genpd_alloc_dev_data(struct device *dev,
1809 							   bool has_governor)
1810 {
1811 	struct generic_pm_domain_data *gpd_data;
1812 	struct gpd_timing_data *td;
1813 	int ret;
1814 
1815 	ret = dev_pm_get_subsys_data(dev);
1816 	if (ret)
1817 		return ERR_PTR(ret);
1818 
1819 	gpd_data = kzalloc_obj(*gpd_data);
1820 	if (!gpd_data) {
1821 		ret = -ENOMEM;
1822 		goto err_put;
1823 	}
1824 
1825 	gpd_data->base.dev = dev;
1826 	gpd_data->nb.notifier_call = genpd_dev_pm_qos_notifier;
1827 
1828 	/* Allocate data used by a governor. */
1829 	if (has_governor) {
1830 		td = kzalloc_obj(*td);
1831 		if (!td) {
1832 			ret = -ENOMEM;
1833 			goto err_free;
1834 		}
1835 
1836 		td->constraint_changed = true;
1837 		td->effective_constraint_ns = PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS;
1838 		td->next_wakeup = KTIME_MAX;
1839 		gpd_data->td = td;
1840 	}
1841 
1842 	spin_lock_irq(&dev->power.lock);
1843 
1844 	if (dev->power.subsys_data->domain_data)
1845 		ret = -EINVAL;
1846 	else
1847 		dev->power.subsys_data->domain_data = &gpd_data->base;
1848 
1849 	spin_unlock_irq(&dev->power.lock);
1850 
1851 	if (ret)
1852 		goto err_free;
1853 
1854 	return gpd_data;
1855 
1856  err_free:
1857 	kfree(gpd_data->td);
1858 	kfree(gpd_data);
1859  err_put:
1860 	dev_pm_put_subsys_data(dev);
1861 	return ERR_PTR(ret);
1862 }
1863 
1864 static void genpd_free_dev_data(struct device *dev,
1865 				struct generic_pm_domain_data *gpd_data)
1866 {
1867 	spin_lock_irq(&dev->power.lock);
1868 
1869 	dev->power.subsys_data->domain_data = NULL;
1870 
1871 	spin_unlock_irq(&dev->power.lock);
1872 
1873 	dev_pm_opp_clear_config(gpd_data->opp_token);
1874 	kfree(gpd_data->td);
1875 	kfree(gpd_data);
1876 	dev_pm_put_subsys_data(dev);
1877 }
1878 
1879 static void genpd_update_cpumask(struct generic_pm_domain *genpd,
1880 				 int cpu, bool set, unsigned int depth)
1881 {
1882 	struct gpd_link *link;
1883 
1884 	if (!genpd_is_cpu_domain(genpd))
1885 		return;
1886 
1887 	list_for_each_entry(link, &genpd->child_links, child_node) {
1888 		struct generic_pm_domain *parent = link->parent;
1889 
1890 		genpd_lock_nested(parent, depth + 1);
1891 		genpd_update_cpumask(parent, cpu, set, depth + 1);
1892 		genpd_unlock(parent);
1893 	}
1894 
1895 	if (set)
1896 		cpumask_set_cpu(cpu, genpd->cpus);
1897 	else
1898 		cpumask_clear_cpu(cpu, genpd->cpus);
1899 }
1900 
1901 static void genpd_set_cpumask(struct generic_pm_domain *genpd, int cpu)
1902 {
1903 	if (cpu >= 0)
1904 		genpd_update_cpumask(genpd, cpu, true, 0);
1905 }
1906 
1907 static void genpd_clear_cpumask(struct generic_pm_domain *genpd, int cpu)
1908 {
1909 	if (cpu >= 0)
1910 		genpd_update_cpumask(genpd, cpu, false, 0);
1911 }
1912 
1913 static int genpd_get_cpu(struct generic_pm_domain *genpd, struct device *dev)
1914 {
1915 	int cpu;
1916 
1917 	if (!genpd_is_cpu_domain(genpd))
1918 		return -1;
1919 
1920 	for_each_possible_cpu(cpu) {
1921 		if (get_cpu_device(cpu) == dev)
1922 			return cpu;
1923 	}
1924 
1925 	return -1;
1926 }
1927 
1928 static int genpd_add_device(struct generic_pm_domain *genpd, struct device *dev,
1929 			    struct device *base_dev)
1930 {
1931 	struct genpd_governor_data *gd = genpd->gd;
1932 	struct generic_pm_domain_data *gpd_data;
1933 	int ret;
1934 
1935 	dev_dbg(dev, "%s()\n", __func__);
1936 
1937 	gpd_data = genpd_alloc_dev_data(dev, gd);
1938 	if (IS_ERR(gpd_data))
1939 		return PTR_ERR(gpd_data);
1940 
1941 	gpd_data->cpu = genpd_get_cpu(genpd, base_dev);
1942 
1943 	gpd_data->hw_mode = genpd->get_hwmode_dev ? genpd->get_hwmode_dev(genpd, dev) : false;
1944 
1945 	ret = genpd->attach_dev ? genpd->attach_dev(genpd, dev) : 0;
1946 	if (ret)
1947 		goto out;
1948 
1949 	genpd_lock(genpd);
1950 
1951 	genpd_set_cpumask(genpd, gpd_data->cpu);
1952 
1953 	genpd->device_count++;
1954 	if (gd)
1955 		gd->max_off_time_changed = true;
1956 
1957 	list_add_tail(&gpd_data->base.list_node, &genpd->dev_list);
1958 
1959 	genpd_unlock(genpd);
1960 	dev_pm_domain_set(dev, &genpd->domain);
1961  out:
1962 	if (ret)
1963 		genpd_free_dev_data(dev, gpd_data);
1964 	else
1965 		dev_pm_qos_add_notifier(dev, &gpd_data->nb,
1966 					DEV_PM_QOS_RESUME_LATENCY);
1967 
1968 	return ret;
1969 }
1970 
1971 /**
1972  * pm_genpd_add_device - Add a device to an I/O PM domain.
1973  * @genpd: PM domain to add the device to.
1974  * @dev: Device to be added.
1975  */
1976 int pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev)
1977 {
1978 	int ret;
1979 
1980 	if (!genpd || !dev)
1981 		return -EINVAL;
1982 
1983 	mutex_lock(&gpd_list_lock);
1984 	ret = genpd_add_device(genpd, dev, dev);
1985 	mutex_unlock(&gpd_list_lock);
1986 
1987 	return ret;
1988 }
1989 EXPORT_SYMBOL_GPL(pm_genpd_add_device);
1990 
1991 static int genpd_remove_device(struct generic_pm_domain *genpd,
1992 			       struct device *dev)
1993 {
1994 	struct generic_pm_domain_data *gpd_data;
1995 	struct pm_domain_data *pdd;
1996 	int ret = 0;
1997 
1998 	dev_dbg(dev, "%s()\n", __func__);
1999 
2000 	pdd = dev->power.subsys_data->domain_data;
2001 	gpd_data = to_gpd_data(pdd);
2002 	dev_pm_qos_remove_notifier(dev, &gpd_data->nb,
2003 				   DEV_PM_QOS_RESUME_LATENCY);
2004 
2005 	genpd_lock(genpd);
2006 
2007 	if (genpd->prepared_count > 0) {
2008 		ret = -EAGAIN;
2009 		goto out;
2010 	}
2011 
2012 	genpd->device_count--;
2013 	if (genpd->gd)
2014 		genpd->gd->max_off_time_changed = true;
2015 
2016 	genpd_clear_cpumask(genpd, gpd_data->cpu);
2017 
2018 	list_del_init(&pdd->list_node);
2019 
2020 	genpd_unlock(genpd);
2021 
2022 	dev_pm_domain_set(dev, NULL);
2023 
2024 	if (genpd->detach_dev)
2025 		genpd->detach_dev(genpd, dev);
2026 
2027 	genpd_free_dev_data(dev, gpd_data);
2028 
2029 	return 0;
2030 
2031  out:
2032 	genpd_unlock(genpd);
2033 	dev_pm_qos_add_notifier(dev, &gpd_data->nb, DEV_PM_QOS_RESUME_LATENCY);
2034 
2035 	return ret;
2036 }
2037 
2038 /**
2039  * pm_genpd_remove_device - Remove a device from an I/O PM domain.
2040  * @dev: Device to be removed.
2041  */
2042 int pm_genpd_remove_device(struct device *dev)
2043 {
2044 	struct generic_pm_domain *genpd = dev_to_genpd_safe(dev);
2045 
2046 	if (!genpd)
2047 		return -EINVAL;
2048 
2049 	return genpd_remove_device(genpd, dev);
2050 }
2051 EXPORT_SYMBOL_GPL(pm_genpd_remove_device);
2052 
2053 /**
2054  * dev_pm_genpd_add_notifier - Add a genpd power on/off notifier for @dev
2055  *
2056  * @dev: Device that should be associated with the notifier
2057  * @nb: The notifier block to register
2058  *
2059  * Users may call this function to add a genpd power on/off notifier for an
2060  * attached @dev. Only one notifier per device is allowed. The notifier is
2061  * sent when genpd is powering on/off the PM domain.
2062  *
2063  * It is assumed that the user guarantee that the genpd wouldn't be detached
2064  * while this routine is getting called.
2065  *
2066  * Returns 0 on success and negative error values on failures.
2067  */
2068 int dev_pm_genpd_add_notifier(struct device *dev, struct notifier_block *nb)
2069 {
2070 	struct generic_pm_domain *genpd;
2071 	struct generic_pm_domain_data *gpd_data;
2072 	int ret;
2073 
2074 	genpd = dev_to_genpd_safe(dev);
2075 	if (!genpd)
2076 		return -ENODEV;
2077 
2078 	if (WARN_ON(!dev->power.subsys_data ||
2079 		     !dev->power.subsys_data->domain_data))
2080 		return -EINVAL;
2081 
2082 	gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
2083 	if (gpd_data->power_nb)
2084 		return -EEXIST;
2085 
2086 	genpd_lock(genpd);
2087 	ret = raw_notifier_chain_register(&genpd->power_notifiers, nb);
2088 	genpd_unlock(genpd);
2089 
2090 	if (ret) {
2091 		dev_warn(dev, "failed to add notifier for PM domain %s\n",
2092 			 dev_name(&genpd->dev));
2093 		return ret;
2094 	}
2095 
2096 	gpd_data->power_nb = nb;
2097 	return 0;
2098 }
2099 EXPORT_SYMBOL_GPL(dev_pm_genpd_add_notifier);
2100 
2101 /**
2102  * dev_pm_genpd_remove_notifier - Remove a genpd power on/off notifier for @dev
2103  *
2104  * @dev: Device that is associated with the notifier
2105  *
2106  * Users may call this function to remove a genpd power on/off notifier for an
2107  * attached @dev.
2108  *
2109  * It is assumed that the user guarantee that the genpd wouldn't be detached
2110  * while this routine is getting called.
2111  *
2112  * Returns 0 on success and negative error values on failures.
2113  */
2114 int dev_pm_genpd_remove_notifier(struct device *dev)
2115 {
2116 	struct generic_pm_domain *genpd;
2117 	struct generic_pm_domain_data *gpd_data;
2118 	int ret;
2119 
2120 	genpd = dev_to_genpd_safe(dev);
2121 	if (!genpd)
2122 		return -ENODEV;
2123 
2124 	if (WARN_ON(!dev->power.subsys_data ||
2125 		     !dev->power.subsys_data->domain_data))
2126 		return -EINVAL;
2127 
2128 	gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
2129 	if (!gpd_data->power_nb)
2130 		return -ENODEV;
2131 
2132 	genpd_lock(genpd);
2133 	ret = raw_notifier_chain_unregister(&genpd->power_notifiers,
2134 					    gpd_data->power_nb);
2135 	genpd_unlock(genpd);
2136 
2137 	if (ret) {
2138 		dev_warn(dev, "failed to remove notifier for PM domain %s\n",
2139 			 dev_name(&genpd->dev));
2140 		return ret;
2141 	}
2142 
2143 	gpd_data->power_nb = NULL;
2144 	return 0;
2145 }
2146 EXPORT_SYMBOL_GPL(dev_pm_genpd_remove_notifier);
2147 
2148 static int genpd_add_subdomain(struct generic_pm_domain *genpd,
2149 			       struct generic_pm_domain *subdomain)
2150 {
2151 	struct gpd_link *link, *itr;
2152 	int ret = 0;
2153 
2154 	if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(subdomain)
2155 	    || genpd == subdomain)
2156 		return -EINVAL;
2157 
2158 	/*
2159 	 * If the domain can be powered on/off in an IRQ safe
2160 	 * context, ensure that the subdomain can also be
2161 	 * powered on/off in that context.
2162 	 */
2163 	if (!genpd_is_irq_safe(genpd) && genpd_is_irq_safe(subdomain)) {
2164 		WARN(1, "Parent %s of subdomain %s must be IRQ safe\n",
2165 		     dev_name(&genpd->dev), subdomain->name);
2166 		return -EINVAL;
2167 	}
2168 
2169 	link = kzalloc_obj(*link);
2170 	if (!link)
2171 		return -ENOMEM;
2172 
2173 	genpd_lock(subdomain);
2174 	genpd_lock_nested(genpd, SINGLE_DEPTH_NESTING);
2175 
2176 	if (!genpd_status_on(genpd) && genpd_status_on(subdomain)) {
2177 		ret = -EINVAL;
2178 		goto out;
2179 	}
2180 
2181 	list_for_each_entry(itr, &genpd->parent_links, parent_node) {
2182 		if (itr->child == subdomain && itr->parent == genpd) {
2183 			ret = -EINVAL;
2184 			goto out;
2185 		}
2186 	}
2187 
2188 	link->parent = genpd;
2189 	list_add_tail(&link->parent_node, &genpd->parent_links);
2190 	link->child = subdomain;
2191 	list_add_tail(&link->child_node, &subdomain->child_links);
2192 	if (genpd_status_on(subdomain))
2193 		genpd_sd_counter_inc(genpd);
2194 
2195  out:
2196 	genpd_unlock(genpd);
2197 	genpd_unlock(subdomain);
2198 	if (ret)
2199 		kfree(link);
2200 	return ret;
2201 }
2202 
2203 /**
2204  * pm_genpd_add_subdomain - Add a subdomain to an I/O PM domain.
2205  * @genpd: Leader PM domain to add the subdomain to.
2206  * @subdomain: Subdomain to be added.
2207  */
2208 int pm_genpd_add_subdomain(struct generic_pm_domain *genpd,
2209 			   struct generic_pm_domain *subdomain)
2210 {
2211 	int ret;
2212 
2213 	mutex_lock(&gpd_list_lock);
2214 	ret = genpd_add_subdomain(genpd, subdomain);
2215 	mutex_unlock(&gpd_list_lock);
2216 
2217 	return ret;
2218 }
2219 EXPORT_SYMBOL_GPL(pm_genpd_add_subdomain);
2220 
2221 /**
2222  * pm_genpd_remove_subdomain - Remove a subdomain from an I/O PM domain.
2223  * @genpd: Leader PM domain to remove the subdomain from.
2224  * @subdomain: Subdomain to be removed.
2225  */
2226 int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd,
2227 			      struct generic_pm_domain *subdomain)
2228 {
2229 	struct gpd_link *l, *link;
2230 	int ret = -EINVAL;
2231 
2232 	if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(subdomain))
2233 		return -EINVAL;
2234 
2235 	genpd_lock(subdomain);
2236 	genpd_lock_nested(genpd, SINGLE_DEPTH_NESTING);
2237 
2238 	if (!list_empty(&subdomain->parent_links) || subdomain->device_count) {
2239 		pr_warn("%s: unable to remove subdomain %s\n",
2240 			dev_name(&genpd->dev), subdomain->name);
2241 		ret = -EBUSY;
2242 		goto out;
2243 	}
2244 
2245 	list_for_each_entry_safe(link, l, &genpd->parent_links, parent_node) {
2246 		if (link->child != subdomain)
2247 			continue;
2248 
2249 		list_del(&link->parent_node);
2250 		list_del(&link->child_node);
2251 		kfree(link);
2252 		if (genpd_status_on(subdomain))
2253 			genpd_sd_counter_dec(genpd);
2254 
2255 		ret = 0;
2256 		break;
2257 	}
2258 
2259 out:
2260 	genpd_unlock(genpd);
2261 	genpd_unlock(subdomain);
2262 
2263 	return ret;
2264 }
2265 EXPORT_SYMBOL_GPL(pm_genpd_remove_subdomain);
2266 
2267 static void genpd_free_default_power_state(struct genpd_power_state *states,
2268 					   unsigned int state_count)
2269 {
2270 	kfree(states);
2271 }
2272 
2273 static int genpd_set_default_power_state(struct generic_pm_domain *genpd)
2274 {
2275 	struct genpd_power_state *state;
2276 
2277 	state = kzalloc_obj(*state);
2278 	if (!state)
2279 		return -ENOMEM;
2280 
2281 	genpd->states = state;
2282 	genpd->state_count = 1;
2283 	genpd->free_states = genpd_free_default_power_state;
2284 
2285 	return 0;
2286 }
2287 
2288 static void genpd_provider_release(struct device *dev)
2289 {
2290 	/* nothing to be done here */
2291 }
2292 
2293 static int genpd_alloc_data(struct generic_pm_domain *genpd)
2294 {
2295 	struct genpd_governor_data *gd = NULL;
2296 	int ret;
2297 
2298 	if (genpd_is_cpu_domain(genpd) &&
2299 	    !zalloc_cpumask_var(&genpd->cpus, GFP_KERNEL))
2300 		return -ENOMEM;
2301 
2302 	if (genpd->gov) {
2303 		gd = kzalloc_obj(*gd);
2304 		if (!gd) {
2305 			ret = -ENOMEM;
2306 			goto free;
2307 		}
2308 
2309 		gd->max_off_time_ns = -1;
2310 		gd->max_off_time_changed = true;
2311 		gd->next_wakeup = KTIME_MAX;
2312 		gd->next_hrtimer = KTIME_MAX;
2313 	}
2314 
2315 	/* Use only one "off" state if there were no states declared */
2316 	if (genpd->state_count == 0) {
2317 		ret = genpd_set_default_power_state(genpd);
2318 		if (ret)
2319 			goto free;
2320 	}
2321 
2322 	genpd->gd = gd;
2323 	device_initialize(&genpd->dev);
2324 	genpd->dev.release = genpd_provider_release;
2325 	genpd->dev.bus = &genpd_provider_bus_type;
2326 	genpd->dev.parent = genpd_provider_bus;
2327 
2328 	if (!genpd_is_dev_name_fw(genpd)) {
2329 		dev_set_name(&genpd->dev, "%s", genpd->name);
2330 	} else {
2331 		ret = ida_alloc(&genpd_ida, GFP_KERNEL);
2332 		if (ret < 0)
2333 			goto put;
2334 
2335 		genpd->device_id = ret;
2336 		dev_set_name(&genpd->dev, "%s_%u", genpd->name, genpd->device_id);
2337 	}
2338 
2339 	return 0;
2340 put:
2341 	put_device(&genpd->dev);
2342 	if (genpd->free_states == genpd_free_default_power_state) {
2343 		kfree(genpd->states);
2344 		genpd->states = NULL;
2345 	}
2346 free:
2347 	if (genpd_is_cpu_domain(genpd))
2348 		free_cpumask_var(genpd->cpus);
2349 	kfree(gd);
2350 	return ret;
2351 }
2352 
2353 static void genpd_free_data(struct generic_pm_domain *genpd)
2354 {
2355 	put_device(&genpd->dev);
2356 	if (genpd->device_id != -ENXIO)
2357 		ida_free(&genpd_ida, genpd->device_id);
2358 	if (genpd_is_cpu_domain(genpd))
2359 		free_cpumask_var(genpd->cpus);
2360 	if (genpd->free_states)
2361 		genpd->free_states(genpd->states, genpd->state_count);
2362 	kfree(genpd->gd);
2363 }
2364 
2365 static void genpd_lock_init(struct generic_pm_domain *genpd)
2366 {
2367 	if (genpd_is_cpu_domain(genpd)) {
2368 		raw_spin_lock_init(&genpd->raw_slock);
2369 		genpd->lock_ops = &genpd_raw_spin_ops;
2370 	} else if (genpd_is_irq_safe(genpd)) {
2371 		spin_lock_init(&genpd->slock);
2372 		genpd->lock_ops = &genpd_spin_ops;
2373 	} else {
2374 		mutex_init(&genpd->mlock);
2375 		genpd->lock_ops = &genpd_mtx_ops;
2376 	}
2377 }
2378 
2379 #ifdef CONFIG_PM_GENERIC_DOMAINS_OF
2380 static void genpd_set_stay_on(struct generic_pm_domain *genpd, bool is_off)
2381 {
2382 	genpd->stay_on = !genpd_is_no_stay_on(genpd) && !is_off;
2383 }
2384 #else
2385 static void genpd_set_stay_on(struct generic_pm_domain *genpd, bool is_off)
2386 {
2387 	genpd->stay_on = false;
2388 }
2389 #endif
2390 
2391 /**
2392  * pm_genpd_init - Initialize a generic I/O PM domain object.
2393  * @genpd: PM domain object to initialize.
2394  * @gov: PM domain governor to associate with the domain (may be NULL).
2395  * @is_off: Initial value of the domain's power_is_off field.
2396  *
2397  * Returns 0 on successful initialization, else a negative error code.
2398  */
2399 int pm_genpd_init(struct generic_pm_domain *genpd,
2400 		  struct dev_power_governor *gov, bool is_off)
2401 {
2402 	int ret;
2403 
2404 	if (IS_ERR_OR_NULL(genpd))
2405 		return -EINVAL;
2406 
2407 	INIT_LIST_HEAD(&genpd->parent_links);
2408 	INIT_LIST_HEAD(&genpd->child_links);
2409 	INIT_LIST_HEAD(&genpd->dev_list);
2410 	RAW_INIT_NOTIFIER_HEAD(&genpd->power_notifiers);
2411 	genpd_lock_init(genpd);
2412 	genpd->gov = gov;
2413 	INIT_WORK(&genpd->power_off_work, genpd_power_off_work_fn);
2414 	atomic_set(&genpd->sd_count, 0);
2415 	genpd->status = is_off ? GENPD_STATE_OFF : GENPD_STATE_ON;
2416 	genpd_set_stay_on(genpd, is_off);
2417 	genpd->sync_state = GENPD_SYNC_STATE_OFF;
2418 	genpd->device_count = 0;
2419 	genpd->provider = NULL;
2420 	genpd->device_id = -ENXIO;
2421 	genpd->has_provider = false;
2422 	genpd->opp_table = NULL;
2423 	genpd->accounting_time = ktime_get_mono_fast_ns();
2424 	genpd->domain.ops.runtime_suspend = genpd_runtime_suspend;
2425 	genpd->domain.ops.runtime_resume = genpd_runtime_resume;
2426 	genpd->domain.ops.prepare = genpd_prepare;
2427 	genpd->domain.ops.suspend_noirq = genpd_suspend_noirq;
2428 	genpd->domain.ops.resume_noirq = genpd_resume_noirq;
2429 	genpd->domain.ops.freeze_noirq = genpd_freeze_noirq;
2430 	genpd->domain.ops.thaw_noirq = genpd_thaw_noirq;
2431 	genpd->domain.ops.poweroff_noirq = genpd_poweroff_noirq;
2432 	genpd->domain.ops.restore_noirq = genpd_restore_noirq;
2433 	genpd->domain.ops.complete = genpd_complete;
2434 	genpd->domain.start = genpd_dev_pm_start;
2435 	genpd->domain.set_performance_state = genpd_dev_pm_set_performance_state;
2436 
2437 	if (genpd->flags & GENPD_FLAG_PM_CLK) {
2438 		genpd->dev_ops.stop = pm_clk_suspend;
2439 		genpd->dev_ops.start = pm_clk_resume;
2440 	}
2441 
2442 	/* The always-on governor works better with the corresponding flag. */
2443 	if (gov == &pm_domain_always_on_gov)
2444 		genpd->flags |= GENPD_FLAG_RPM_ALWAYS_ON;
2445 
2446 	/* Always-on domains must be powered on at initialization. */
2447 	if ((genpd_is_always_on(genpd) || genpd_is_rpm_always_on(genpd)) &&
2448 			!genpd_status_on(genpd)) {
2449 		pr_err("always-on PM domain %s is not on\n", genpd->name);
2450 		return -EINVAL;
2451 	}
2452 
2453 	/* Multiple states but no governor doesn't make sense. */
2454 	if (!gov && genpd->state_count > 1)
2455 		pr_warn("%s: no governor for states\n", genpd->name);
2456 
2457 	ret = genpd_alloc_data(genpd);
2458 	if (ret)
2459 		return ret;
2460 
2461 	mutex_lock(&gpd_list_lock);
2462 	list_add(&genpd->gpd_list_node, &gpd_list);
2463 	mutex_unlock(&gpd_list_lock);
2464 	genpd_debug_add(genpd);
2465 
2466 	return 0;
2467 }
2468 EXPORT_SYMBOL_GPL(pm_genpd_init);
2469 
2470 static int genpd_remove(struct generic_pm_domain *genpd)
2471 {
2472 	struct gpd_link *l, *link;
2473 
2474 	if (IS_ERR_OR_NULL(genpd))
2475 		return -EINVAL;
2476 
2477 	genpd_lock(genpd);
2478 
2479 	if (genpd->has_provider) {
2480 		genpd_unlock(genpd);
2481 		pr_err("Provider present, unable to remove %s\n", dev_name(&genpd->dev));
2482 		return -EBUSY;
2483 	}
2484 
2485 	if (!list_empty(&genpd->parent_links) || genpd->device_count) {
2486 		genpd_unlock(genpd);
2487 		pr_err("%s: unable to remove %s\n", __func__, dev_name(&genpd->dev));
2488 		return -EBUSY;
2489 	}
2490 
2491 	list_for_each_entry_safe(link, l, &genpd->child_links, child_node) {
2492 		list_del(&link->parent_node);
2493 		list_del(&link->child_node);
2494 		kfree(link);
2495 	}
2496 
2497 	list_del(&genpd->gpd_list_node);
2498 	genpd_unlock(genpd);
2499 	genpd_debug_remove(genpd);
2500 	cancel_work_sync(&genpd->power_off_work);
2501 	genpd_free_data(genpd);
2502 
2503 	pr_debug("%s: removed %s\n", __func__, dev_name(&genpd->dev));
2504 
2505 	return 0;
2506 }
2507 
2508 /**
2509  * pm_genpd_remove - Remove a generic I/O PM domain
2510  * @genpd: Pointer to PM domain that is to be removed.
2511  *
2512  * To remove the PM domain, this function:
2513  *  - Removes the PM domain as a subdomain to any parent domains,
2514  *    if it was added.
2515  *  - Removes the PM domain from the list of registered PM domains.
2516  *
2517  * The PM domain will only be removed, if the associated provider has
2518  * been removed, it is not a parent to any other PM domain and has no
2519  * devices associated with it.
2520  */
2521 int pm_genpd_remove(struct generic_pm_domain *genpd)
2522 {
2523 	int ret;
2524 
2525 	mutex_lock(&gpd_list_lock);
2526 	ret = genpd_remove(genpd);
2527 	mutex_unlock(&gpd_list_lock);
2528 
2529 	return ret;
2530 }
2531 EXPORT_SYMBOL_GPL(pm_genpd_remove);
2532 
2533 #ifdef CONFIG_PM_GENERIC_DOMAINS_OF
2534 
2535 /*
2536  * Device Tree based PM domain providers.
2537  *
2538  * The code below implements generic device tree based PM domain providers that
2539  * bind device tree nodes with generic PM domains registered in the system.
2540  *
2541  * Any driver that registers generic PM domains and needs to support binding of
2542  * devices to these domains is supposed to register a PM domain provider, which
2543  * maps a PM domain specifier retrieved from the device tree to a PM domain.
2544  *
2545  * Two simple mapping functions have been provided for convenience:
2546  *  - genpd_xlate_simple() for 1:1 device tree node to PM domain mapping.
2547  *  - genpd_xlate_onecell() for mapping of multiple PM domains per node by
2548  *    index.
2549  */
2550 
2551 /**
2552  * struct of_genpd_provider - PM domain provider registration structure
2553  * @link: Entry in global list of PM domain providers
2554  * @node: Pointer to device tree node of PM domain provider
2555  * @xlate: Provider-specific xlate callback mapping a set of specifier cells
2556  *         into a PM domain.
2557  * @data: context pointer to be passed into @xlate callback
2558  */
2559 struct of_genpd_provider {
2560 	struct list_head link;
2561 	struct device_node *node;
2562 	genpd_xlate_t xlate;
2563 	void *data;
2564 };
2565 
2566 /* List of registered PM domain providers. */
2567 static LIST_HEAD(of_genpd_providers);
2568 /* Mutex to protect the list above. */
2569 static DEFINE_MUTEX(of_genpd_mutex);
2570 /* Used to prevent registering devices before the bus. */
2571 static bool genpd_bus_registered;
2572 
2573 /**
2574  * genpd_xlate_simple() - Xlate function for direct node-domain mapping
2575  * @genpdspec: OF phandle args to map into a PM domain
2576  * @data: xlate function private data - pointer to struct generic_pm_domain
2577  *
2578  * This is a generic xlate function that can be used to model PM domains that
2579  * have their own device tree nodes. The private data of xlate function needs
2580  * to be a valid pointer to struct generic_pm_domain.
2581  */
2582 static struct generic_pm_domain *genpd_xlate_simple(
2583 					const struct of_phandle_args *genpdspec,
2584 					void *data)
2585 {
2586 	return data;
2587 }
2588 
2589 /**
2590  * genpd_xlate_onecell() - Xlate function using a single index.
2591  * @genpdspec: OF phandle args to map into a PM domain
2592  * @data: xlate function private data - pointer to struct genpd_onecell_data
2593  *
2594  * This is a generic xlate function that can be used to model simple PM domain
2595  * controllers that have one device tree node and provide multiple PM domains.
2596  * A single cell is used as an index into an array of PM domains specified in
2597  * the genpd_onecell_data struct when registering the provider.
2598  */
2599 static struct generic_pm_domain *genpd_xlate_onecell(
2600 					const struct of_phandle_args *genpdspec,
2601 					void *data)
2602 {
2603 	struct genpd_onecell_data *genpd_data = data;
2604 	unsigned int idx = genpdspec->args[0];
2605 
2606 	if (genpdspec->args_count != 1)
2607 		return ERR_PTR(-EINVAL);
2608 
2609 	if (idx >= genpd_data->num_domains) {
2610 		pr_err("%s: invalid domain index %u\n", __func__, idx);
2611 		return ERR_PTR(-EINVAL);
2612 	}
2613 
2614 	if (!genpd_data->domains[idx])
2615 		return ERR_PTR(-ENOENT);
2616 
2617 	return genpd_data->domains[idx];
2618 }
2619 
2620 /**
2621  * genpd_add_provider() - Register a PM domain provider for a node
2622  * @np: Device node pointer associated with the PM domain provider.
2623  * @xlate: Callback for decoding PM domain from phandle arguments.
2624  * @data: Context pointer for @xlate callback.
2625  */
2626 static int genpd_add_provider(struct device_node *np, genpd_xlate_t xlate,
2627 			      void *data)
2628 {
2629 	struct of_genpd_provider *cp;
2630 
2631 	cp = kzalloc_obj(*cp);
2632 	if (!cp)
2633 		return -ENOMEM;
2634 
2635 	cp->node = of_node_get(np);
2636 	cp->data = data;
2637 	cp->xlate = xlate;
2638 	fwnode_dev_initialized(of_fwnode_handle(np), true);
2639 
2640 	mutex_lock(&of_genpd_mutex);
2641 	list_add(&cp->link, &of_genpd_providers);
2642 	mutex_unlock(&of_genpd_mutex);
2643 	pr_debug("Added domain provider from %pOF\n", np);
2644 
2645 	return 0;
2646 }
2647 
2648 static bool genpd_present(const struct generic_pm_domain *genpd)
2649 {
2650 	bool ret = false;
2651 	const struct generic_pm_domain *gpd;
2652 
2653 	mutex_lock(&gpd_list_lock);
2654 	list_for_each_entry(gpd, &gpd_list, gpd_list_node) {
2655 		if (gpd == genpd) {
2656 			ret = true;
2657 			break;
2658 		}
2659 	}
2660 	mutex_unlock(&gpd_list_lock);
2661 
2662 	return ret;
2663 }
2664 
2665 static void genpd_sync_state(struct device *dev)
2666 {
2667 	return of_genpd_sync_state(dev->of_node);
2668 }
2669 
2670 /**
2671  * of_genpd_add_provider_simple() - Register a simple PM domain provider
2672  * @np: Device node pointer associated with the PM domain provider.
2673  * @genpd: Pointer to PM domain associated with the PM domain provider.
2674  */
2675 int of_genpd_add_provider_simple(struct device_node *np,
2676 				 struct generic_pm_domain *genpd)
2677 {
2678 	struct fwnode_handle *fwnode;
2679 	struct device *dev;
2680 	int ret;
2681 
2682 	if (!np || !genpd)
2683 		return -EINVAL;
2684 
2685 	if (!genpd_bus_registered)
2686 		return -ENODEV;
2687 
2688 	if (!genpd_present(genpd))
2689 		return -EINVAL;
2690 
2691 	genpd->dev.of_node = np;
2692 
2693 	fwnode = of_fwnode_handle(np);
2694 	dev = get_dev_from_fwnode(fwnode);
2695 	if (!dev && !genpd_is_no_sync_state(genpd)) {
2696 		genpd->sync_state = GENPD_SYNC_STATE_SIMPLE;
2697 		device_set_node(&genpd->dev, fwnode);
2698 	} else {
2699 		dev_set_drv_sync_state(dev, genpd_sync_state);
2700 	}
2701 
2702 	put_device(dev);
2703 
2704 	ret = device_add(&genpd->dev);
2705 	if (ret)
2706 		return ret;
2707 
2708 	/* Parse genpd OPP table */
2709 	if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) {
2710 		ret = dev_pm_opp_of_add_table(&genpd->dev);
2711 		if (ret) {
2712 			dev_err_probe(&genpd->dev, ret, "Failed to add OPP table\n");
2713 			goto err_del;
2714 		}
2715 
2716 		/*
2717 		 * Save table for faster processing while setting performance
2718 		 * state.
2719 		 */
2720 		genpd->opp_table = dev_pm_opp_get_opp_table(&genpd->dev);
2721 		WARN_ON(IS_ERR(genpd->opp_table));
2722 	}
2723 
2724 	ret = genpd_add_provider(np, genpd_xlate_simple, genpd);
2725 	if (ret)
2726 		goto err_opp;
2727 
2728 	genpd->provider = fwnode;
2729 	genpd->has_provider = true;
2730 
2731 	return 0;
2732 
2733 err_opp:
2734 	if (genpd->opp_table) {
2735 		dev_pm_opp_put_opp_table(genpd->opp_table);
2736 		dev_pm_opp_of_remove_table(&genpd->dev);
2737 	}
2738 err_del:
2739 	device_del(&genpd->dev);
2740 	return ret;
2741 }
2742 EXPORT_SYMBOL_GPL(of_genpd_add_provider_simple);
2743 
2744 /**
2745  * of_genpd_add_provider_onecell() - Register a onecell PM domain provider
2746  * @np: Device node pointer associated with the PM domain provider.
2747  * @data: Pointer to the data associated with the PM domain provider.
2748  */
2749 int of_genpd_add_provider_onecell(struct device_node *np,
2750 				  struct genpd_onecell_data *data)
2751 {
2752 	struct generic_pm_domain *genpd;
2753 	struct fwnode_handle *fwnode;
2754 	struct device *dev;
2755 	unsigned int i;
2756 	int ret = -EINVAL;
2757 	bool sync_state = false;
2758 
2759 	if (!np || !data)
2760 		return -EINVAL;
2761 
2762 	if (!genpd_bus_registered)
2763 		return -ENODEV;
2764 
2765 	if (!data->xlate)
2766 		data->xlate = genpd_xlate_onecell;
2767 
2768 	fwnode = of_fwnode_handle(np);
2769 	dev = get_dev_from_fwnode(fwnode);
2770 	if (!dev)
2771 		sync_state = true;
2772 	else
2773 		dev_set_drv_sync_state(dev, genpd_sync_state);
2774 
2775 	put_device(dev);
2776 
2777 	for (i = 0; i < data->num_domains; i++) {
2778 		genpd = data->domains[i];
2779 
2780 		if (!genpd)
2781 			continue;
2782 		if (!genpd_present(genpd))
2783 			goto error;
2784 
2785 		genpd->dev.of_node = np;
2786 
2787 		if (sync_state && !genpd_is_no_sync_state(genpd)) {
2788 			genpd->sync_state = GENPD_SYNC_STATE_ONECELL;
2789 			device_set_node(&genpd->dev, fwnode);
2790 			sync_state = false;
2791 		}
2792 
2793 		ret = device_add(&genpd->dev);
2794 		if (ret)
2795 			goto error;
2796 
2797 		/* Parse genpd OPP table */
2798 		if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) {
2799 			ret = dev_pm_opp_of_add_table_indexed(&genpd->dev, i);
2800 			if (ret) {
2801 				dev_err_probe(&genpd->dev, ret,
2802 					      "Failed to add OPP table for index %d\n", i);
2803 				device_del(&genpd->dev);
2804 				goto error;
2805 			}
2806 
2807 			/*
2808 			 * Save table for faster processing while setting
2809 			 * performance state.
2810 			 */
2811 			genpd->opp_table = dev_pm_opp_get_opp_table(&genpd->dev);
2812 			WARN_ON(IS_ERR(genpd->opp_table));
2813 		}
2814 
2815 		genpd->provider = fwnode;
2816 		genpd->has_provider = true;
2817 	}
2818 
2819 	ret = genpd_add_provider(np, data->xlate, data);
2820 	if (ret < 0)
2821 		goto error;
2822 
2823 	return 0;
2824 
2825 error:
2826 	while (i--) {
2827 		genpd = data->domains[i];
2828 
2829 		if (!genpd)
2830 			continue;
2831 
2832 		genpd->provider = NULL;
2833 		genpd->has_provider = false;
2834 
2835 		if (genpd->opp_table) {
2836 			dev_pm_opp_put_opp_table(genpd->opp_table);
2837 			dev_pm_opp_of_remove_table(&genpd->dev);
2838 		}
2839 
2840 		device_del(&genpd->dev);
2841 	}
2842 
2843 	return ret;
2844 }
2845 EXPORT_SYMBOL_GPL(of_genpd_add_provider_onecell);
2846 
2847 /**
2848  * of_genpd_del_provider() - Remove a previously registered PM domain provider
2849  * @np: Device node pointer associated with the PM domain provider
2850  */
2851 void of_genpd_del_provider(struct device_node *np)
2852 {
2853 	struct of_genpd_provider *cp, *tmp;
2854 	struct generic_pm_domain *gpd;
2855 
2856 	mutex_lock(&gpd_list_lock);
2857 	mutex_lock(&of_genpd_mutex);
2858 	list_for_each_entry_safe(cp, tmp, &of_genpd_providers, link) {
2859 		if (cp->node == np) {
2860 			/*
2861 			 * For each PM domain associated with the
2862 			 * provider, set the 'has_provider' to false
2863 			 * so that the PM domain can be safely removed.
2864 			 */
2865 			list_for_each_entry(gpd, &gpd_list, gpd_list_node) {
2866 				if (gpd->provider == of_fwnode_handle(np)) {
2867 					gpd->has_provider = false;
2868 
2869 					if (gpd->opp_table) {
2870 						dev_pm_opp_put_opp_table(gpd->opp_table);
2871 						dev_pm_opp_of_remove_table(&gpd->dev);
2872 					}
2873 
2874 					device_del(&gpd->dev);
2875 				}
2876 			}
2877 
2878 			fwnode_dev_initialized(of_fwnode_handle(cp->node), false);
2879 			list_del(&cp->link);
2880 			of_node_put(cp->node);
2881 			kfree(cp);
2882 			break;
2883 		}
2884 	}
2885 	mutex_unlock(&of_genpd_mutex);
2886 	mutex_unlock(&gpd_list_lock);
2887 }
2888 EXPORT_SYMBOL_GPL(of_genpd_del_provider);
2889 
2890 /**
2891  * genpd_get_from_provider() - Look-up PM domain
2892  * @genpdspec: OF phandle args to use for look-up
2893  *
2894  * Looks for a PM domain provider under the node specified by @genpdspec and if
2895  * found, uses xlate function of the provider to map phandle args to a PM
2896  * domain.
2897  *
2898  * Returns a valid pointer to struct generic_pm_domain on success or ERR_PTR()
2899  * on failure.
2900  */
2901 static struct generic_pm_domain *genpd_get_from_provider(
2902 					const struct of_phandle_args *genpdspec)
2903 {
2904 	struct generic_pm_domain *genpd = ERR_PTR(-ENOENT);
2905 	struct of_genpd_provider *provider;
2906 
2907 	if (!genpdspec)
2908 		return ERR_PTR(-EINVAL);
2909 
2910 	mutex_lock(&of_genpd_mutex);
2911 
2912 	/* Check if we have such a provider in our array */
2913 	list_for_each_entry(provider, &of_genpd_providers, link) {
2914 		if (provider->node == genpdspec->np)
2915 			genpd = provider->xlate(genpdspec, provider->data);
2916 		if (!IS_ERR(genpd))
2917 			break;
2918 	}
2919 
2920 	mutex_unlock(&of_genpd_mutex);
2921 
2922 	return genpd;
2923 }
2924 
2925 /**
2926  * of_genpd_add_child_ids() - Parse power-domains-child-ids property
2927  * @np: Device node pointer associated with the PM domain provider.
2928  * @data: Pointer to the onecell data associated with the PM domain provider.
2929  *
2930  * Parse the power-domains and power-domains-child-ids properties to establish
2931  * parent-child relationships for PM domains. The power-domains property lists
2932  * parent domains, and power-domains-child-ids lists which child domain IDs
2933  * should be associated with each parent.
2934  *
2935  * Uses "all or nothing" semantics: either all relationships are established
2936  * successfully, or none are (any partially-added relationships are unwound
2937  * on error).
2938  *
2939  * Returns the number of parent-child relationships established on success,
2940  * 0 if the properties don't exist, or a negative error code on failure.
2941  */
2942 int of_genpd_add_child_ids(struct device_node *np,
2943 			   struct genpd_onecell_data *data)
2944 {
2945 	struct of_phandle_args parent_args;
2946 	struct generic_pm_domain *parent_genpd, *child_genpd;
2947 	struct generic_pm_domain **pairs; /* pairs[2*i]=parent, pairs[2*i+1]=child */
2948 	u32 child_id;
2949 	int i, ret, count, child_count, added = 0;
2950 
2951 	/* Check if both properties exist */
2952 	count = of_count_phandle_with_args(np, "power-domains", "#power-domain-cells");
2953 	if (count <= 0)
2954 		return 0;
2955 
2956 	child_count = of_property_count_u32_elems(np, "power-domains-child-ids");
2957 	if (child_count < 0)
2958 		return 0;
2959 	if (child_count != count)
2960 		return -EINVAL;
2961 
2962 	/* Allocate tracking array for error unwind (parent/child pairs) */
2963 	pairs = kmalloc_array(count * 2, sizeof(*pairs), GFP_KERNEL);
2964 	if (!pairs)
2965 		return -ENOMEM;
2966 
2967 	for (i = 0; i < count; i++) {
2968 		ret = of_property_read_u32_index(np, "power-domains-child-ids",
2969 						 i, &child_id);
2970 		if (ret)
2971 			goto err_unwind;
2972 
2973 		/* Validate child ID is within bounds */
2974 		if (child_id >= data->num_domains) {
2975 			pr_err("Child ID %u out of bounds (max %u) for %pOF\n",
2976 			       child_id, data->num_domains - 1, np);
2977 			ret = -EINVAL;
2978 			goto err_unwind;
2979 		}
2980 
2981 		/* Get the child domain */
2982 		child_genpd = data->domains[child_id];
2983 		if (!child_genpd) {
2984 			pr_err("Child domain %u is NULL for %pOF\n", child_id, np);
2985 			ret = -EINVAL;
2986 			goto err_unwind;
2987 		}
2988 
2989 		ret = of_parse_phandle_with_args(np, "power-domains",
2990 						 "#power-domain-cells", i,
2991 						 &parent_args);
2992 		if (ret)
2993 			goto err_unwind;
2994 
2995 		/* Get the parent domain */
2996 		parent_genpd = genpd_get_from_provider(&parent_args);
2997 		of_node_put(parent_args.np);
2998 		if (IS_ERR(parent_genpd)) {
2999 			pr_err("Failed to get parent domain for %pOF: %ld\n",
3000 			       np, PTR_ERR(parent_genpd));
3001 			ret = PTR_ERR(parent_genpd);
3002 			goto err_unwind;
3003 		}
3004 
3005 		/* Establish parent-child relationship */
3006 		ret = pm_genpd_add_subdomain(parent_genpd, child_genpd);
3007 		if (ret) {
3008 			pr_err("Failed to add child domain %u to parent in %pOF: %d\n",
3009 			       child_id, np, ret);
3010 			goto err_unwind;
3011 		}
3012 
3013 		/* Track for potential unwind */
3014 		pairs[2 * added] = parent_genpd;
3015 		pairs[2 * added + 1] = child_genpd;
3016 		added++;
3017 
3018 		pr_debug("Added child domain %u (%s) to parent %s for %pOF\n",
3019 			 child_id, child_genpd->name, parent_genpd->name, np);
3020 	}
3021 
3022 	kfree(pairs);
3023 	return count;
3024 
3025 err_unwind:
3026 	/* Reverse all previously established relationships */
3027 	while (added-- > 0)
3028 		pm_genpd_remove_subdomain(pairs[2 * added], pairs[2 * added + 1]);
3029 	kfree(pairs);
3030 	return ret;
3031 }
3032 EXPORT_SYMBOL_GPL(of_genpd_add_child_ids);
3033 
3034 /**
3035  * of_genpd_remove_child_ids() - Remove parent-child PM domain relationships
3036  * @np: Device node pointer associated with the PM domain provider.
3037  * @data: Pointer to the onecell data associated with the PM domain provider.
3038  *
3039  * Reverses the effect of of_genpd_add_child_ids() by parsing the same
3040  * power-domains and power-domains-child-ids properties and calling
3041  * pm_genpd_remove_subdomain() for each established relationship.
3042  *
3043  * Returns 0 on success, -ENOENT if properties don't exist, or negative error
3044  * code on failure.
3045  */
3046 int of_genpd_remove_child_ids(struct device_node *np,
3047 			   struct genpd_onecell_data *data)
3048 {
3049 	struct of_phandle_args parent_args;
3050 	struct generic_pm_domain *parent_genpd, *child_genpd;
3051 	u32 child_id;
3052 	int i, ret, count, child_count;
3053 
3054 	/* Check if both properties exist */
3055 	count = of_count_phandle_with_args(np, "power-domains", "#power-domain-cells");
3056 	if (count <= 0)
3057 		return -ENOENT;
3058 
3059 	child_count = of_property_count_u32_elems(np, "power-domains-child-ids");
3060 	if (child_count < 0)
3061 		return -ENOENT;
3062 	if (child_count != count)
3063 		return -EINVAL;
3064 
3065 	for (i = 0; i < count; i++) {
3066 		if (of_property_read_u32_index(np, "power-domains-child-ids",
3067 					       i, &child_id))
3068 			continue;
3069 
3070 		if (child_id >= data->num_domains || !data->domains[child_id])
3071 			continue;
3072 
3073 		ret = of_parse_phandle_with_args(np, "power-domains",
3074 						 "#power-domain-cells", i,
3075 						 &parent_args);
3076 		if (ret)
3077 			continue;
3078 
3079 		parent_genpd = genpd_get_from_provider(&parent_args);
3080 		of_node_put(parent_args.np);
3081 		if (IS_ERR(parent_genpd))
3082 			continue;
3083 
3084 		child_genpd = data->domains[child_id];
3085 		pm_genpd_remove_subdomain(parent_genpd, child_genpd);
3086 	}
3087 
3088 	return 0;
3089 }
3090 EXPORT_SYMBOL_GPL(of_genpd_remove_child_ids);
3091 
3092 /**
3093  * of_genpd_add_device() - Add a device to an I/O PM domain
3094  * @genpdspec: OF phandle args to use for look-up PM domain
3095  * @dev: Device to be added.
3096  *
3097  * Looks-up an I/O PM domain based upon phandle args provided and adds
3098  * the device to the PM domain. Returns a negative error code on failure.
3099  */
3100 int of_genpd_add_device(const struct of_phandle_args *genpdspec, struct device *dev)
3101 {
3102 	struct generic_pm_domain *genpd;
3103 	int ret;
3104 
3105 	if (!dev)
3106 		return -EINVAL;
3107 
3108 	mutex_lock(&gpd_list_lock);
3109 
3110 	genpd = genpd_get_from_provider(genpdspec);
3111 	if (IS_ERR(genpd)) {
3112 		ret = PTR_ERR(genpd);
3113 		goto out;
3114 	}
3115 
3116 	ret = genpd_add_device(genpd, dev, dev);
3117 
3118 out:
3119 	mutex_unlock(&gpd_list_lock);
3120 
3121 	return ret;
3122 }
3123 EXPORT_SYMBOL_GPL(of_genpd_add_device);
3124 
3125 /**
3126  * of_genpd_add_subdomain - Add a subdomain to an I/O PM domain.
3127  * @parent_spec: OF phandle args to use for parent PM domain look-up
3128  * @subdomain_spec: OF phandle args to use for subdomain look-up
3129  *
3130  * Looks-up a parent PM domain and subdomain based upon phandle args
3131  * provided and adds the subdomain to the parent PM domain. Returns a
3132  * negative error code on failure.
3133  */
3134 int of_genpd_add_subdomain(const struct of_phandle_args *parent_spec,
3135 			   const struct of_phandle_args *subdomain_spec)
3136 {
3137 	struct generic_pm_domain *parent, *subdomain;
3138 	int ret;
3139 
3140 	mutex_lock(&gpd_list_lock);
3141 
3142 	parent = genpd_get_from_provider(parent_spec);
3143 	if (IS_ERR(parent)) {
3144 		ret = PTR_ERR(parent);
3145 		goto out;
3146 	}
3147 
3148 	subdomain = genpd_get_from_provider(subdomain_spec);
3149 	if (IS_ERR(subdomain)) {
3150 		ret = PTR_ERR(subdomain);
3151 		goto out;
3152 	}
3153 
3154 	ret = genpd_add_subdomain(parent, subdomain);
3155 
3156 out:
3157 	mutex_unlock(&gpd_list_lock);
3158 
3159 	return ret == -ENOENT ? -EPROBE_DEFER : ret;
3160 }
3161 EXPORT_SYMBOL_GPL(of_genpd_add_subdomain);
3162 
3163 /**
3164  * of_genpd_remove_subdomain - Remove a subdomain from an I/O PM domain.
3165  * @parent_spec: OF phandle args to use for parent PM domain look-up
3166  * @subdomain_spec: OF phandle args to use for subdomain look-up
3167  *
3168  * Looks-up a parent PM domain and subdomain based upon phandle args
3169  * provided and removes the subdomain from the parent PM domain. Returns a
3170  * negative error code on failure.
3171  */
3172 int of_genpd_remove_subdomain(const struct of_phandle_args *parent_spec,
3173 			      const struct of_phandle_args *subdomain_spec)
3174 {
3175 	struct generic_pm_domain *parent, *subdomain;
3176 	int ret;
3177 
3178 	mutex_lock(&gpd_list_lock);
3179 
3180 	parent = genpd_get_from_provider(parent_spec);
3181 	if (IS_ERR(parent)) {
3182 		ret = PTR_ERR(parent);
3183 		goto out;
3184 	}
3185 
3186 	subdomain = genpd_get_from_provider(subdomain_spec);
3187 	if (IS_ERR(subdomain)) {
3188 		ret = PTR_ERR(subdomain);
3189 		goto out;
3190 	}
3191 
3192 	ret = pm_genpd_remove_subdomain(parent, subdomain);
3193 
3194 out:
3195 	mutex_unlock(&gpd_list_lock);
3196 
3197 	return ret;
3198 }
3199 EXPORT_SYMBOL_GPL(of_genpd_remove_subdomain);
3200 
3201 /**
3202  * of_genpd_remove_last - Remove the last PM domain registered for a provider
3203  * @np: Pointer to device node associated with provider
3204  *
3205  * Find the last PM domain that was added by a particular provider and
3206  * remove this PM domain from the list of PM domains. The provider is
3207  * identified by the 'provider' device structure that is passed. The PM
3208  * domain will only be removed, if the provider associated with domain
3209  * has been removed.
3210  *
3211  * Returns a valid pointer to struct generic_pm_domain on success or
3212  * ERR_PTR() on failure.
3213  */
3214 struct generic_pm_domain *of_genpd_remove_last(struct device_node *np)
3215 {
3216 	struct generic_pm_domain *gpd, *tmp, *genpd = ERR_PTR(-ENOENT);
3217 	int ret;
3218 
3219 	if (IS_ERR_OR_NULL(np))
3220 		return ERR_PTR(-EINVAL);
3221 
3222 	mutex_lock(&gpd_list_lock);
3223 	list_for_each_entry_safe(gpd, tmp, &gpd_list, gpd_list_node) {
3224 		if (gpd->provider == of_fwnode_handle(np)) {
3225 			ret = genpd_remove(gpd);
3226 			genpd = ret ? ERR_PTR(ret) : gpd;
3227 			break;
3228 		}
3229 	}
3230 	mutex_unlock(&gpd_list_lock);
3231 
3232 	return genpd;
3233 }
3234 EXPORT_SYMBOL_GPL(of_genpd_remove_last);
3235 
3236 static void genpd_release_dev(struct device *dev)
3237 {
3238 	of_node_put(dev->of_node);
3239 	kfree(dev);
3240 }
3241 
3242 static const struct bus_type genpd_bus_type = {
3243 	.name		= "genpd",
3244 };
3245 
3246 /**
3247  * genpd_dev_pm_detach - Detach a device from its PM domain.
3248  * @dev: Device to detach.
3249  * @power_off: Currently not used
3250  *
3251  * Try to locate a corresponding generic PM domain, which the device was
3252  * attached to previously. If such is found, the device is detached from it.
3253  */
3254 static void genpd_dev_pm_detach(struct device *dev, bool power_off)
3255 {
3256 	struct generic_pm_domain *pd;
3257 	bool is_virt_dev;
3258 	unsigned int i;
3259 	int ret = 0;
3260 
3261 	pd = dev_to_genpd(dev);
3262 	if (IS_ERR(pd))
3263 		return;
3264 
3265 	dev_dbg(dev, "removing from PM domain %s\n", pd->name);
3266 
3267 	/* Check if the device was created by genpd at attach. */
3268 	is_virt_dev = dev->bus == &genpd_bus_type;
3269 
3270 	/* Disable runtime PM if we enabled it at attach. */
3271 	if (is_virt_dev)
3272 		pm_runtime_disable(dev);
3273 
3274 	/* Drop the default performance state */
3275 	if (dev_gpd_data(dev)->default_pstate) {
3276 		dev_pm_genpd_set_performance_state(dev, 0);
3277 		dev_gpd_data(dev)->default_pstate = 0;
3278 	}
3279 
3280 	for (i = 1; i < GENPD_RETRY_MAX_MS; i <<= 1) {
3281 		ret = genpd_remove_device(pd, dev);
3282 		if (ret != -EAGAIN)
3283 			break;
3284 
3285 		mdelay(i);
3286 		cond_resched();
3287 	}
3288 
3289 	if (ret < 0) {
3290 		dev_err(dev, "failed to remove from PM domain %s: %d",
3291 			pd->name, ret);
3292 		return;
3293 	}
3294 
3295 	/* Check if PM domain can be powered off after removing this device. */
3296 	genpd_queue_power_off_work(pd);
3297 
3298 	/* Unregister the device if it was created by genpd. */
3299 	if (is_virt_dev)
3300 		device_unregister(dev);
3301 }
3302 
3303 static void genpd_dev_pm_sync(struct device *dev)
3304 {
3305 	struct generic_pm_domain *pd;
3306 
3307 	pd = dev_to_genpd(dev);
3308 	if (IS_ERR(pd))
3309 		return;
3310 
3311 	genpd_queue_power_off_work(pd);
3312 }
3313 
3314 static int genpd_set_required_opp_dev(struct device *dev,
3315 				      struct device *base_dev)
3316 {
3317 	struct dev_pm_opp_config config = {
3318 		.required_dev = dev,
3319 	};
3320 	int ret;
3321 
3322 	/* Limit support to non-providers for now. */
3323 	if (of_property_present(base_dev->of_node, "#power-domain-cells"))
3324 		return 0;
3325 
3326 	if (!dev_pm_opp_of_has_required_opp(base_dev))
3327 		return 0;
3328 
3329 	ret = dev_pm_opp_set_config(base_dev, &config);
3330 	if (ret < 0)
3331 		return ret;
3332 
3333 	dev_gpd_data(dev)->opp_token = ret;
3334 	return 0;
3335 }
3336 
3337 static int genpd_set_required_opp(struct device *dev, unsigned int index)
3338 {
3339 	int ret, pstate;
3340 
3341 	/* Set the default performance state */
3342 	pstate = of_get_required_opp_performance_state(dev->of_node, index);
3343 	if (pstate < 0 && pstate != -ENODEV && pstate != -EOPNOTSUPP) {
3344 		ret = pstate;
3345 		goto err;
3346 	} else if (pstate > 0) {
3347 		ret = dev_pm_genpd_set_performance_state(dev, pstate);
3348 		if (ret)
3349 			goto err;
3350 		dev_gpd_data(dev)->default_pstate = pstate;
3351 	}
3352 
3353 	return 0;
3354 err:
3355 	dev_err(dev, "failed to set required performance state for power-domain %s: %d\n",
3356 		dev_to_genpd(dev)->name, ret);
3357 	return ret;
3358 }
3359 
3360 static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev,
3361 				 unsigned int index, unsigned int num_domains,
3362 				 bool power_on)
3363 {
3364 	struct of_phandle_args pd_args;
3365 	struct generic_pm_domain *pd;
3366 	int ret;
3367 
3368 	ret = of_parse_phandle_with_args(dev->of_node, "power-domains",
3369 				"#power-domain-cells", index, &pd_args);
3370 	if (ret < 0)
3371 		return ret;
3372 
3373 	mutex_lock(&gpd_list_lock);
3374 	pd = genpd_get_from_provider(&pd_args);
3375 	of_node_put(pd_args.np);
3376 	if (IS_ERR(pd)) {
3377 		mutex_unlock(&gpd_list_lock);
3378 		dev_dbg(dev, "%s() failed to find PM domain: %ld\n",
3379 			__func__, PTR_ERR(pd));
3380 		return driver_deferred_probe_check_state(base_dev);
3381 	}
3382 
3383 	dev_dbg(dev, "adding to PM domain %s\n", pd->name);
3384 
3385 	ret = genpd_add_device(pd, dev, base_dev);
3386 	mutex_unlock(&gpd_list_lock);
3387 
3388 	if (ret < 0)
3389 		return dev_err_probe(dev, ret, "failed to add to PM domain %s\n", pd->name);
3390 
3391 	dev->pm_domain->detach = genpd_dev_pm_detach;
3392 	dev->pm_domain->sync = genpd_dev_pm_sync;
3393 
3394 	/*
3395 	 * For a single PM domain the index of the required OPP must be zero, so
3396 	 * let's try to assign a required dev in that case. In the multiple PM
3397 	 * domains case, we need platform code to specify the index.
3398 	 */
3399 	if (num_domains == 1) {
3400 		ret = genpd_set_required_opp_dev(dev, base_dev);
3401 		if (ret)
3402 			goto err;
3403 	}
3404 
3405 	ret = genpd_set_required_opp(dev, index);
3406 	if (ret)
3407 		goto err;
3408 
3409 	if (power_on) {
3410 		genpd_lock(pd);
3411 		ret = genpd_power_on(pd, 0);
3412 		genpd_unlock(pd);
3413 	}
3414 
3415 	if (ret) {
3416 		/* Drop the default performance state */
3417 		if (dev_gpd_data(dev)->default_pstate) {
3418 			dev_pm_genpd_set_performance_state(dev, 0);
3419 			dev_gpd_data(dev)->default_pstate = 0;
3420 		}
3421 
3422 		genpd_remove_device(pd, dev);
3423 		return -EPROBE_DEFER;
3424 	}
3425 
3426 	return 1;
3427 
3428 err:
3429 	genpd_remove_device(pd, dev);
3430 	return ret;
3431 }
3432 
3433 /**
3434  * genpd_dev_pm_attach - Attach a device to its PM domain using DT.
3435  * @dev: Device to attach.
3436  *
3437  * Parse device's OF node to find a PM domain specifier. If such is found,
3438  * attaches the device to retrieved pm_domain ops.
3439  *
3440  * Returns 1 on successfully attached PM domain, 0 when the device don't need a
3441  * PM domain or when multiple power-domains exists for it, else a negative error
3442  * code. Note that if a power-domain exists for the device, but it cannot be
3443  * found or turned on, then return -EPROBE_DEFER to ensure that the device is
3444  * not probed and to re-try again later.
3445  */
3446 int genpd_dev_pm_attach(struct device *dev)
3447 {
3448 	if (!dev->of_node)
3449 		return 0;
3450 
3451 	/*
3452 	 * Devices with multiple PM domains must be attached separately, as we
3453 	 * can only attach one PM domain per device.
3454 	 */
3455 	if (of_count_phandle_with_args(dev->of_node, "power-domains",
3456 				       "#power-domain-cells") != 1)
3457 		return 0;
3458 
3459 	return __genpd_dev_pm_attach(dev, dev, 0, 1, true);
3460 }
3461 EXPORT_SYMBOL_GPL(genpd_dev_pm_attach);
3462 
3463 /**
3464  * genpd_dev_pm_attach_by_id - Associate a device with one of its PM domains.
3465  * @dev: The device used to lookup the PM domain.
3466  * @index: The index of the PM domain.
3467  *
3468  * Parse device's OF node to find a PM domain specifier at the provided @index.
3469  * If such is found, creates a virtual device and attaches it to the retrieved
3470  * pm_domain ops. To deal with detaching of the virtual device, the ->detach()
3471  * callback in the struct dev_pm_domain are assigned to genpd_dev_pm_detach().
3472  *
3473  * Returns the created virtual device if successfully attached PM domain, NULL
3474  * when the device don't need a PM domain, else an ERR_PTR() in case of
3475  * failures. If a power-domain exists for the device, but cannot be found or
3476  * turned on, then ERR_PTR(-EPROBE_DEFER) is returned to ensure that the device
3477  * is not probed and to re-try again later.
3478  */
3479 struct device *genpd_dev_pm_attach_by_id(struct device *dev,
3480 					 unsigned int index)
3481 {
3482 	struct device *virt_dev;
3483 	int num_domains;
3484 	int ret;
3485 
3486 	if (!dev->of_node)
3487 		return NULL;
3488 
3489 	/* Verify that the index is within a valid range. */
3490 	num_domains = of_count_phandle_with_args(dev->of_node, "power-domains",
3491 						 "#power-domain-cells");
3492 	if (num_domains < 0 || index >= num_domains)
3493 		return NULL;
3494 
3495 	if (!genpd_bus_registered)
3496 		return ERR_PTR(-ENODEV);
3497 
3498 	/* Allocate and register device on the genpd bus. */
3499 	virt_dev = kzalloc_obj(*virt_dev);
3500 	if (!virt_dev)
3501 		return ERR_PTR(-ENOMEM);
3502 
3503 	dev_set_name(virt_dev, "genpd:%u:%s", index, dev_name(dev));
3504 	virt_dev->bus = &genpd_bus_type;
3505 	virt_dev->release = genpd_release_dev;
3506 	virt_dev->of_node = of_node_get(dev->of_node);
3507 
3508 	ret = device_register(virt_dev);
3509 	if (ret) {
3510 		put_device(virt_dev);
3511 		return ERR_PTR(ret);
3512 	}
3513 
3514 	/* Try to attach the device to the PM domain at the specified index. */
3515 	ret = __genpd_dev_pm_attach(virt_dev, dev, index, num_domains, false);
3516 	if (ret < 1) {
3517 		device_unregister(virt_dev);
3518 		return ret ? ERR_PTR(ret) : NULL;
3519 	}
3520 
3521 	pm_runtime_enable(virt_dev);
3522 	genpd_queue_power_off_work(dev_to_genpd(virt_dev));
3523 
3524 	return virt_dev;
3525 }
3526 EXPORT_SYMBOL_GPL(genpd_dev_pm_attach_by_id);
3527 
3528 /**
3529  * genpd_dev_pm_attach_by_name - Associate a device with one of its PM domains.
3530  * @dev: The device used to lookup the PM domain.
3531  * @name: The name of the PM domain.
3532  *
3533  * Parse device's OF node to find a PM domain specifier using the
3534  * power-domain-names DT property. For further description see
3535  * genpd_dev_pm_attach_by_id().
3536  */
3537 struct device *genpd_dev_pm_attach_by_name(struct device *dev, const char *name)
3538 {
3539 	int index;
3540 
3541 	if (!dev->of_node)
3542 		return NULL;
3543 
3544 	index = of_property_match_string(dev->of_node, "power-domain-names",
3545 					 name);
3546 	if (index < 0)
3547 		return NULL;
3548 
3549 	return genpd_dev_pm_attach_by_id(dev, index);
3550 }
3551 
3552 static const struct of_device_id idle_state_match[] = {
3553 	{ .compatible = "domain-idle-state", },
3554 	{ }
3555 };
3556 
3557 static int genpd_parse_state(struct genpd_power_state *genpd_state,
3558 				    struct device_node *state_node)
3559 {
3560 	int err;
3561 	u32 residency;
3562 	u32 entry_latency, exit_latency;
3563 
3564 	err = of_property_read_u32(state_node, "entry-latency-us",
3565 						&entry_latency);
3566 	if (err) {
3567 		pr_debug(" * %pOF missing entry-latency-us property\n",
3568 			 state_node);
3569 		return -EINVAL;
3570 	}
3571 
3572 	err = of_property_read_u32(state_node, "exit-latency-us",
3573 						&exit_latency);
3574 	if (err) {
3575 		pr_debug(" * %pOF missing exit-latency-us property\n",
3576 			 state_node);
3577 		return -EINVAL;
3578 	}
3579 
3580 	err = of_property_read_u32(state_node, "min-residency-us", &residency);
3581 	if (!err)
3582 		genpd_state->residency_ns = 1000LL * residency;
3583 
3584 	of_property_read_string(state_node, "idle-state-name", &genpd_state->name);
3585 
3586 	genpd_state->power_on_latency_ns = 1000LL * exit_latency;
3587 	genpd_state->power_off_latency_ns = 1000LL * entry_latency;
3588 	genpd_state->fwnode = of_fwnode_handle(state_node);
3589 
3590 	return 0;
3591 }
3592 
3593 static int genpd_iterate_idle_states(struct device_node *dn,
3594 				     struct genpd_power_state *states)
3595 {
3596 	int ret;
3597 	struct of_phandle_iterator it;
3598 	struct device_node *np;
3599 	int i = 0;
3600 
3601 	ret = of_count_phandle_with_args(dn, "domain-idle-states", NULL);
3602 	if (ret <= 0)
3603 		return ret == -ENOENT ? 0 : ret;
3604 
3605 	/* Loop over the phandles until all the requested entry is found */
3606 	of_for_each_phandle(&it, ret, dn, "domain-idle-states", NULL, 0) {
3607 		np = it.node;
3608 		if (!of_match_node(idle_state_match, np))
3609 			continue;
3610 
3611 		if (!of_device_is_available(np))
3612 			continue;
3613 
3614 		if (states) {
3615 			ret = genpd_parse_state(&states[i], np);
3616 			if (ret) {
3617 				pr_err("Parsing idle state node %pOF failed with err %d\n",
3618 				       np, ret);
3619 				of_node_put(np);
3620 				return ret;
3621 			}
3622 		}
3623 		i++;
3624 	}
3625 
3626 	return i;
3627 }
3628 
3629 /**
3630  * of_genpd_parse_idle_states: Return array of idle states for the genpd.
3631  *
3632  * @dn: The genpd device node
3633  * @states: The pointer to which the state array will be saved.
3634  * @n: The count of elements in the array returned from this function.
3635  *
3636  * Returns the device states parsed from the OF node. The memory for the states
3637  * is allocated by this function and is the responsibility of the caller to
3638  * free the memory after use. If any or zero compatible domain idle states is
3639  * found it returns 0 and in case of errors, a negative error code is returned.
3640  */
3641 int of_genpd_parse_idle_states(struct device_node *dn,
3642 			struct genpd_power_state **states, int *n)
3643 {
3644 	struct genpd_power_state *st;
3645 	int ret;
3646 
3647 	ret = genpd_iterate_idle_states(dn, NULL);
3648 	if (ret < 0)
3649 		return ret;
3650 
3651 	if (!ret) {
3652 		*states = NULL;
3653 		*n = 0;
3654 		return 0;
3655 	}
3656 
3657 	st = kzalloc_objs(*st, ret);
3658 	if (!st)
3659 		return -ENOMEM;
3660 
3661 	ret = genpd_iterate_idle_states(dn, st);
3662 	if (ret <= 0) {
3663 		kfree(st);
3664 		return ret < 0 ? ret : -EINVAL;
3665 	}
3666 
3667 	*states = st;
3668 	*n = ret;
3669 
3670 	return 0;
3671 }
3672 EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states);
3673 
3674 /**
3675  * of_genpd_sync_state() - A common sync_state function for genpd providers
3676  * @np: The device node the genpd provider is associated with.
3677  *
3678  * The @np that corresponds to a genpd provider may provide one or multiple
3679  * genpds. This function makes use @np to find the genpds that belongs to the
3680  * provider. For each genpd we try a power-off.
3681  */
3682 void of_genpd_sync_state(struct device_node *np)
3683 {
3684 	struct generic_pm_domain *genpd;
3685 
3686 	if (!np)
3687 		return;
3688 
3689 	mutex_lock(&gpd_list_lock);
3690 	list_for_each_entry(genpd, &gpd_list, gpd_list_node) {
3691 		if (genpd->provider == of_fwnode_handle(np)) {
3692 			genpd_lock(genpd);
3693 			genpd->stay_on = false;
3694 			genpd_power_off(genpd, false, 0);
3695 			genpd_unlock(genpd);
3696 		}
3697 	}
3698 	mutex_unlock(&gpd_list_lock);
3699 }
3700 EXPORT_SYMBOL_GPL(of_genpd_sync_state);
3701 
3702 static int genpd_provider_probe(struct device *dev)
3703 {
3704 	return 0;
3705 }
3706 
3707 static void genpd_provider_sync_state(struct device *dev)
3708 {
3709 	struct generic_pm_domain *genpd = container_of(dev, struct generic_pm_domain, dev);
3710 
3711 	switch (genpd->sync_state) {
3712 	case GENPD_SYNC_STATE_OFF:
3713 		break;
3714 
3715 	case GENPD_SYNC_STATE_ONECELL:
3716 		of_genpd_sync_state(dev->of_node);
3717 		break;
3718 
3719 	case GENPD_SYNC_STATE_SIMPLE:
3720 		genpd_lock(genpd);
3721 		genpd->stay_on = false;
3722 		genpd_power_off(genpd, false, 0);
3723 		genpd_unlock(genpd);
3724 		break;
3725 
3726 	default:
3727 		break;
3728 	}
3729 }
3730 
3731 static struct device_driver genpd_provider_drv = {
3732 	.name = "genpd_provider",
3733 	.bus = &genpd_provider_bus_type,
3734 	.probe = genpd_provider_probe,
3735 	.sync_state = genpd_provider_sync_state,
3736 	.suppress_bind_attrs = true,
3737 };
3738 
3739 static int __init genpd_bus_init(void)
3740 {
3741 	int ret;
3742 
3743 	genpd_provider_bus = root_device_register("genpd_provider");
3744 	if (IS_ERR(genpd_provider_bus))
3745 		return PTR_ERR(genpd_provider_bus);
3746 
3747 	ret = bus_register(&genpd_provider_bus_type);
3748 	if (ret)
3749 		goto err_dev;
3750 
3751 	ret = bus_register(&genpd_bus_type);
3752 	if (ret)
3753 		goto err_prov_bus;
3754 
3755 	ret = driver_register(&genpd_provider_drv);
3756 	if (ret)
3757 		goto err_bus;
3758 
3759 	genpd_bus_registered = true;
3760 	return 0;
3761 
3762 err_bus:
3763 	bus_unregister(&genpd_bus_type);
3764 err_prov_bus:
3765 	bus_unregister(&genpd_provider_bus_type);
3766 err_dev:
3767 	root_device_unregister(genpd_provider_bus);
3768 	return ret;
3769 }
3770 core_initcall(genpd_bus_init);
3771 
3772 #endif /* CONFIG_PM_GENERIC_DOMAINS_OF */
3773 
3774 
3775 /***        debugfs support        ***/
3776 
3777 #ifdef CONFIG_DEBUG_FS
3778 /*
3779  * TODO: This function is a slightly modified version of rtpm_status_show
3780  * from sysfs.c, so generalize it.
3781  */
3782 static void rtpm_status_str(struct seq_file *s, struct device *dev)
3783 {
3784 	static const char * const status_lookup[] = {
3785 		[RPM_ACTIVE] = "active",
3786 		[RPM_RESUMING] = "resuming",
3787 		[RPM_SUSPENDED] = "suspended",
3788 		[RPM_SUSPENDING] = "suspending"
3789 	};
3790 	const char *p = "";
3791 
3792 	if (dev->power.runtime_error)
3793 		p = "error";
3794 	else if (dev->power.disable_depth)
3795 		p = "unsupported";
3796 	else if (dev->power.runtime_status < ARRAY_SIZE(status_lookup))
3797 		p = status_lookup[dev->power.runtime_status];
3798 	else
3799 		WARN_ON(1);
3800 
3801 	seq_printf(s, "%-26s  ", p);
3802 }
3803 
3804 static void perf_status_str(struct seq_file *s, struct device *dev)
3805 {
3806 	struct generic_pm_domain_data *gpd_data;
3807 
3808 	gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
3809 
3810 	seq_printf(s, "%-10u  ", gpd_data->performance_state);
3811 }
3812 
3813 static void mode_status_str(struct seq_file *s, struct device *dev)
3814 {
3815 	struct generic_pm_domain_data *gpd_data;
3816 
3817 	gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
3818 
3819 	seq_printf(s, "%2s", gpd_data->hw_mode ? "HW" : "SW");
3820 }
3821 
3822 static int genpd_summary_one(struct seq_file *s,
3823 			struct generic_pm_domain *genpd)
3824 {
3825 	static const char * const status_lookup[] = {
3826 		[GENPD_STATE_ON] = "on",
3827 		[GENPD_STATE_OFF] = "off"
3828 	};
3829 	struct pm_domain_data *pm_data;
3830 	struct gpd_link *link;
3831 	char state[16];
3832 	int ret;
3833 
3834 	ret = genpd_lock_interruptible(genpd);
3835 	if (ret)
3836 		return -ERESTARTSYS;
3837 
3838 	if (WARN_ON(genpd->status >= ARRAY_SIZE(status_lookup)))
3839 		goto exit;
3840 	if (!genpd_status_on(genpd))
3841 		snprintf(state, sizeof(state), "%s-%u",
3842 			 status_lookup[genpd->status], genpd->state_idx);
3843 	else
3844 		snprintf(state, sizeof(state), "%s",
3845 			 status_lookup[genpd->status]);
3846 	seq_printf(s, "%-30s  %-30s  %u", dev_name(&genpd->dev), state, genpd->performance_state);
3847 
3848 	/*
3849 	 * Modifications on the list require holding locks on both
3850 	 * parent and child, so we are safe.
3851 	 * Also the device name is immutable.
3852 	 */
3853 	list_for_each_entry(link, &genpd->parent_links, parent_node) {
3854 		if (list_is_first(&link->parent_node, &genpd->parent_links))
3855 			seq_printf(s, "\n%48s", " ");
3856 		seq_printf(s, "%s", link->child->name);
3857 		if (!list_is_last(&link->parent_node, &genpd->parent_links))
3858 			seq_puts(s, ", ");
3859 	}
3860 
3861 	list_for_each_entry(pm_data, &genpd->dev_list, list_node) {
3862 		seq_printf(s, "\n    %-30s  ", dev_name(pm_data->dev));
3863 		rtpm_status_str(s, pm_data->dev);
3864 		perf_status_str(s, pm_data->dev);
3865 		mode_status_str(s, pm_data->dev);
3866 	}
3867 
3868 	seq_puts(s, "\n");
3869 exit:
3870 	genpd_unlock(genpd);
3871 
3872 	return 0;
3873 }
3874 
3875 static int summary_show(struct seq_file *s, void *data)
3876 {
3877 	struct generic_pm_domain *genpd;
3878 	int ret = 0;
3879 
3880 	seq_puts(s, "domain                          status          children        performance\n");
3881 	seq_puts(s, "    /device                         runtime status                  managed by\n");
3882 	seq_puts(s, "------------------------------------------------------------------------------\n");
3883 
3884 	ret = mutex_lock_interruptible(&gpd_list_lock);
3885 	if (ret)
3886 		return -ERESTARTSYS;
3887 
3888 	list_for_each_entry(genpd, &gpd_list, gpd_list_node) {
3889 		ret = genpd_summary_one(s, genpd);
3890 		if (ret)
3891 			break;
3892 	}
3893 	mutex_unlock(&gpd_list_lock);
3894 
3895 	return ret;
3896 }
3897 
3898 static int status_show(struct seq_file *s, void *data)
3899 {
3900 	static const char * const status_lookup[] = {
3901 		[GENPD_STATE_ON] = "on",
3902 		[GENPD_STATE_OFF] = "off"
3903 	};
3904 
3905 	struct generic_pm_domain *genpd = s->private;
3906 	int ret = 0;
3907 
3908 	ret = genpd_lock_interruptible(genpd);
3909 	if (ret)
3910 		return -ERESTARTSYS;
3911 
3912 	if (WARN_ON_ONCE(genpd->status >= ARRAY_SIZE(status_lookup)))
3913 		goto exit;
3914 
3915 	if (genpd->status == GENPD_STATE_OFF)
3916 		seq_printf(s, "%s-%u\n", status_lookup[genpd->status],
3917 			genpd->state_idx);
3918 	else
3919 		seq_printf(s, "%s\n", status_lookup[genpd->status]);
3920 exit:
3921 	genpd_unlock(genpd);
3922 	return ret;
3923 }
3924 
3925 static int sub_domains_show(struct seq_file *s, void *data)
3926 {
3927 	struct generic_pm_domain *genpd = s->private;
3928 	struct gpd_link *link;
3929 	int ret = 0;
3930 
3931 	ret = genpd_lock_interruptible(genpd);
3932 	if (ret)
3933 		return -ERESTARTSYS;
3934 
3935 	list_for_each_entry(link, &genpd->parent_links, parent_node)
3936 		seq_printf(s, "%s\n", link->child->name);
3937 
3938 	genpd_unlock(genpd);
3939 	return ret;
3940 }
3941 
3942 static int idle_states_show(struct seq_file *s, void *data)
3943 {
3944 	struct generic_pm_domain *genpd = s->private;
3945 	u64 now, delta, idle_time = 0;
3946 	unsigned int i;
3947 	int ret = 0;
3948 
3949 	ret = genpd_lock_interruptible(genpd);
3950 	if (ret)
3951 		return -ERESTARTSYS;
3952 
3953 	seq_puts(s, "State  Time(ms)       Usage      Rejected   Above      Below      S2idle\n");
3954 
3955 	for (i = 0; i < genpd->state_count; i++) {
3956 		struct genpd_power_state *state = &genpd->states[i];
3957 		char state_name[7];
3958 
3959 		idle_time += state->idle_time;
3960 
3961 		if (genpd->status == GENPD_STATE_OFF && genpd->state_idx == i) {
3962 			now = ktime_get_mono_fast_ns();
3963 			if (now > genpd->accounting_time) {
3964 				delta = now - genpd->accounting_time;
3965 				idle_time += delta;
3966 			}
3967 		}
3968 
3969 		snprintf(state_name, ARRAY_SIZE(state_name), "S%-5d", i);
3970 		do_div(idle_time, NSEC_PER_MSEC);
3971 		seq_printf(s, "%-6s %-14llu %-10llu %-10llu %-10llu %-10llu %llu\n",
3972 			   state_name, idle_time, state->usage, state->rejected,
3973 			   state->above, state->below, state->usage_s2idle);
3974 	}
3975 
3976 	genpd_unlock(genpd);
3977 	return ret;
3978 }
3979 
3980 static int idle_states_desc_show(struct seq_file *s, void *data)
3981 {
3982 	struct generic_pm_domain *genpd = s->private;
3983 	unsigned int i;
3984 	int ret = 0;
3985 
3986 	ret = genpd_lock_interruptible(genpd);
3987 	if (ret)
3988 		return -ERESTARTSYS;
3989 
3990 	seq_puts(s, "State  Latency(us)  Residency(us)  Name\n");
3991 
3992 	for (i = 0; i < genpd->state_count; i++) {
3993 		struct genpd_power_state *state = &genpd->states[i];
3994 		u64 latency, residency;
3995 		char state_name[7];
3996 
3997 		latency = state->power_off_latency_ns +
3998 			state->power_on_latency_ns;
3999 		do_div(latency, NSEC_PER_USEC);
4000 
4001 		residency = state->residency_ns;
4002 		do_div(residency, NSEC_PER_USEC);
4003 
4004 		snprintf(state_name, ARRAY_SIZE(state_name), "S%-5d", i);
4005 		seq_printf(s, "%-6s %-12llu %-14llu %s\n",
4006 			   state_name, latency, residency,
4007 			   state->name ?: "N/A");
4008 	}
4009 
4010 	genpd_unlock(genpd);
4011 	return ret;
4012 }
4013 
4014 static int active_time_show(struct seq_file *s, void *data)
4015 {
4016 	struct generic_pm_domain *genpd = s->private;
4017 	u64 now, on_time, delta = 0;
4018 	int ret = 0;
4019 
4020 	ret = genpd_lock_interruptible(genpd);
4021 	if (ret)
4022 		return -ERESTARTSYS;
4023 
4024 	if (genpd->status == GENPD_STATE_ON) {
4025 		now = ktime_get_mono_fast_ns();
4026 		if (now > genpd->accounting_time)
4027 			delta = now - genpd->accounting_time;
4028 	}
4029 
4030 	on_time = genpd->on_time + delta;
4031 	do_div(on_time, NSEC_PER_MSEC);
4032 	seq_printf(s, "%llu ms\n", on_time);
4033 
4034 	genpd_unlock(genpd);
4035 	return ret;
4036 }
4037 
4038 static int total_idle_time_show(struct seq_file *s, void *data)
4039 {
4040 	struct generic_pm_domain *genpd = s->private;
4041 	u64 now, delta, total = 0;
4042 	unsigned int i;
4043 	int ret = 0;
4044 
4045 	ret = genpd_lock_interruptible(genpd);
4046 	if (ret)
4047 		return -ERESTARTSYS;
4048 
4049 	for (i = 0; i < genpd->state_count; i++) {
4050 		total += genpd->states[i].idle_time;
4051 
4052 		if (genpd->status == GENPD_STATE_OFF && genpd->state_idx == i) {
4053 			now = ktime_get_mono_fast_ns();
4054 			if (now > genpd->accounting_time) {
4055 				delta = now - genpd->accounting_time;
4056 				total += delta;
4057 			}
4058 		}
4059 	}
4060 
4061 	do_div(total, NSEC_PER_MSEC);
4062 	seq_printf(s, "%llu ms\n", total);
4063 
4064 	genpd_unlock(genpd);
4065 	return ret;
4066 }
4067 
4068 
4069 static int devices_show(struct seq_file *s, void *data)
4070 {
4071 	struct generic_pm_domain *genpd = s->private;
4072 	struct pm_domain_data *pm_data;
4073 	int ret = 0;
4074 
4075 	ret = genpd_lock_interruptible(genpd);
4076 	if (ret)
4077 		return -ERESTARTSYS;
4078 
4079 	list_for_each_entry(pm_data, &genpd->dev_list, list_node)
4080 		seq_printf(s, "%s\n", dev_name(pm_data->dev));
4081 
4082 	genpd_unlock(genpd);
4083 	return ret;
4084 }
4085 
4086 static int perf_state_show(struct seq_file *s, void *data)
4087 {
4088 	struct generic_pm_domain *genpd = s->private;
4089 
4090 	if (genpd_lock_interruptible(genpd))
4091 		return -ERESTARTSYS;
4092 
4093 	seq_printf(s, "%u\n", genpd->performance_state);
4094 
4095 	genpd_unlock(genpd);
4096 	return 0;
4097 }
4098 
4099 DEFINE_SHOW_ATTRIBUTE(summary);
4100 DEFINE_SHOW_ATTRIBUTE(status);
4101 DEFINE_SHOW_ATTRIBUTE(sub_domains);
4102 DEFINE_SHOW_ATTRIBUTE(idle_states);
4103 DEFINE_SHOW_ATTRIBUTE(idle_states_desc);
4104 DEFINE_SHOW_ATTRIBUTE(active_time);
4105 DEFINE_SHOW_ATTRIBUTE(total_idle_time);
4106 DEFINE_SHOW_ATTRIBUTE(devices);
4107 DEFINE_SHOW_ATTRIBUTE(perf_state);
4108 
4109 static void genpd_debug_add(struct generic_pm_domain *genpd)
4110 {
4111 	struct dentry *d;
4112 
4113 	if (!genpd_debugfs_dir)
4114 		return;
4115 
4116 	d = debugfs_create_dir(dev_name(&genpd->dev), genpd_debugfs_dir);
4117 
4118 	debugfs_create_file("current_state", 0444,
4119 			    d, genpd, &status_fops);
4120 	debugfs_create_file("sub_domains", 0444,
4121 			    d, genpd, &sub_domains_fops);
4122 	debugfs_create_file("idle_states", 0444,
4123 			    d, genpd, &idle_states_fops);
4124 	debugfs_create_file("idle_states_desc", 0444,
4125 			    d, genpd, &idle_states_desc_fops);
4126 	debugfs_create_file("active_time", 0444,
4127 			    d, genpd, &active_time_fops);
4128 	debugfs_create_file("total_idle_time", 0444,
4129 			    d, genpd, &total_idle_time_fops);
4130 	debugfs_create_file("devices", 0444,
4131 			    d, genpd, &devices_fops);
4132 	if (genpd->set_performance_state)
4133 		debugfs_create_file("perf_state", 0444,
4134 				    d, genpd, &perf_state_fops);
4135 }
4136 
4137 static int __init genpd_debug_init(void)
4138 {
4139 	struct generic_pm_domain *genpd;
4140 
4141 	genpd_debugfs_dir = debugfs_create_dir("pm_genpd", NULL);
4142 
4143 	debugfs_create_file("pm_genpd_summary", S_IRUGO, genpd_debugfs_dir,
4144 			    NULL, &summary_fops);
4145 
4146 	list_for_each_entry(genpd, &gpd_list, gpd_list_node)
4147 		genpd_debug_add(genpd);
4148 
4149 	return 0;
4150 }
4151 late_initcall(genpd_debug_init);
4152 
4153 static void __exit genpd_debug_exit(void)
4154 {
4155 	debugfs_remove_recursive(genpd_debugfs_dir);
4156 }
4157 __exitcall(genpd_debug_exit);
4158 #endif /* CONFIG_DEBUG_FS */
4159