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