1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Reset Controller framework 4 * 5 * Copyright 2013 Philipp Zabel, Pengutronix 6 */ 7 #include <linux/atomic.h> 8 #include <linux/device.h> 9 #include <linux/err.h> 10 #include <linux/export.h> 11 #include <linux/kernel.h> 12 #include <linux/kref.h> 13 #include <linux/module.h> 14 #include <linux/of.h> 15 #include <linux/reset.h> 16 #include <linux/reset-controller.h> 17 #include <linux/slab.h> 18 19 static DEFINE_MUTEX(reset_list_mutex); 20 static LIST_HEAD(reset_controller_list); 21 22 static DEFINE_MUTEX(reset_lookup_mutex); 23 static LIST_HEAD(reset_lookup_list); 24 25 /** 26 * struct reset_control - a reset control 27 * @rcdev: a pointer to the reset controller device 28 * this reset control belongs to 29 * @list: list entry for the rcdev's reset controller list 30 * @id: ID of the reset controller in the reset 31 * controller device 32 * @refcnt: Number of gets of this reset_control 33 * @acquired: Only one reset_control may be acquired for a given rcdev and id. 34 * @shared: Is this a shared (1), or an exclusive (0) reset_control? 35 * @array: Is this an array of reset controls (1)? 36 * @deassert_count: Number of times this reset line has been deasserted 37 * @triggered_count: Number of times this reset line has been reset. Currently 38 * only used for shared resets, which means that the value 39 * will be either 0 or 1. 40 */ 41 struct reset_control { 42 struct reset_controller_dev *rcdev; 43 struct list_head list; 44 unsigned int id; 45 struct kref refcnt; 46 bool acquired; 47 bool shared; 48 bool array; 49 atomic_t deassert_count; 50 atomic_t triggered_count; 51 }; 52 53 /** 54 * struct reset_control_array - an array of reset controls 55 * @base: reset control for compatibility with reset control API functions 56 * @num_rstcs: number of reset controls 57 * @rstc: array of reset controls 58 */ 59 struct reset_control_array { 60 struct reset_control base; 61 unsigned int num_rstcs; 62 struct reset_control *rstc[]; 63 }; 64 65 static const char *rcdev_name(struct reset_controller_dev *rcdev) 66 { 67 if (rcdev->dev) 68 return dev_name(rcdev->dev); 69 70 if (rcdev->of_node) 71 return rcdev->of_node->full_name; 72 73 return NULL; 74 } 75 76 /** 77 * of_reset_simple_xlate - translate reset_spec to the reset line number 78 * @rcdev: a pointer to the reset controller device 79 * @reset_spec: reset line specifier as found in the device tree 80 * 81 * This static translation function is used by default if of_xlate in 82 * :c:type:`reset_controller_dev` is not set. It is useful for all reset 83 * controllers with 1:1 mapping, where reset lines can be indexed by number 84 * without gaps. 85 */ 86 static int of_reset_simple_xlate(struct reset_controller_dev *rcdev, 87 const struct of_phandle_args *reset_spec) 88 { 89 if (reset_spec->args[0] >= rcdev->nr_resets) 90 return -EINVAL; 91 92 return reset_spec->args[0]; 93 } 94 95 /** 96 * reset_controller_register - register a reset controller device 97 * @rcdev: a pointer to the initialized reset controller device 98 */ 99 int reset_controller_register(struct reset_controller_dev *rcdev) 100 { 101 if (!rcdev->of_xlate) { 102 rcdev->of_reset_n_cells = 1; 103 rcdev->of_xlate = of_reset_simple_xlate; 104 } 105 106 INIT_LIST_HEAD(&rcdev->reset_control_head); 107 108 mutex_lock(&reset_list_mutex); 109 list_add(&rcdev->list, &reset_controller_list); 110 mutex_unlock(&reset_list_mutex); 111 112 return 0; 113 } 114 EXPORT_SYMBOL_GPL(reset_controller_register); 115 116 /** 117 * reset_controller_unregister - unregister a reset controller device 118 * @rcdev: a pointer to the reset controller device 119 */ 120 void reset_controller_unregister(struct reset_controller_dev *rcdev) 121 { 122 mutex_lock(&reset_list_mutex); 123 list_del(&rcdev->list); 124 mutex_unlock(&reset_list_mutex); 125 } 126 EXPORT_SYMBOL_GPL(reset_controller_unregister); 127 128 static void devm_reset_controller_release(struct device *dev, void *res) 129 { 130 reset_controller_unregister(*(struct reset_controller_dev **)res); 131 } 132 133 /** 134 * devm_reset_controller_register - resource managed reset_controller_register() 135 * @dev: device that is registering this reset controller 136 * @rcdev: a pointer to the initialized reset controller device 137 * 138 * Managed reset_controller_register(). For reset controllers registered by 139 * this function, reset_controller_unregister() is automatically called on 140 * driver detach. See reset_controller_register() for more information. 141 */ 142 int devm_reset_controller_register(struct device *dev, 143 struct reset_controller_dev *rcdev) 144 { 145 struct reset_controller_dev **rcdevp; 146 int ret; 147 148 rcdevp = devres_alloc(devm_reset_controller_release, sizeof(*rcdevp), 149 GFP_KERNEL); 150 if (!rcdevp) 151 return -ENOMEM; 152 153 ret = reset_controller_register(rcdev); 154 if (ret) { 155 devres_free(rcdevp); 156 return ret; 157 } 158 159 *rcdevp = rcdev; 160 devres_add(dev, rcdevp); 161 162 return ret; 163 } 164 EXPORT_SYMBOL_GPL(devm_reset_controller_register); 165 166 /** 167 * reset_controller_add_lookup - register a set of lookup entries 168 * @lookup: array of reset lookup entries 169 * @num_entries: number of entries in the lookup array 170 */ 171 void reset_controller_add_lookup(struct reset_control_lookup *lookup, 172 unsigned int num_entries) 173 { 174 struct reset_control_lookup *entry; 175 unsigned int i; 176 177 mutex_lock(&reset_lookup_mutex); 178 for (i = 0; i < num_entries; i++) { 179 entry = &lookup[i]; 180 181 if (!entry->dev_id || !entry->provider) { 182 pr_warn("%s(): reset lookup entry badly specified, skipping\n", 183 __func__); 184 continue; 185 } 186 187 list_add_tail(&entry->list, &reset_lookup_list); 188 } 189 mutex_unlock(&reset_lookup_mutex); 190 } 191 EXPORT_SYMBOL_GPL(reset_controller_add_lookup); 192 193 static inline struct reset_control_array * 194 rstc_to_array(struct reset_control *rstc) { 195 return container_of(rstc, struct reset_control_array, base); 196 } 197 198 static int reset_control_array_reset(struct reset_control_array *resets) 199 { 200 int ret, i; 201 202 for (i = 0; i < resets->num_rstcs; i++) { 203 ret = reset_control_reset(resets->rstc[i]); 204 if (ret) 205 return ret; 206 } 207 208 return 0; 209 } 210 211 static int reset_control_array_assert(struct reset_control_array *resets) 212 { 213 int ret, i; 214 215 for (i = 0; i < resets->num_rstcs; i++) { 216 ret = reset_control_assert(resets->rstc[i]); 217 if (ret) 218 goto err; 219 } 220 221 return 0; 222 223 err: 224 while (i--) 225 reset_control_deassert(resets->rstc[i]); 226 return ret; 227 } 228 229 static int reset_control_array_deassert(struct reset_control_array *resets) 230 { 231 int ret, i; 232 233 for (i = 0; i < resets->num_rstcs; i++) { 234 ret = reset_control_deassert(resets->rstc[i]); 235 if (ret) 236 goto err; 237 } 238 239 return 0; 240 241 err: 242 while (i--) 243 reset_control_assert(resets->rstc[i]); 244 return ret; 245 } 246 247 static int reset_control_array_acquire(struct reset_control_array *resets) 248 { 249 unsigned int i; 250 int err; 251 252 for (i = 0; i < resets->num_rstcs; i++) { 253 err = reset_control_acquire(resets->rstc[i]); 254 if (err < 0) 255 goto release; 256 } 257 258 return 0; 259 260 release: 261 while (i--) 262 reset_control_release(resets->rstc[i]); 263 264 return err; 265 } 266 267 static void reset_control_array_release(struct reset_control_array *resets) 268 { 269 unsigned int i; 270 271 for (i = 0; i < resets->num_rstcs; i++) 272 reset_control_release(resets->rstc[i]); 273 } 274 275 static inline bool reset_control_is_array(struct reset_control *rstc) 276 { 277 return rstc->array; 278 } 279 280 /** 281 * reset_control_reset - reset the controlled device 282 * @rstc: reset controller 283 * 284 * On a shared reset line the actual reset pulse is only triggered once for the 285 * lifetime of the reset_control instance: for all but the first caller this is 286 * a no-op. 287 * Consumers must not use reset_control_(de)assert on shared reset lines when 288 * reset_control_reset has been used. 289 * 290 * If rstc is NULL it is an optional reset and the function will just 291 * return 0. 292 */ 293 int reset_control_reset(struct reset_control *rstc) 294 { 295 int ret; 296 297 if (!rstc) 298 return 0; 299 300 if (WARN_ON(IS_ERR(rstc))) 301 return -EINVAL; 302 303 if (reset_control_is_array(rstc)) 304 return reset_control_array_reset(rstc_to_array(rstc)); 305 306 if (!rstc->rcdev->ops->reset) 307 return -ENOTSUPP; 308 309 if (rstc->shared) { 310 if (WARN_ON(atomic_read(&rstc->deassert_count) != 0)) 311 return -EINVAL; 312 313 if (atomic_inc_return(&rstc->triggered_count) != 1) 314 return 0; 315 } else { 316 if (!rstc->acquired) 317 return -EPERM; 318 } 319 320 ret = rstc->rcdev->ops->reset(rstc->rcdev, rstc->id); 321 if (rstc->shared && ret) 322 atomic_dec(&rstc->triggered_count); 323 324 return ret; 325 } 326 EXPORT_SYMBOL_GPL(reset_control_reset); 327 328 /** 329 * reset_control_assert - asserts the reset line 330 * @rstc: reset controller 331 * 332 * Calling this on an exclusive reset controller guarantees that the reset 333 * will be asserted. When called on a shared reset controller the line may 334 * still be deasserted, as long as other users keep it so. 335 * 336 * For shared reset controls a driver cannot expect the hw's registers and 337 * internal state to be reset, but must be prepared for this to happen. 338 * Consumers must not use reset_control_reset on shared reset lines when 339 * reset_control_(de)assert has been used. 340 * 341 * If rstc is NULL it is an optional reset and the function will just 342 * return 0. 343 */ 344 int reset_control_assert(struct reset_control *rstc) 345 { 346 if (!rstc) 347 return 0; 348 349 if (WARN_ON(IS_ERR(rstc))) 350 return -EINVAL; 351 352 if (reset_control_is_array(rstc)) 353 return reset_control_array_assert(rstc_to_array(rstc)); 354 355 if (rstc->shared) { 356 if (WARN_ON(atomic_read(&rstc->triggered_count) != 0)) 357 return -EINVAL; 358 359 if (WARN_ON(atomic_read(&rstc->deassert_count) == 0)) 360 return -EINVAL; 361 362 if (atomic_dec_return(&rstc->deassert_count) != 0) 363 return 0; 364 365 /* 366 * Shared reset controls allow the reset line to be in any state 367 * after this call, so doing nothing is a valid option. 368 */ 369 if (!rstc->rcdev->ops->assert) 370 return 0; 371 } else { 372 /* 373 * If the reset controller does not implement .assert(), there 374 * is no way to guarantee that the reset line is asserted after 375 * this call. 376 */ 377 if (!rstc->rcdev->ops->assert) 378 return -ENOTSUPP; 379 380 if (!rstc->acquired) { 381 WARN(1, "reset %s (ID: %u) is not acquired\n", 382 rcdev_name(rstc->rcdev), rstc->id); 383 return -EPERM; 384 } 385 } 386 387 return rstc->rcdev->ops->assert(rstc->rcdev, rstc->id); 388 } 389 EXPORT_SYMBOL_GPL(reset_control_assert); 390 391 /** 392 * reset_control_deassert - deasserts the reset line 393 * @rstc: reset controller 394 * 395 * After calling this function, the reset is guaranteed to be deasserted. 396 * Consumers must not use reset_control_reset on shared reset lines when 397 * reset_control_(de)assert has been used. 398 * 399 * If rstc is NULL it is an optional reset and the function will just 400 * return 0. 401 */ 402 int reset_control_deassert(struct reset_control *rstc) 403 { 404 if (!rstc) 405 return 0; 406 407 if (WARN_ON(IS_ERR(rstc))) 408 return -EINVAL; 409 410 if (reset_control_is_array(rstc)) 411 return reset_control_array_deassert(rstc_to_array(rstc)); 412 413 if (rstc->shared) { 414 if (WARN_ON(atomic_read(&rstc->triggered_count) != 0)) 415 return -EINVAL; 416 417 if (atomic_inc_return(&rstc->deassert_count) != 1) 418 return 0; 419 } else { 420 if (!rstc->acquired) { 421 WARN(1, "reset %s (ID: %u) is not acquired\n", 422 rcdev_name(rstc->rcdev), rstc->id); 423 return -EPERM; 424 } 425 } 426 427 /* 428 * If the reset controller does not implement .deassert(), we assume 429 * that it handles self-deasserting reset lines via .reset(). In that 430 * case, the reset lines are deasserted by default. If that is not the 431 * case, the reset controller driver should implement .deassert() and 432 * return -ENOTSUPP. 433 */ 434 if (!rstc->rcdev->ops->deassert) 435 return 0; 436 437 return rstc->rcdev->ops->deassert(rstc->rcdev, rstc->id); 438 } 439 EXPORT_SYMBOL_GPL(reset_control_deassert); 440 441 /** 442 * reset_control_status - returns a negative errno if not supported, a 443 * positive value if the reset line is asserted, or zero if the reset 444 * line is not asserted or if the desc is NULL (optional reset). 445 * @rstc: reset controller 446 */ 447 int reset_control_status(struct reset_control *rstc) 448 { 449 if (!rstc) 450 return 0; 451 452 if (WARN_ON(IS_ERR(rstc)) || reset_control_is_array(rstc)) 453 return -EINVAL; 454 455 if (rstc->rcdev->ops->status) 456 return rstc->rcdev->ops->status(rstc->rcdev, rstc->id); 457 458 return -ENOTSUPP; 459 } 460 EXPORT_SYMBOL_GPL(reset_control_status); 461 462 /** 463 * reset_control_acquire() - acquires a reset control for exclusive use 464 * @rstc: reset control 465 * 466 * This is used to explicitly acquire a reset control for exclusive use. Note 467 * that exclusive resets are requested as acquired by default. In order for a 468 * second consumer to be able to control the reset, the first consumer has to 469 * release it first. Typically the easiest way to achieve this is to call the 470 * reset_control_get_exclusive_released() to obtain an instance of the reset 471 * control. Such reset controls are not acquired by default. 472 * 473 * Consumers implementing shared access to an exclusive reset need to follow 474 * a specific protocol in order to work together. Before consumers can change 475 * a reset they must acquire exclusive access using reset_control_acquire(). 476 * After they are done operating the reset, they must release exclusive access 477 * with a call to reset_control_release(). Consumers are not granted exclusive 478 * access to the reset as long as another consumer hasn't released a reset. 479 * 480 * See also: reset_control_release() 481 */ 482 int reset_control_acquire(struct reset_control *rstc) 483 { 484 struct reset_control *rc; 485 486 if (!rstc) 487 return 0; 488 489 if (WARN_ON(IS_ERR(rstc))) 490 return -EINVAL; 491 492 if (reset_control_is_array(rstc)) 493 return reset_control_array_acquire(rstc_to_array(rstc)); 494 495 mutex_lock(&reset_list_mutex); 496 497 if (rstc->acquired) { 498 mutex_unlock(&reset_list_mutex); 499 return 0; 500 } 501 502 list_for_each_entry(rc, &rstc->rcdev->reset_control_head, list) { 503 if (rstc != rc && rstc->id == rc->id) { 504 if (rc->acquired) { 505 mutex_unlock(&reset_list_mutex); 506 return -EBUSY; 507 } 508 } 509 } 510 511 rstc->acquired = true; 512 513 mutex_unlock(&reset_list_mutex); 514 return 0; 515 } 516 EXPORT_SYMBOL_GPL(reset_control_acquire); 517 518 /** 519 * reset_control_release() - releases exclusive access to a reset control 520 * @rstc: reset control 521 * 522 * Releases exclusive access right to a reset control previously obtained by a 523 * call to reset_control_acquire(). Until a consumer calls this function, no 524 * other consumers will be granted exclusive access. 525 * 526 * See also: reset_control_acquire() 527 */ 528 void reset_control_release(struct reset_control *rstc) 529 { 530 if (!rstc || WARN_ON(IS_ERR(rstc))) 531 return; 532 533 if (reset_control_is_array(rstc)) 534 reset_control_array_release(rstc_to_array(rstc)); 535 else 536 rstc->acquired = false; 537 } 538 EXPORT_SYMBOL_GPL(reset_control_release); 539 540 static struct reset_control *__reset_control_get_internal( 541 struct reset_controller_dev *rcdev, 542 unsigned int index, bool shared, bool acquired) 543 { 544 struct reset_control *rstc; 545 546 lockdep_assert_held(&reset_list_mutex); 547 548 list_for_each_entry(rstc, &rcdev->reset_control_head, list) { 549 if (rstc->id == index) { 550 /* 551 * Allow creating a secondary exclusive reset_control 552 * that is initially not acquired for an already 553 * controlled reset line. 554 */ 555 if (!rstc->shared && !shared && !acquired) 556 break; 557 558 if (WARN_ON(!rstc->shared || !shared)) 559 return ERR_PTR(-EBUSY); 560 561 kref_get(&rstc->refcnt); 562 return rstc; 563 } 564 } 565 566 rstc = kzalloc(sizeof(*rstc), GFP_KERNEL); 567 if (!rstc) 568 return ERR_PTR(-ENOMEM); 569 570 try_module_get(rcdev->owner); 571 572 rstc->rcdev = rcdev; 573 list_add(&rstc->list, &rcdev->reset_control_head); 574 rstc->id = index; 575 kref_init(&rstc->refcnt); 576 rstc->acquired = acquired; 577 rstc->shared = shared; 578 579 return rstc; 580 } 581 582 static void __reset_control_release(struct kref *kref) 583 { 584 struct reset_control *rstc = container_of(kref, struct reset_control, 585 refcnt); 586 587 lockdep_assert_held(&reset_list_mutex); 588 589 module_put(rstc->rcdev->owner); 590 591 list_del(&rstc->list); 592 kfree(rstc); 593 } 594 595 static void __reset_control_put_internal(struct reset_control *rstc) 596 { 597 lockdep_assert_held(&reset_list_mutex); 598 599 kref_put(&rstc->refcnt, __reset_control_release); 600 } 601 602 struct reset_control *__of_reset_control_get(struct device_node *node, 603 const char *id, int index, bool shared, 604 bool optional, bool acquired) 605 { 606 struct reset_control *rstc; 607 struct reset_controller_dev *r, *rcdev; 608 struct of_phandle_args args; 609 int rstc_id; 610 int ret; 611 612 if (!node) 613 return ERR_PTR(-EINVAL); 614 615 if (id) { 616 index = of_property_match_string(node, 617 "reset-names", id); 618 if (index == -EILSEQ) 619 return ERR_PTR(index); 620 if (index < 0) 621 return optional ? NULL : ERR_PTR(-ENOENT); 622 } 623 624 ret = of_parse_phandle_with_args(node, "resets", "#reset-cells", 625 index, &args); 626 if (ret == -EINVAL) 627 return ERR_PTR(ret); 628 if (ret) 629 return optional ? NULL : ERR_PTR(ret); 630 631 mutex_lock(&reset_list_mutex); 632 rcdev = NULL; 633 list_for_each_entry(r, &reset_controller_list, list) { 634 if (args.np == r->of_node) { 635 rcdev = r; 636 break; 637 } 638 } 639 640 if (!rcdev) { 641 rstc = ERR_PTR(-EPROBE_DEFER); 642 goto out; 643 } 644 645 if (WARN_ON(args.args_count != rcdev->of_reset_n_cells)) { 646 rstc = ERR_PTR(-EINVAL); 647 goto out; 648 } 649 650 rstc_id = rcdev->of_xlate(rcdev, &args); 651 if (rstc_id < 0) { 652 rstc = ERR_PTR(rstc_id); 653 goto out; 654 } 655 656 /* reset_list_mutex also protects the rcdev's reset_control list */ 657 rstc = __reset_control_get_internal(rcdev, rstc_id, shared, acquired); 658 659 out: 660 mutex_unlock(&reset_list_mutex); 661 of_node_put(args.np); 662 663 return rstc; 664 } 665 EXPORT_SYMBOL_GPL(__of_reset_control_get); 666 667 static struct reset_controller_dev * 668 __reset_controller_by_name(const char *name) 669 { 670 struct reset_controller_dev *rcdev; 671 672 lockdep_assert_held(&reset_list_mutex); 673 674 list_for_each_entry(rcdev, &reset_controller_list, list) { 675 if (!rcdev->dev) 676 continue; 677 678 if (!strcmp(name, dev_name(rcdev->dev))) 679 return rcdev; 680 } 681 682 return NULL; 683 } 684 685 static struct reset_control * 686 __reset_control_get_from_lookup(struct device *dev, const char *con_id, 687 bool shared, bool optional, bool acquired) 688 { 689 const struct reset_control_lookup *lookup; 690 struct reset_controller_dev *rcdev; 691 const char *dev_id = dev_name(dev); 692 struct reset_control *rstc = NULL; 693 694 mutex_lock(&reset_lookup_mutex); 695 696 list_for_each_entry(lookup, &reset_lookup_list, list) { 697 if (strcmp(lookup->dev_id, dev_id)) 698 continue; 699 700 if ((!con_id && !lookup->con_id) || 701 ((con_id && lookup->con_id) && 702 !strcmp(con_id, lookup->con_id))) { 703 mutex_lock(&reset_list_mutex); 704 rcdev = __reset_controller_by_name(lookup->provider); 705 if (!rcdev) { 706 mutex_unlock(&reset_list_mutex); 707 mutex_unlock(&reset_lookup_mutex); 708 /* Reset provider may not be ready yet. */ 709 return ERR_PTR(-EPROBE_DEFER); 710 } 711 712 rstc = __reset_control_get_internal(rcdev, 713 lookup->index, 714 shared, acquired); 715 mutex_unlock(&reset_list_mutex); 716 break; 717 } 718 } 719 720 mutex_unlock(&reset_lookup_mutex); 721 722 if (!rstc) 723 return optional ? NULL : ERR_PTR(-ENOENT); 724 725 return rstc; 726 } 727 728 struct reset_control *__reset_control_get(struct device *dev, const char *id, 729 int index, bool shared, bool optional, 730 bool acquired) 731 { 732 if (WARN_ON(shared && acquired)) 733 return ERR_PTR(-EINVAL); 734 735 if (dev->of_node) 736 return __of_reset_control_get(dev->of_node, id, index, shared, 737 optional, acquired); 738 739 return __reset_control_get_from_lookup(dev, id, shared, optional, 740 acquired); 741 } 742 EXPORT_SYMBOL_GPL(__reset_control_get); 743 744 static void reset_control_array_put(struct reset_control_array *resets) 745 { 746 int i; 747 748 mutex_lock(&reset_list_mutex); 749 for (i = 0; i < resets->num_rstcs; i++) 750 __reset_control_put_internal(resets->rstc[i]); 751 mutex_unlock(&reset_list_mutex); 752 kfree(resets); 753 } 754 755 /** 756 * reset_control_put - free the reset controller 757 * @rstc: reset controller 758 */ 759 void reset_control_put(struct reset_control *rstc) 760 { 761 if (IS_ERR_OR_NULL(rstc)) 762 return; 763 764 if (reset_control_is_array(rstc)) { 765 reset_control_array_put(rstc_to_array(rstc)); 766 return; 767 } 768 769 mutex_lock(&reset_list_mutex); 770 __reset_control_put_internal(rstc); 771 mutex_unlock(&reset_list_mutex); 772 } 773 EXPORT_SYMBOL_GPL(reset_control_put); 774 775 static void devm_reset_control_release(struct device *dev, void *res) 776 { 777 reset_control_put(*(struct reset_control **)res); 778 } 779 780 struct reset_control *__devm_reset_control_get(struct device *dev, 781 const char *id, int index, bool shared, 782 bool optional, bool acquired) 783 { 784 struct reset_control **ptr, *rstc; 785 786 ptr = devres_alloc(devm_reset_control_release, sizeof(*ptr), 787 GFP_KERNEL); 788 if (!ptr) 789 return ERR_PTR(-ENOMEM); 790 791 rstc = __reset_control_get(dev, id, index, shared, optional, acquired); 792 if (IS_ERR_OR_NULL(rstc)) { 793 devres_free(ptr); 794 return rstc; 795 } 796 797 *ptr = rstc; 798 devres_add(dev, ptr); 799 800 return rstc; 801 } 802 EXPORT_SYMBOL_GPL(__devm_reset_control_get); 803 804 /** 805 * device_reset - find reset controller associated with the device 806 * and perform reset 807 * @dev: device to be reset by the controller 808 * @optional: whether it is optional to reset the device 809 * 810 * Convenience wrapper for __reset_control_get() and reset_control_reset(). 811 * This is useful for the common case of devices with single, dedicated reset 812 * lines. 813 */ 814 int __device_reset(struct device *dev, bool optional) 815 { 816 struct reset_control *rstc; 817 int ret; 818 819 rstc = __reset_control_get(dev, NULL, 0, 0, optional, true); 820 if (IS_ERR(rstc)) 821 return PTR_ERR(rstc); 822 823 ret = reset_control_reset(rstc); 824 825 reset_control_put(rstc); 826 827 return ret; 828 } 829 EXPORT_SYMBOL_GPL(__device_reset); 830 831 /* 832 * APIs to manage an array of reset controls. 833 */ 834 835 /** 836 * of_reset_control_get_count - Count number of resets available with a device 837 * 838 * @node: device node that contains 'resets'. 839 * 840 * Returns positive reset count on success, or error number on failure and 841 * on count being zero. 842 */ 843 static int of_reset_control_get_count(struct device_node *node) 844 { 845 int count; 846 847 if (!node) 848 return -EINVAL; 849 850 count = of_count_phandle_with_args(node, "resets", "#reset-cells"); 851 if (count == 0) 852 count = -ENOENT; 853 854 return count; 855 } 856 857 /** 858 * of_reset_control_array_get - Get a list of reset controls using 859 * device node. 860 * 861 * @np: device node for the device that requests the reset controls array 862 * @shared: whether reset controls are shared or not 863 * @optional: whether it is optional to get the reset controls 864 * @acquired: only one reset control may be acquired for a given controller 865 * and ID 866 * 867 * Returns pointer to allocated reset_control on success or error on failure 868 */ 869 struct reset_control * 870 of_reset_control_array_get(struct device_node *np, bool shared, bool optional, 871 bool acquired) 872 { 873 struct reset_control_array *resets; 874 struct reset_control *rstc; 875 int num, i; 876 877 num = of_reset_control_get_count(np); 878 if (num < 0) 879 return optional ? NULL : ERR_PTR(num); 880 881 resets = kzalloc(struct_size(resets, rstc, num), GFP_KERNEL); 882 if (!resets) 883 return ERR_PTR(-ENOMEM); 884 885 for (i = 0; i < num; i++) { 886 rstc = __of_reset_control_get(np, NULL, i, shared, optional, 887 acquired); 888 if (IS_ERR(rstc)) 889 goto err_rst; 890 resets->rstc[i] = rstc; 891 } 892 resets->num_rstcs = num; 893 resets->base.array = true; 894 895 return &resets->base; 896 897 err_rst: 898 mutex_lock(&reset_list_mutex); 899 while (--i >= 0) 900 __reset_control_put_internal(resets->rstc[i]); 901 mutex_unlock(&reset_list_mutex); 902 903 kfree(resets); 904 905 return rstc; 906 } 907 EXPORT_SYMBOL_GPL(of_reset_control_array_get); 908 909 /** 910 * devm_reset_control_array_get - Resource managed reset control array get 911 * 912 * @dev: device that requests the list of reset controls 913 * @shared: whether reset controls are shared or not 914 * @optional: whether it is optional to get the reset controls 915 * 916 * The reset control array APIs are intended for a list of resets 917 * that just have to be asserted or deasserted, without any 918 * requirements on the order. 919 * 920 * Returns pointer to allocated reset_control on success or error on failure 921 */ 922 struct reset_control * 923 devm_reset_control_array_get(struct device *dev, bool shared, bool optional) 924 { 925 struct reset_control **ptr, *rstc; 926 927 ptr = devres_alloc(devm_reset_control_release, sizeof(*ptr), 928 GFP_KERNEL); 929 if (!ptr) 930 return ERR_PTR(-ENOMEM); 931 932 rstc = of_reset_control_array_get(dev->of_node, shared, optional, true); 933 if (IS_ERR_OR_NULL(rstc)) { 934 devres_free(ptr); 935 return rstc; 936 } 937 938 *ptr = rstc; 939 devres_add(dev, ptr); 940 941 return rstc; 942 } 943 EXPORT_SYMBOL_GPL(devm_reset_control_array_get); 944 945 static int reset_control_get_count_from_lookup(struct device *dev) 946 { 947 const struct reset_control_lookup *lookup; 948 const char *dev_id; 949 int count = 0; 950 951 if (!dev) 952 return -EINVAL; 953 954 dev_id = dev_name(dev); 955 mutex_lock(&reset_lookup_mutex); 956 957 list_for_each_entry(lookup, &reset_lookup_list, list) { 958 if (!strcmp(lookup->dev_id, dev_id)) 959 count++; 960 } 961 962 mutex_unlock(&reset_lookup_mutex); 963 964 if (count == 0) 965 count = -ENOENT; 966 967 return count; 968 } 969 970 /** 971 * reset_control_get_count - Count number of resets available with a device 972 * 973 * @dev: device for which to return the number of resets 974 * 975 * Returns positive reset count on success, or error number on failure and 976 * on count being zero. 977 */ 978 int reset_control_get_count(struct device *dev) 979 { 980 if (dev->of_node) 981 return of_reset_control_get_count(dev->of_node); 982 983 return reset_control_get_count_from_lookup(dev); 984 } 985 EXPORT_SYMBOL_GPL(reset_control_get_count); 986