xref: /linux/drivers/power/sequencing/core.c (revision 5d7f3375cd574fc83f0cd30839b21455c0e79ae2)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2024 Linaro Ltd.
4  */
5 
6 #include <linux/bug.h>
7 #include <linux/cleanup.h>
8 #include <linux/debugfs.h>
9 #include <linux/device.h>
10 #include <linux/err.h>
11 #include <linux/export.h>
12 #include <linux/idr.h>
13 #include <linux/kernel.h>
14 #include <linux/kref.h>
15 #include <linux/list.h>
16 #include <linux/lockdep.h>
17 #include <linux/module.h>
18 #include <linux/mutex.h>
19 #include <linux/property.h>
20 #include <linux/pwrseq/consumer.h>
21 #include <linux/pwrseq/provider.h>
22 #include <linux/radix-tree.h>
23 #include <linux/rwsem.h>
24 #include <linux/slab.h>
25 
26 /*
27  * Power-sequencing framework for linux.
28  *
29  * This subsystem allows power sequence providers to register a set of targets
30  * that consumers may request and power-up/down.
31  *
32  * Glossary:
33  *
34  * Unit - a unit is a discreet chunk of a power sequence. For instance one unit
35  * may enable a set of regulators, another may enable a specific GPIO. Units
36  * can define dependencies in the form of other units that must be enabled
37  * before it itself can be.
38  *
39  * Target - a target is a set of units (composed of the "final" unit and its
40  * dependencies) that a consumer selects by its name when requesting a handle
41  * to the power sequencer. Via the dependency system, multiple targets may
42  * share the same parts of a power sequence but ignore parts that are
43  * irrelevant.
44  *
45  * Descriptor - a handle passed by the pwrseq core to every consumer that
46  * serves as the entry point to the provider layer. It ensures coherence
47  * between different users and keeps reference counting consistent.
48  *
49  * Each provider must define a .match() callback whose role is to determine
50  * whether a potential consumer is in fact associated with this sequencer.
51  * This allows creating abstraction layers on top of regular device-tree
52  * resources like regulators, clocks and other nodes connected to the consumer
53  * via phandle.
54  */
55 
56 static DEFINE_IDA(pwrseq_ida);
57 
58 /*
59  * Protects the device list on the pwrseq bus from concurrent modifications
60  * but allows simultaneous read-only access.
61  */
62 static DECLARE_RWSEM(pwrseq_sem);
63 
64 /**
65  * struct pwrseq_unit - Private power-sequence unit data.
66  * @ref: Reference count for this object. When it goes to 0, the object is
67  *       destroyed.
68  * @name: Name of this target.
69  * @list: Link to siblings on the list of all units of a single sequencer.
70  * @deps: List of units on which this unit depends.
71  * @enable: Callback running the part of the power-on sequence provided by
72  *          this unit.
73  * @disable: Callback running the part of the power-off sequence provided
74  *           by this unit.
75  * @enable_count: Current number of users that enabled this unit. May be the
76  *                consumer of the power sequencer or other units that depend
77  *                on this one.
78  */
79 struct pwrseq_unit {
80 	struct kref ref;
81 	const char *name;
82 	struct list_head list;
83 	struct list_head deps;
84 	pwrseq_power_state_func enable;
85 	pwrseq_power_state_func disable;
86 	unsigned int enable_count;
87 };
88 
89 static struct pwrseq_unit *pwrseq_unit_new(const struct pwrseq_unit_data *data)
90 {
91 	struct pwrseq_unit *unit;
92 
93 	unit = kzalloc_obj(*unit);
94 	if (!unit)
95 		return NULL;
96 
97 	unit->name = kstrdup_const(data->name, GFP_KERNEL);
98 	if (!unit->name) {
99 		kfree(unit);
100 		return NULL;
101 	}
102 
103 	kref_init(&unit->ref);
104 	INIT_LIST_HEAD(&unit->list);
105 	INIT_LIST_HEAD(&unit->deps);
106 	unit->enable = data->enable;
107 	unit->disable = data->disable;
108 
109 	return unit;
110 }
111 
112 static struct pwrseq_unit *pwrseq_unit_get(struct pwrseq_unit *unit)
113 {
114 	kref_get(&unit->ref);
115 
116 	return unit;
117 }
118 
119 static void pwrseq_unit_release(struct kref *ref);
120 
121 static void pwrseq_unit_put(struct pwrseq_unit *unit)
122 {
123 	kref_put(&unit->ref, pwrseq_unit_release);
124 }
125 
126 /**
127  * struct pwrseq_unit_dep - Wrapper around a reference to the unit structure
128  *                          allowing to keep it on multiple dependency lists
129  *                          in different units.
130  * @list: Siblings on the list.
131  * @unit: Address of the referenced unit.
132  */
133 struct pwrseq_unit_dep {
134 	struct list_head list;
135 	struct pwrseq_unit *unit;
136 };
137 
138 static struct pwrseq_unit_dep *pwrseq_unit_dep_new(struct pwrseq_unit *unit)
139 {
140 	struct pwrseq_unit_dep *dep;
141 
142 	dep = kzalloc_obj(*dep);
143 	if (!dep)
144 		return NULL;
145 
146 	dep->unit = unit;
147 
148 	return dep;
149 }
150 
151 static void pwrseq_unit_dep_free(struct pwrseq_unit_dep *ref)
152 {
153 	pwrseq_unit_put(ref->unit);
154 	kfree(ref);
155 }
156 
157 static void pwrseq_unit_free_deps(struct list_head *list)
158 {
159 	struct pwrseq_unit_dep *dep, *next;
160 
161 	list_for_each_entry_safe(dep, next, list, list) {
162 		list_del(&dep->list);
163 		pwrseq_unit_dep_free(dep);
164 	}
165 }
166 
167 static void pwrseq_unit_release(struct kref *ref)
168 {
169 	struct pwrseq_unit *unit = container_of(ref, struct pwrseq_unit, ref);
170 
171 	pwrseq_unit_free_deps(&unit->deps);
172 	list_del(&unit->list);
173 	kfree_const(unit->name);
174 	kfree(unit);
175 }
176 
177 /**
178  * struct pwrseq_target - Private power-sequence target data.
179  * @list: Siblings on the list of all targets exposed by a power sequencer.
180  * @name: Name of the target.
181  * @unit: Final unit for this target.
182  * @post_enable: Callback run after the target unit has been enabled, *after*
183  *               the state lock has been released. It's useful for implementing
184  *               boot-up delays without blocking other users from powering up
185  *               using the same power sequencer.
186  * @is_controllable: Optional callback reporting whether enabling/disabling
187  *                   this target actually controls power.
188  */
189 struct pwrseq_target {
190 	struct list_head list;
191 	const char *name;
192 	struct pwrseq_unit *unit;
193 	pwrseq_power_state_func post_enable;
194 	pwrseq_is_controllable_func is_controllable;
195 };
196 
197 static struct pwrseq_target *
198 pwrseq_target_new(const struct pwrseq_target_data *data)
199 {
200 	struct pwrseq_target *target;
201 
202 	target = kzalloc_obj(*target);
203 	if (!target)
204 		return NULL;
205 
206 	target->name = kstrdup_const(data->name, GFP_KERNEL);
207 	if (!target->name) {
208 		kfree(target);
209 		return NULL;
210 	}
211 
212 	target->post_enable = data->post_enable;
213 	target->is_controllable = data->is_controllable;
214 
215 	return target;
216 }
217 
218 static void pwrseq_target_free(struct pwrseq_target *target)
219 {
220 	if (!IS_ERR_OR_NULL(target->unit))
221 		pwrseq_unit_put(target->unit);
222 	kfree_const(target->name);
223 	kfree(target);
224 }
225 
226 /**
227  * struct pwrseq_device - Private power sequencing data.
228  * @dev: Device struct associated with this sequencer.
229  * @id: Device ID.
230  * @owner: Prevents removal of active power sequencing providers.
231  * @rw_lock: Protects the device from being unregistered while in use.
232  * @state_lock: Prevents multiple users running the power sequence at the same
233  *              time.
234  * @match: Power sequencer matching callback.
235  * @targets: List of targets exposed by this sequencer.
236  * @units: List of all units supported by this sequencer.
237  */
238 struct pwrseq_device {
239 	struct device dev;
240 	int id;
241 	struct module *owner;
242 	struct rw_semaphore rw_lock;
243 	struct mutex state_lock;
244 	pwrseq_match_func match;
245 	struct list_head targets;
246 	struct list_head units;
247 };
248 
249 static struct pwrseq_device *to_pwrseq_device(struct device *dev)
250 {
251 	return container_of(dev, struct pwrseq_device, dev);
252 }
253 
254 static struct pwrseq_device *pwrseq_device_get(struct pwrseq_device *pwrseq)
255 {
256 	get_device(&pwrseq->dev);
257 
258 	return pwrseq;
259 }
260 
261 static void pwrseq_device_put(struct pwrseq_device *pwrseq)
262 {
263 	put_device(&pwrseq->dev);
264 }
265 
266 /**
267  * struct pwrseq_desc - Wraps access to the pwrseq_device and ensures that one
268  *                      user cannot break the reference counting for others.
269  * @pwrseq: Reference to the power sequencing device.
270  * @target: Reference to the target this descriptor allows to control.
271  * @powered_on: Power state set by the holder of the descriptor (not necessarily
272  * corresponding to the actual power state of the device).
273  */
274 struct pwrseq_desc {
275 	struct pwrseq_device *pwrseq;
276 	struct pwrseq_target *target;
277 	bool powered_on;
278 };
279 
280 static const struct bus_type pwrseq_bus = {
281 	.name = "pwrseq",
282 };
283 
284 static void pwrseq_release(struct device *dev)
285 {
286 	struct pwrseq_device *pwrseq = to_pwrseq_device(dev);
287 	struct pwrseq_target *target, *pos;
288 
289 	list_for_each_entry_safe(target, pos, &pwrseq->targets, list) {
290 		list_del(&target->list);
291 		pwrseq_target_free(target);
292 	}
293 
294 	mutex_destroy(&pwrseq->state_lock);
295 	ida_free(&pwrseq_ida, pwrseq->id);
296 	kfree(pwrseq);
297 }
298 
299 static const struct device_type pwrseq_device_type = {
300 	.name = "power_sequencer",
301 	.release = pwrseq_release,
302 };
303 
304 static int pwrseq_check_unit_deps(const struct pwrseq_unit_data *data,
305 				  struct radix_tree_root *visited_units)
306 {
307 	const struct pwrseq_unit_data *tmp, **cur;
308 	int ret;
309 
310 	ret = radix_tree_insert(visited_units, (unsigned long)data,
311 				(void *)data);
312 	if (ret)
313 		return ret;
314 
315 	for (cur = data->deps; cur && *cur; cur++) {
316 		tmp = radix_tree_lookup(visited_units, (unsigned long)*cur);
317 		if (tmp) {
318 			WARN(1, "Circular dependency in power sequencing flow detected!\n");
319 			return -EINVAL;
320 		}
321 
322 		ret = pwrseq_check_unit_deps(*cur, visited_units);
323 		if (ret)
324 			return ret;
325 	}
326 
327 	return 0;
328 }
329 
330 static int pwrseq_check_target_deps(const struct pwrseq_target_data *data)
331 {
332 	struct radix_tree_root visited_units;
333 	struct radix_tree_iter iter;
334 	void __rcu **slot;
335 	int ret;
336 
337 	if (!data->unit)
338 		return -EINVAL;
339 
340 	INIT_RADIX_TREE(&visited_units, GFP_KERNEL);
341 	ret = pwrseq_check_unit_deps(data->unit, &visited_units);
342 	radix_tree_for_each_slot(slot, &visited_units, &iter, 0)
343 		radix_tree_delete(&visited_units, iter.index);
344 
345 	return ret;
346 }
347 
348 static int pwrseq_unit_setup_deps(const struct pwrseq_unit_data **data,
349 				  struct list_head *dep_list,
350 				  struct list_head *unit_list,
351 				  struct radix_tree_root *processed_units);
352 
353 static struct pwrseq_unit *
354 pwrseq_unit_setup(const struct pwrseq_unit_data *data,
355 		  struct list_head *unit_list,
356 		  struct radix_tree_root *processed_units)
357 {
358 	struct pwrseq_unit *unit;
359 	int ret;
360 
361 	unit = radix_tree_lookup(processed_units, (unsigned long)data);
362 	if (unit)
363 		return pwrseq_unit_get(unit);
364 
365 	unit = pwrseq_unit_new(data);
366 	if (!unit)
367 		return ERR_PTR(-ENOMEM);
368 
369 	if (data->deps) {
370 		ret = pwrseq_unit_setup_deps(data->deps, &unit->deps,
371 					     unit_list, processed_units);
372 		if (ret) {
373 			pwrseq_unit_put(unit);
374 			return ERR_PTR(ret);
375 		}
376 	}
377 
378 	ret = radix_tree_insert(processed_units, (unsigned long)data, unit);
379 	if (ret) {
380 		pwrseq_unit_put(unit);
381 		return ERR_PTR(ret);
382 	}
383 
384 	list_add_tail(&unit->list, unit_list);
385 
386 	return unit;
387 }
388 
389 static int pwrseq_unit_setup_deps(const struct pwrseq_unit_data **data,
390 				  struct list_head *dep_list,
391 				  struct list_head *unit_list,
392 				  struct radix_tree_root *processed_units)
393 {
394 	const struct pwrseq_unit_data *pos;
395 	struct pwrseq_unit_dep *dep;
396 	struct pwrseq_unit *unit;
397 	int i;
398 
399 	for (i = 0; data[i]; i++) {
400 		pos = data[i];
401 
402 		unit = pwrseq_unit_setup(pos, unit_list, processed_units);
403 		if (IS_ERR(unit))
404 			return PTR_ERR(unit);
405 
406 		dep = pwrseq_unit_dep_new(unit);
407 		if (!dep) {
408 			pwrseq_unit_put(unit);
409 			return -ENOMEM;
410 		}
411 
412 		list_add_tail(&dep->list, dep_list);
413 	}
414 
415 	return 0;
416 }
417 
418 static int pwrseq_do_setup_targets(const struct pwrseq_target_data **data,
419 				   struct pwrseq_device *pwrseq,
420 				   struct radix_tree_root *processed_units)
421 {
422 	const struct pwrseq_target_data *pos;
423 	struct pwrseq_target *target;
424 	int ret, i;
425 
426 	for (i = 0; data[i]; i++) {
427 		pos = data[i];
428 
429 		ret = pwrseq_check_target_deps(pos);
430 		if (ret)
431 			return ret;
432 
433 		target = pwrseq_target_new(pos);
434 		if (!target)
435 			return -ENOMEM;
436 
437 		target->unit = pwrseq_unit_setup(pos->unit, &pwrseq->units,
438 						 processed_units);
439 		if (IS_ERR(target->unit)) {
440 			ret = PTR_ERR(target->unit);
441 			pwrseq_target_free(target);
442 			return ret;
443 		}
444 
445 		list_add_tail(&target->list, &pwrseq->targets);
446 	}
447 
448 	return 0;
449 }
450 
451 static int pwrseq_setup_targets(const struct pwrseq_target_data **targets,
452 				struct pwrseq_device *pwrseq)
453 {
454 	struct radix_tree_root processed_units;
455 	struct radix_tree_iter iter;
456 	void __rcu **slot;
457 	int ret;
458 
459 	INIT_RADIX_TREE(&processed_units, GFP_KERNEL);
460 	ret = pwrseq_do_setup_targets(targets, pwrseq, &processed_units);
461 	radix_tree_for_each_slot(slot, &processed_units, &iter, 0)
462 		radix_tree_delete(&processed_units, iter.index);
463 
464 	return ret;
465 }
466 
467 /**
468  * pwrseq_device_register() - Register a new power sequencer.
469  * @config: Configuration of the new power sequencing device.
470  *
471  * The config structure is only used during the call and can be freed after
472  * the function returns. The config structure *must* have the parent device
473  * as well as the match() callback and at least one target set.
474  *
475  * Returns:
476  * Returns the address of the new pwrseq device or ERR_PTR() on failure.
477  */
478 struct pwrseq_device *
479 pwrseq_device_register(const struct pwrseq_config *config)
480 {
481 	struct pwrseq_device *pwrseq;
482 	int ret, id;
483 
484 	if (!config->parent || !config->match || !config->targets ||
485 	    !config->targets[0])
486 		return ERR_PTR(-EINVAL);
487 
488 	pwrseq = kzalloc_obj(*pwrseq);
489 	if (!pwrseq)
490 		return ERR_PTR(-ENOMEM);
491 
492 	pwrseq->dev.type = &pwrseq_device_type;
493 	pwrseq->dev.bus = &pwrseq_bus;
494 	pwrseq->dev.parent = config->parent;
495 	device_set_node(&pwrseq->dev, dev_fwnode(config->parent));
496 	dev_set_drvdata(&pwrseq->dev, config->drvdata);
497 
498 	id = ida_alloc(&pwrseq_ida, GFP_KERNEL);
499 	if (id < 0) {
500 		kfree(pwrseq);
501 		return ERR_PTR(id);
502 	}
503 
504 	pwrseq->id = id;
505 
506 	/*
507 	 * From this point onwards the device's release() callback is
508 	 * responsible for freeing resources.
509 	 */
510 	device_initialize(&pwrseq->dev);
511 
512 	pwrseq->owner = config->owner ?: THIS_MODULE;
513 	pwrseq->match = config->match;
514 
515 	init_rwsem(&pwrseq->rw_lock);
516 	mutex_init(&pwrseq->state_lock);
517 	INIT_LIST_HEAD(&pwrseq->targets);
518 	INIT_LIST_HEAD(&pwrseq->units);
519 
520 	ret = dev_set_name(&pwrseq->dev, "pwrseq.%d", pwrseq->id);
521 	if (ret)
522 		goto err_put_pwrseq;
523 
524 	ret = pwrseq_setup_targets(config->targets, pwrseq);
525 	if (ret)
526 		goto err_put_pwrseq;
527 
528 	scoped_guard(rwsem_write, &pwrseq_sem) {
529 		ret = device_add(&pwrseq->dev);
530 		if (ret)
531 			goto err_put_pwrseq;
532 	}
533 
534 	return pwrseq;
535 
536 err_put_pwrseq:
537 	pwrseq_device_put(pwrseq);
538 	return ERR_PTR(ret);
539 }
540 EXPORT_SYMBOL_GPL(pwrseq_device_register);
541 
542 /**
543  * pwrseq_device_unregister() - Unregister the power sequencer.
544  * @pwrseq: Power sequencer to unregister.
545  */
546 void pwrseq_device_unregister(struct pwrseq_device *pwrseq)
547 {
548 	struct device *dev = &pwrseq->dev;
549 	struct pwrseq_target *target;
550 
551 	scoped_guard(rwsem_write, &pwrseq_sem) {
552 		guard(rwsem_write)(&pwrseq->rw_lock);
553 
554 		/*
555 		 * Holding rw_lock for write excludes all power on/off callers
556 		 * (they hold it for read), so it's safe to read enable_count
557 		 * here without taking the state_lock.
558 		 */
559 		list_for_each_entry(target, &pwrseq->targets, list)
560 			WARN(target->unit->enable_count,
561 			     "REMOVING POWER SEQUENCER WITH ACTIVE USERS\n");
562 
563 		device_del(dev);
564 	}
565 
566 	pwrseq_device_put(pwrseq);
567 }
568 EXPORT_SYMBOL_GPL(pwrseq_device_unregister);
569 
570 static void devm_pwrseq_device_unregister(void *data)
571 {
572 	struct pwrseq_device *pwrseq = data;
573 
574 	pwrseq_device_unregister(pwrseq);
575 }
576 
577 /**
578  * devm_pwrseq_device_register() - Managed variant of pwrseq_device_register().
579  * @dev: Managing device.
580  * @config: Configuration of the new power sequencing device.
581  *
582  * Returns:
583  * Returns the address of the new pwrseq device or ERR_PTR() on failure.
584  */
585 struct pwrseq_device *
586 devm_pwrseq_device_register(struct device *dev,
587 			    const struct pwrseq_config *config)
588 {
589 	struct pwrseq_device *pwrseq;
590 	int ret;
591 
592 	pwrseq = pwrseq_device_register(config);
593 	if (IS_ERR(pwrseq))
594 		return pwrseq;
595 
596 	ret = devm_add_action_or_reset(dev, devm_pwrseq_device_unregister,
597 				       pwrseq);
598 	if (ret)
599 		return ERR_PTR(ret);
600 
601 	return pwrseq;
602 }
603 EXPORT_SYMBOL_GPL(devm_pwrseq_device_register);
604 
605 /**
606  * pwrseq_device_get_drvdata() - Get the driver private data associated with
607  *                               this sequencer.
608  * @pwrseq: Power sequencer object.
609  *
610  * Returns:
611  * Address of the private driver data.
612  */
613 void *pwrseq_device_get_drvdata(struct pwrseq_device *pwrseq)
614 {
615 	return dev_get_drvdata(&pwrseq->dev);
616 }
617 EXPORT_SYMBOL_GPL(pwrseq_device_get_drvdata);
618 
619 struct pwrseq_match_data {
620 	struct pwrseq_desc *desc;
621 	struct device *dev;
622 	const char *target;
623 };
624 
625 static int pwrseq_match_device(struct device *pwrseq_dev, void *data)
626 {
627 	struct pwrseq_device *pwrseq = to_pwrseq_device(pwrseq_dev);
628 	struct pwrseq_match_data *match_data = data;
629 	struct pwrseq_target *target;
630 	int ret;
631 
632 	lockdep_assert_held_read(&pwrseq_sem);
633 
634 	guard(rwsem_read)(&pwrseq->rw_lock);
635 	if (!device_is_registered(&pwrseq->dev))
636 		return 0;
637 
638 	ret = pwrseq->match(pwrseq, match_data->dev);
639 	if (ret == PWRSEQ_NO_MATCH || ret < 0)
640 		return ret;
641 
642 	/* We got the matching device, let's find the right target. */
643 	list_for_each_entry(target, &pwrseq->targets, list) {
644 		if (strcmp(target->name, match_data->target))
645 			continue;
646 
647 		match_data->desc->target = target;
648 	}
649 
650 	/*
651 	 * This device does not have this target. No point in deferring as it
652 	 * will not get a new target dynamically later.
653 	 */
654 	if (!match_data->desc->target)
655 		return -ENOENT;
656 
657 	if (!try_module_get(pwrseq->owner))
658 		return -EPROBE_DEFER;
659 
660 	match_data->desc->pwrseq = pwrseq_device_get(pwrseq);
661 
662 	return PWRSEQ_MATCH_OK;
663 }
664 
665 /**
666  * pwrseq_get() - Get the power sequencer associated with this device.
667  * @dev: Device for which to get the sequencer.
668  * @target: Name of the target exposed by the sequencer this device wants to
669  *          reach.
670  *
671  * Returns:
672  * New power sequencer descriptor for use by the consumer driver or ERR_PTR()
673  * on failure.
674  */
675 struct pwrseq_desc *pwrseq_get(struct device *dev, const char *target)
676 {
677 	struct pwrseq_match_data match_data;
678 	int ret;
679 
680 	struct pwrseq_desc *desc __free(kfree) = kzalloc_obj(*desc);
681 	if (!desc)
682 		return ERR_PTR(-ENOMEM);
683 
684 	match_data.desc = desc;
685 	match_data.dev = dev;
686 	match_data.target = target;
687 
688 	guard(rwsem_read)(&pwrseq_sem);
689 
690 	ret = bus_for_each_dev(&pwrseq_bus, NULL, &match_data,
691 			       pwrseq_match_device);
692 	if (ret < 0)
693 		return ERR_PTR(ret);
694 	if (ret == PWRSEQ_NO_MATCH)
695 		/* No device matched. */
696 		return ERR_PTR(-EPROBE_DEFER);
697 
698 	return_ptr(desc);
699 }
700 EXPORT_SYMBOL_GPL(pwrseq_get);
701 
702 /**
703  * pwrseq_put() - Release the power sequencer descriptor.
704  * @desc: Descriptor to release.
705  */
706 void pwrseq_put(struct pwrseq_desc *desc)
707 {
708 	struct pwrseq_device *pwrseq;
709 
710 	if (!desc)
711 		return;
712 
713 	pwrseq = desc->pwrseq;
714 
715 	if (desc->powered_on)
716 		pwrseq_disable(desc);
717 
718 	kfree(desc);
719 	module_put(pwrseq->owner);
720 	pwrseq_device_put(pwrseq);
721 }
722 EXPORT_SYMBOL_GPL(pwrseq_put);
723 
724 static void devm_pwrseq_put(void *data)
725 {
726 	struct pwrseq_desc *desc = data;
727 
728 	pwrseq_put(desc);
729 }
730 
731 /**
732  * devm_pwrseq_get() - Managed variant of pwrseq_get().
733  * @dev: Device for which to get the sequencer and which also manages its
734  *       lifetime.
735  * @target: Name of the target exposed by the sequencer this device wants to
736  *          reach.
737  *
738  * Returns:
739  * New power sequencer descriptor for use by the consumer driver or ERR_PTR()
740  * on failure.
741  */
742 struct pwrseq_desc *devm_pwrseq_get(struct device *dev, const char *target)
743 {
744 	struct pwrseq_desc *desc;
745 	int ret;
746 
747 	desc = pwrseq_get(dev, target);
748 	if (IS_ERR(desc))
749 		return desc;
750 
751 	ret = devm_add_action_or_reset(dev, devm_pwrseq_put, desc);
752 	if (ret)
753 		return ERR_PTR(ret);
754 
755 	return desc;
756 }
757 EXPORT_SYMBOL_GPL(devm_pwrseq_get);
758 
759 static int pwrseq_unit_enable(struct pwrseq_device *pwrseq,
760 			      struct pwrseq_unit *target);
761 static int pwrseq_unit_disable(struct pwrseq_device *pwrseq,
762 			       struct pwrseq_unit *target);
763 
764 static int pwrseq_unit_enable_deps(struct pwrseq_device *pwrseq,
765 				   struct list_head *list)
766 {
767 	struct pwrseq_unit_dep *pos;
768 	int ret = 0;
769 
770 	list_for_each_entry(pos, list, list) {
771 		ret = pwrseq_unit_enable(pwrseq, pos->unit);
772 		if (ret) {
773 			list_for_each_entry_continue_reverse(pos, list, list)
774 				pwrseq_unit_disable(pwrseq, pos->unit);
775 			break;
776 		}
777 	}
778 
779 	return ret;
780 }
781 
782 static int pwrseq_unit_disable_deps(struct pwrseq_device *pwrseq,
783 				    struct list_head *list)
784 {
785 	struct pwrseq_unit_dep *pos;
786 	int ret = 0;
787 
788 	list_for_each_entry_reverse(pos, list, list) {
789 		ret = pwrseq_unit_disable(pwrseq, pos->unit);
790 		if (ret) {
791 			list_for_each_entry_continue(pos, list, list)
792 				pwrseq_unit_enable(pwrseq, pos->unit);
793 			break;
794 		}
795 	}
796 
797 	return ret;
798 }
799 
800 static int pwrseq_unit_enable(struct pwrseq_device *pwrseq,
801 			      struct pwrseq_unit *unit)
802 {
803 	int ret;
804 
805 	lockdep_assert_held_read(&pwrseq->rw_lock);
806 	lockdep_assert_held(&pwrseq->state_lock);
807 
808 	if (unit->enable_count != 0) {
809 		unit->enable_count++;
810 		return 0;
811 	}
812 
813 	ret = pwrseq_unit_enable_deps(pwrseq, &unit->deps);
814 	if (ret) {
815 		dev_err(&pwrseq->dev,
816 			"Failed to enable dependencies before power-on for target '%s': %d\n",
817 			unit->name, ret);
818 		return ret;
819 	}
820 
821 	if (unit->enable) {
822 		ret = unit->enable(pwrseq);
823 		if (ret) {
824 			dev_err(&pwrseq->dev,
825 				"Failed to enable target '%s': %d\n",
826 				unit->name, ret);
827 			pwrseq_unit_disable_deps(pwrseq, &unit->deps);
828 			return ret;
829 		}
830 	}
831 
832 	unit->enable_count++;
833 
834 	return 0;
835 }
836 
837 static int pwrseq_unit_disable(struct pwrseq_device *pwrseq,
838 			       struct pwrseq_unit *unit)
839 {
840 	int ret;
841 
842 	lockdep_assert_held_read(&pwrseq->rw_lock);
843 	lockdep_assert_held(&pwrseq->state_lock);
844 
845 	if (unit->enable_count == 0) {
846 		WARN(1, "Unmatched power-off for target '%s'\n",
847 		     unit->name);
848 		return -EBUSY;
849 	}
850 
851 	if (unit->enable_count != 1) {
852 		unit->enable_count--;
853 		return 0;
854 	}
855 
856 	if (unit->disable) {
857 		ret = unit->disable(pwrseq);
858 		if (ret) {
859 			dev_err(&pwrseq->dev,
860 				"Failed to disable target '%s': %d\n",
861 				unit->name, ret);
862 			return ret;
863 		}
864 	}
865 
866 	ret = pwrseq_unit_disable_deps(pwrseq, &unit->deps);
867 	if (ret) {
868 		dev_err(&pwrseq->dev,
869 			"Failed to disable dependencies after power-off for target '%s': %d\n",
870 			unit->name, ret);
871 		if (unit->enable)
872 			unit->enable(pwrseq);
873 		return ret;
874 	}
875 
876 	unit->enable_count--;
877 
878 	return 0;
879 }
880 
881 /**
882  * pwrseq_enable() - Issue a power-on request on behalf of the consumer
883  *                     device.
884  * @desc: Descriptor referencing the power sequencer.
885  *
886  * This function tells the power sequencer that the consumer wants to be
887  * powered-up. The sequencer may already have powered-up the device in which
888  * case the function returns 0. If the power-up sequence is already in
889  * progress, the function will block until it's done and return 0. If this is
890  * the first request, the device will be powered up.
891  *
892  * Returns:
893  * 0 on success, negative error number on failure.
894  */
895 int pwrseq_enable(struct pwrseq_desc *desc)
896 {
897 	struct pwrseq_device *pwrseq;
898 	struct pwrseq_target *target;
899 	struct pwrseq_unit *unit;
900 	int ret;
901 
902 	might_sleep();
903 
904 	if (!desc || desc->powered_on)
905 		return 0;
906 
907 	pwrseq = desc->pwrseq;
908 	target = desc->target;
909 	unit = target->unit;
910 
911 	guard(rwsem_read)(&pwrseq->rw_lock);
912 	if (!device_is_registered(&pwrseq->dev))
913 		return -ENODEV;
914 
915 	scoped_guard(mutex, &pwrseq->state_lock) {
916 		ret = pwrseq_unit_enable(pwrseq, unit);
917 		if (!ret)
918 			desc->powered_on = true;
919 	}
920 	if (ret)
921 		return ret;
922 
923 	if (target->post_enable) {
924 		ret = target->post_enable(pwrseq);
925 		if (ret) {
926 			scoped_guard(mutex, &pwrseq->state_lock) {
927 				pwrseq_unit_disable(pwrseq, unit);
928 				desc->powered_on = false;
929 			}
930 		}
931 	}
932 
933 	return ret;
934 }
935 EXPORT_SYMBOL_GPL(pwrseq_enable);
936 
937 /**
938  * pwrseq_disable() - Issue a power-off request on behalf of the consumer
939  *                      device.
940  * @desc: Descriptor referencing the power sequencer.
941  *
942  * This undoes the effects of pwrseq_enable(). It issues a power-off request
943  * on behalf of the consumer and when the last remaining user does so, the
944  * power-down sequence will be started. If one is in progress, the function
945  * will block until it's complete and then return.
946  *
947  * Returns:
948  * 0 on success, negative error number on failure.
949  */
950 int pwrseq_disable(struct pwrseq_desc *desc)
951 {
952 	struct pwrseq_device *pwrseq;
953 	struct pwrseq_unit *unit;
954 	int ret;
955 
956 	might_sleep();
957 
958 	if (!desc || !desc->powered_on)
959 		return 0;
960 
961 	pwrseq = desc->pwrseq;
962 	unit = desc->target->unit;
963 
964 	guard(rwsem_read)(&pwrseq->rw_lock);
965 	if (!device_is_registered(&pwrseq->dev))
966 		return -ENODEV;
967 
968 	guard(mutex)(&pwrseq->state_lock);
969 
970 	ret = pwrseq_unit_disable(pwrseq, unit);
971 	if (!ret)
972 		desc->powered_on = false;
973 
974 	return ret;
975 }
976 EXPORT_SYMBOL_GPL(pwrseq_disable);
977 
978 /**
979  * pwrseq_to_device() - Get the pwrseq device pointer from a descriptor.
980  * @desc: Descriptor referencing the power sequencer.
981  *
982  * Return the 'dev' pointer of the power sequencer device associated with @desc.
983  * Consumer drivers can use this to query the pwrseq provider's device tree
984  * node, for example to check for the existence of specific properties.
985  *
986  * Since pwrseq_get() already takes a reference to the pwrseq device, this
987  * function does not take an additional reference.
988  *
989  * Returns:
990  * Pointer to the pwrseq struct device, or NULL if @desc is NULL.
991  */
992 struct device *pwrseq_to_device(struct pwrseq_desc *desc)
993 {
994 	if (!desc)
995 		return NULL;
996 
997 	return &desc->pwrseq->dev;
998 }
999 EXPORT_SYMBOL_GPL(pwrseq_to_device);
1000 
1001 /**
1002  * pwrseq_is_controllable() - Check whether the target provides a
1003  *                            host-controllable power actuator.
1004  * @desc: Descriptor referencing the power sequencer.
1005  *
1006  * Some power sequencing targets provide no host-controllable enable for their
1007  * function on a given board, for instance when the enable line is not wired up
1008  * and is instead hardwired to an always-on level. For such targets a call to
1009  * pwrseq_power_off() is still allowed, so that the consumer can drop its vote
1010  * on the (possibly shared) resources, but the host cannot gate the function
1011  * on its own.
1012  *
1013  * Returns:
1014  * True if the target provides a host-controllable power actuator, false
1015  * otherwise. Also returns false if @desc is NULL.
1016  */
1017 bool pwrseq_is_controllable(struct pwrseq_desc *desc)
1018 {
1019 	struct pwrseq_device *pwrseq;
1020 	struct pwrseq_target *target;
1021 	struct pwrseq_unit *unit;
1022 
1023 	might_sleep();
1024 
1025 	if (!desc)
1026 		return false;
1027 
1028 	pwrseq = desc->pwrseq;
1029 	target = desc->target;
1030 	unit = target->unit;
1031 
1032 	guard(rwsem_read)(&pwrseq->rw_lock);
1033 	if (!device_is_registered(&pwrseq->dev))
1034 		return false;
1035 
1036 	if (!unit->enable && !unit->disable)
1037 		return false;
1038 
1039 	if (!target->is_controllable)
1040 		return true;
1041 
1042 	return target->is_controllable(pwrseq);
1043 }
1044 EXPORT_SYMBOL_GPL(pwrseq_is_controllable);
1045 
1046 #if IS_ENABLED(CONFIG_DEBUG_FS)
1047 
1048 struct pwrseq_debugfs_count_ctx {
1049 	struct device *dev;
1050 	loff_t index;
1051 };
1052 
1053 static int pwrseq_debugfs_seq_count(struct device *dev, void *data)
1054 {
1055 	struct pwrseq_debugfs_count_ctx *ctx = data;
1056 
1057 	ctx->dev = dev;
1058 
1059 	return ctx->index-- ? 0 : 1;
1060 }
1061 
1062 static void *pwrseq_debugfs_seq_start(struct seq_file *seq, loff_t *pos)
1063 {
1064 	struct pwrseq_debugfs_count_ctx ctx;
1065 
1066 	ctx.dev = NULL;
1067 	ctx.index = *pos;
1068 
1069 	/*
1070 	 * Hold the lock for the entire printout to prevent device removal.
1071 	 * Reference counts are managed by start()/next()/stop() as required
1072 	 * by the seq_file contract.
1073 	 */
1074 	down_read(&pwrseq_sem);
1075 
1076 	bus_for_each_dev(&pwrseq_bus, NULL, &ctx, pwrseq_debugfs_seq_count);
1077 	if (!ctx.index)
1078 		return NULL;
1079 
1080 	return get_device(ctx.dev);
1081 }
1082 
1083 static void *pwrseq_debugfs_seq_next(struct seq_file *seq, void *data,
1084 				     loff_t *pos)
1085 {
1086 	struct device *curr = data;
1087 
1088 	++*pos;
1089 
1090 	struct device *next = bus_find_next_device(&pwrseq_bus, curr);
1091 
1092 	put_device(curr);
1093 	return next;
1094 }
1095 
1096 static void pwrseq_debugfs_seq_show_target(struct seq_file *seq,
1097 					   struct pwrseq_target *target)
1098 {
1099 	seq_printf(seq, "    target: [%s] (target unit: [%s])\n",
1100 		   target->name, target->unit->name);
1101 }
1102 
1103 static void pwrseq_debugfs_seq_show_unit(struct seq_file *seq,
1104 					 struct pwrseq_unit *unit)
1105 {
1106 	struct pwrseq_unit_dep *ref;
1107 
1108 	seq_printf(seq, "    unit: [%s] - enable count: %u\n",
1109 		   unit->name, unit->enable_count);
1110 
1111 	if (list_empty(&unit->deps))
1112 		return;
1113 
1114 	seq_puts(seq, "      dependencies:\n");
1115 	list_for_each_entry(ref, &unit->deps, list)
1116 		seq_printf(seq, "        [%s]\n", ref->unit->name);
1117 }
1118 
1119 static int pwrseq_debugfs_seq_show(struct seq_file *seq, void *data)
1120 {
1121 	struct device *dev = data;
1122 	struct pwrseq_device *pwrseq = to_pwrseq_device(dev);
1123 	struct pwrseq_target *target;
1124 	struct pwrseq_unit *unit;
1125 
1126 	seq_printf(seq, "%s (%s):\n", dev_name(dev), dev_name(dev->parent));
1127 
1128 	seq_puts(seq, "  targets:\n");
1129 	list_for_each_entry(target, &pwrseq->targets, list)
1130 		pwrseq_debugfs_seq_show_target(seq, target);
1131 
1132 	seq_puts(seq, "  units:\n");
1133 	list_for_each_entry(unit, &pwrseq->units, list)
1134 		pwrseq_debugfs_seq_show_unit(seq, unit);
1135 
1136 	return 0;
1137 }
1138 
1139 static void pwrseq_debugfs_seq_stop(struct seq_file *seq, void *data)
1140 {
1141 	if (data)
1142 		put_device(data);
1143 	up_read(&pwrseq_sem);
1144 }
1145 
1146 static const struct seq_operations pwrseq_debugfs_sops = {
1147 	.start = pwrseq_debugfs_seq_start,
1148 	.next = pwrseq_debugfs_seq_next,
1149 	.show = pwrseq_debugfs_seq_show,
1150 	.stop = pwrseq_debugfs_seq_stop,
1151 };
1152 DEFINE_SEQ_ATTRIBUTE(pwrseq_debugfs);
1153 
1154 static struct dentry *pwrseq_debugfs_dentry;
1155 
1156 #endif /* CONFIG_DEBUG_FS */
1157 
1158 static int __init pwrseq_init(void)
1159 {
1160 	int ret;
1161 
1162 	ret = bus_register(&pwrseq_bus);
1163 	if (ret) {
1164 		pr_err("Failed to register the power sequencer bus\n");
1165 		return ret;
1166 	}
1167 
1168 #if IS_ENABLED(CONFIG_DEBUG_FS)
1169 	pwrseq_debugfs_dentry = debugfs_create_file("pwrseq", 0444, NULL, NULL,
1170 						    &pwrseq_debugfs_fops);
1171 #endif  /* CONFIG_DEBUG_FS */
1172 
1173 	return 0;
1174 }
1175 subsys_initcall(pwrseq_init);
1176 
1177 static void __exit pwrseq_exit(void)
1178 {
1179 #if IS_ENABLED(CONFIG_DEBUG_FS)
1180 	debugfs_remove_recursive(pwrseq_debugfs_dentry);
1181 #endif  /* CONFIG_DEBUG_FS */
1182 
1183 	bus_unregister(&pwrseq_bus);
1184 }
1185 module_exit(pwrseq_exit);
1186 
1187 MODULE_AUTHOR("Bartosz Golaszewski <bartosz.golaszewski@linaro.org>");
1188 MODULE_DESCRIPTION("Power Sequencing subsystem core");
1189 MODULE_LICENSE("GPL");
1190