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