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 *
  80 * This static translation function is used by default if of_xlate in
  81 * :c:type:`reset_controller_dev` is not set. It is useful for all reset
  82 * controllers with 1:1 mapping, where reset lines can be indexed by number
  83 * without gaps.
  84 */
  85static int of_reset_simple_xlate(struct reset_controller_dev *rcdev,
  86                          const struct of_phandle_args *reset_spec)
  87{
  88        if (reset_spec->args[0] >= rcdev->nr_resets)
  89                return -EINVAL;
  90
  91        return reset_spec->args[0];
  92}
  93
  94/**
  95 * reset_controller_register - register a reset controller device
  96 * @rcdev: a pointer to the initialized reset controller device
  97 */
  98int reset_controller_register(struct reset_controller_dev *rcdev)
  99{
 100        if (!rcdev->of_xlate) {
 101                rcdev->of_reset_n_cells = 1;
 102                rcdev->of_xlate = of_reset_simple_xlate;
 103        }
 104
 105        INIT_LIST_HEAD(&rcdev->reset_control_head);
 106
 107        mutex_lock(&reset_list_mutex);
 108        list_add(&rcdev->list, &reset_controller_list);
 109        mutex_unlock(&reset_list_mutex);
 110
 111        return 0;
 112}
 113EXPORT_SYMBOL_GPL(reset_controller_register);
 114
 115/**
 116 * reset_controller_unregister - unregister a reset controller device
 117 * @rcdev: a pointer to the reset controller device
 118 */
 119void reset_controller_unregister(struct reset_controller_dev *rcdev)
 120{
 121        mutex_lock(&reset_list_mutex);
 122        list_del(&rcdev->list);
 123        mutex_unlock(&reset_list_mutex);
 124}
 125EXPORT_SYMBOL_GPL(reset_controller_unregister);
 126
 127static void devm_reset_controller_release(struct device *dev, void *res)
 128{
 129        reset_controller_unregister(*(struct reset_controller_dev **)res);
 130}
 131
 132/**
 133 * devm_reset_controller_register - resource managed reset_controller_register()
 134 * @dev: device that is registering this reset controller
 135 * @rcdev: a pointer to the initialized reset controller device
 136 *
 137 * Managed reset_controller_register(). For reset controllers registered by
 138 * this function, reset_controller_unregister() is automatically called on
 139 * driver detach. See reset_controller_register() for more information.
 140 */
 141int devm_reset_controller_register(struct device *dev,
 142                                   struct reset_controller_dev *rcdev)
 143{
 144        struct reset_controller_dev **rcdevp;
 145        int ret;
 146
 147        rcdevp = devres_alloc(devm_reset_controller_release, sizeof(*rcdevp),
 148                              GFP_KERNEL);
 149        if (!rcdevp)
 150                return -ENOMEM;
 151
 152        ret = reset_controller_register(rcdev);
 153        if (ret) {
 154                devres_free(rcdevp);
 155                return ret;
 156        }
 157
 158        *rcdevp = rcdev;
 159        devres_add(dev, rcdevp);
 160
 161        return ret;
 162}
 163EXPORT_SYMBOL_GPL(devm_reset_controller_register);
 164
 165/**
 166 * reset_controller_add_lookup - register a set of lookup entries
 167 * @lookup: array of reset lookup entries
 168 * @num_entries: number of entries in the lookup array
 169 */
 170void reset_controller_add_lookup(struct reset_control_lookup *lookup,
 171                                 unsigned int num_entries)
 172{
 173        struct reset_control_lookup *entry;
 174        unsigned int i;
 175
 176        mutex_lock(&reset_lookup_mutex);
 177        for (i = 0; i < num_entries; i++) {
 178                entry = &lookup[i];
 179
 180                if (!entry->dev_id || !entry->provider) {
 181                        pr_warn("%s(): reset lookup entry badly specified, skipping\n",
 182                                __func__);
 183                        continue;
 184                }
 185
 186                list_add_tail(&entry->list, &reset_lookup_list);
 187        }
 188        mutex_unlock(&reset_lookup_mutex);
 189}
 190EXPORT_SYMBOL_GPL(reset_controller_add_lookup);
 191
 192static inline struct reset_control_array *
 193rstc_to_array(struct reset_control *rstc) {
 194        return container_of(rstc, struct reset_control_array, base);
 195}
 196
 197static int reset_control_array_reset(struct reset_control_array *resets)
 198{
 199        int ret, i;
 200
 201        for (i = 0; i < resets->num_rstcs; i++) {
 202                ret = reset_control_reset(resets->rstc[i]);
 203                if (ret)
 204                        return ret;
 205        }
 206
 207        return 0;
 208}
 209
 210static int reset_control_array_assert(struct reset_control_array *resets)
 211{
 212        int ret, i;
 213
 214        for (i = 0; i < resets->num_rstcs; i++) {
 215                ret = reset_control_assert(resets->rstc[i]);
 216                if (ret)
 217                        goto err;
 218        }
 219
 220        return 0;
 221
 222err:
 223        while (i--)
 224                reset_control_deassert(resets->rstc[i]);
 225        return ret;
 226}
 227
 228static int reset_control_array_deassert(struct reset_control_array *resets)
 229{
 230        int ret, i;
 231
 232        for (i = 0; i < resets->num_rstcs; i++) {
 233                ret = reset_control_deassert(resets->rstc[i]);
 234                if (ret)
 235                        goto err;
 236        }
 237
 238        return 0;
 239
 240err:
 241        while (i--)
 242                reset_control_assert(resets->rstc[i]);
 243        return ret;
 244}
 245
 246static int reset_control_array_acquire(struct reset_control_array *resets)
 247{
 248        unsigned int i;
 249        int err;
 250
 251        for (i = 0; i < resets->num_rstcs; i++) {
 252                err = reset_control_acquire(resets->rstc[i]);
 253                if (err < 0)
 254                        goto release;
 255        }
 256
 257        return 0;
 258
 259release:
 260        while (i--)
 261                reset_control_release(resets->rstc[i]);
 262
 263        return err;
 264}
 265
 266static void reset_control_array_release(struct reset_control_array *resets)
 267{
 268        unsigned int i;
 269
 270        for (i = 0; i < resets->num_rstcs; i++)
 271                reset_control_release(resets->rstc[i]);
 272}
 273
 274static inline bool reset_control_is_array(struct reset_control *rstc)
 275{
 276        return rstc->array;
 277}
 278
 279/**
 280 * reset_control_reset - reset the controlled device
 281 * @rstc: reset controller
 282 *
 283 * On a shared reset line the actual reset pulse is only triggered once for the
 284 * lifetime of the reset_control instance: for all but the first caller this is
 285 * a no-op.
 286 * Consumers must not use reset_control_(de)assert on shared reset lines when
 287 * reset_control_reset has been used.
 288 *
 289 * If rstc is NULL it is an optional reset and the function will just
 290 * return 0.
 291 */
 292int reset_control_reset(struct reset_control *rstc)
 293{
 294        int ret;
 295
 296        if (!rstc)
 297                return 0;
 298
 299        if (WARN_ON(IS_ERR(rstc)))
 300                return -EINVAL;
 301
 302        if (reset_control_is_array(rstc))
 303                return reset_control_array_reset(rstc_to_array(rstc));
 304
 305        if (!rstc->rcdev->ops->reset)
 306                return -ENOTSUPP;
 307
 308        if (rstc->shared) {
 309                if (WARN_ON(atomic_read(&rstc->deassert_count) != 0))
 310                        return -EINVAL;
 311
 312                if (atomic_inc_return(&rstc->triggered_count) != 1)
 313                        return 0;
 314        } else {
 315                if (!rstc->acquired)
 316                        return -EPERM;
 317        }
 318
 319        ret = rstc->rcdev->ops->reset(rstc->rcdev, rstc->id);
 320        if (rstc->shared && ret)
 321                atomic_dec(&rstc->triggered_count);
 322
 323        return ret;
 324}
 325EXPORT_SYMBOL_GPL(reset_control_reset);
 326
 327/**
 328 * reset_control_assert - asserts the reset line
 329 * @rstc: reset controller
 330 *
 331 * Calling this on an exclusive reset controller guarantees that the reset
 332 * will be asserted. When called on a shared reset controller the line may
 333 * still be deasserted, as long as other users keep it so.
 334 *
 335 * For shared reset controls a driver cannot expect the hw's registers and
 336 * internal state to be reset, but must be prepared for this to happen.
 337 * Consumers must not use reset_control_reset on shared reset lines when
 338 * reset_control_(de)assert has been used.
 339 *
 340 * If rstc is NULL it is an optional reset and the function will just
 341 * return 0.
 342 */
 343int reset_control_assert(struct reset_control *rstc)
 344{
 345        if (!rstc)
 346                return 0;
 347
 348        if (WARN_ON(IS_ERR(rstc)))
 349                return -EINVAL;
 350
 351        if (reset_control_is_array(rstc))
 352                return reset_control_array_assert(rstc_to_array(rstc));
 353
 354        if (rstc->shared) {
 355                if (WARN_ON(atomic_read(&rstc->triggered_count) != 0))
 356                        return -EINVAL;
 357
 358                if (WARN_ON(atomic_read(&rstc->deassert_count) == 0))
 359                        return -EINVAL;
 360
 361                if (atomic_dec_return(&rstc->deassert_count) != 0)
 362                        return 0;
 363
 364                /*
 365                 * Shared reset controls allow the reset line to be in any state
 366                 * after this call, so doing nothing is a valid option.
 367                 */
 368                if (!rstc->rcdev->ops->assert)
 369                        return 0;
 370        } else {
 371                /*
 372                 * If the reset controller does not implement .assert(), there
 373                 * is no way to guarantee that the reset line is asserted after
 374                 * this call.
 375                 */
 376                if (!rstc->rcdev->ops->assert)
 377                        return -ENOTSUPP;
 378
 379                if (!rstc->acquired) {
 380                        WARN(1, "reset %s (ID: %u) is not acquired\n",
 381                             rcdev_name(rstc->rcdev), rstc->id);
 382                        return -EPERM;
 383                }
 384        }
 385
 386        return rstc->rcdev->ops->assert(rstc->rcdev, rstc->id);
 387}
 388EXPORT_SYMBOL_GPL(reset_control_assert);
 389
 390/**
 391 * reset_control_deassert - deasserts the reset line
 392 * @rstc: reset controller
 393 *
 394 * After calling this function, the reset is guaranteed to be deasserted.
 395 * Consumers must not use reset_control_reset on shared reset lines when
 396 * reset_control_(de)assert has been used.
 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        kfree(resets);
 752}
 753
 754/**
 755 * reset_control_put - free the reset controller
 756 * @rstc: reset controller
 757 */
 758void reset_control_put(struct reset_control *rstc)
 759{
 760        if (IS_ERR_OR_NULL(rstc))
 761                return;
 762
 763        if (reset_control_is_array(rstc)) {
 764                reset_control_array_put(rstc_to_array(rstc));
 765                return;
 766        }
 767
 768        mutex_lock(&reset_list_mutex);
 769        __reset_control_put_internal(rstc);
 770        mutex_unlock(&reset_list_mutex);
 771}
 772EXPORT_SYMBOL_GPL(reset_control_put);
 773
 774static void devm_reset_control_release(struct device *dev, void *res)
 775{
 776        reset_control_put(*(struct reset_control **)res);
 777}
 778
 779struct reset_control *__devm_reset_control_get(struct device *dev,
 780                                     const char *id, int index, bool shared,
 781                                     bool optional, bool acquired)
 782{
 783        struct reset_control **ptr, *rstc;
 784
 785        ptr = devres_alloc(devm_reset_control_release, sizeof(*ptr),
 786                           GFP_KERNEL);
 787        if (!ptr)
 788                return ERR_PTR(-ENOMEM);
 789
 790        rstc = __reset_control_get(dev, id, index, shared, optional, acquired);
 791        if (IS_ERR_OR_NULL(rstc)) {
 792                devres_free(ptr);
 793                return rstc;
 794        }
 795
 796        *ptr = rstc;
 797        devres_add(dev, ptr);
 798
 799        return rstc;
 800}
 801EXPORT_SYMBOL_GPL(__devm_reset_control_get);
 802
 803/**
 804 * device_reset - find reset controller associated with the device
 805 *                and perform reset
 806 * @dev: device to be reset by the controller
 807 * @optional: whether it is optional to reset the device
 808 *
 809 * Convenience wrapper for __reset_control_get() and reset_control_reset().
 810 * This is useful for the common case of devices with single, dedicated reset
 811 * lines.
 812 */
 813int __device_reset(struct device *dev, bool optional)
 814{
 815        struct reset_control *rstc;
 816        int ret;
 817
 818        rstc = __reset_control_get(dev, NULL, 0, 0, optional, true);
 819        if (IS_ERR(rstc))
 820                return PTR_ERR(rstc);
 821
 822        ret = reset_control_reset(rstc);
 823
 824        reset_control_put(rstc);
 825
 826        return ret;
 827}
 828EXPORT_SYMBOL_GPL(__device_reset);
 829
 830/*
 831 * APIs to manage an array of reset controls.
 832 */
 833
 834/**
 835 * of_reset_control_get_count - Count number of resets available with a device
 836 *
 837 * @node: device node that contains 'resets'.
 838 *
 839 * Returns positive reset count on success, or error number on failure and
 840 * on count being zero.
 841 */
 842static int of_reset_control_get_count(struct device_node *node)
 843{
 844        int count;
 845
 846        if (!node)
 847                return -EINVAL;
 848
 849        count = of_count_phandle_with_args(node, "resets", "#reset-cells");
 850        if (count == 0)
 851                count = -ENOENT;
 852
 853        return count;
 854}
 855
 856/**
 857 * of_reset_control_array_get - Get a list of reset controls using
 858 *                              device node.
 859 *
 860 * @np: device node for the device that requests the reset controls array
 861 * @shared: whether reset controls are shared or not
 862 * @optional: whether it is optional to get the reset controls
 863 * @acquired: only one reset control may be acquired for a given controller
 864 *            and ID
 865 *
 866 * Returns pointer to allocated reset_control on success or error on failure
 867 */
 868struct reset_control *
 869of_reset_control_array_get(struct device_node *np, bool shared, bool optional,
 870                           bool acquired)
 871{
 872        struct reset_control_array *resets;
 873        struct reset_control *rstc;
 874        int num, i;
 875
 876        num = of_reset_control_get_count(np);
 877        if (num < 0)
 878                return optional ? NULL : ERR_PTR(num);
 879
 880        resets = kzalloc(struct_size(resets, rstc, num), GFP_KERNEL);
 881        if (!resets)
 882                return ERR_PTR(-ENOMEM);
 883
 884        for (i = 0; i < num; i++) {
 885                rstc = __of_reset_control_get(np, NULL, i, shared, optional,
 886                                              acquired);
 887                if (IS_ERR(rstc))
 888                        goto err_rst;
 889                resets->rstc[i] = rstc;
 890        }
 891        resets->num_rstcs = num;
 892        resets->base.array = true;
 893
 894        return &resets->base;
 895
 896err_rst:
 897        mutex_lock(&reset_list_mutex);
 898        while (--i >= 0)
 899                __reset_control_put_internal(resets->rstc[i]);
 900        mutex_unlock(&reset_list_mutex);
 901
 902        kfree(resets);
 903
 904        return rstc;
 905}
 906EXPORT_SYMBOL_GPL(of_reset_control_array_get);
 907
 908/**
 909 * devm_reset_control_array_get - Resource managed reset control array get
 910 *
 911 * @dev: device that requests the list of reset controls
 912 * @shared: whether reset controls are shared or not
 913 * @optional: whether it is optional to get the reset controls
 914 *
 915 * The reset control array APIs are intended for a list of resets
 916 * that just have to be asserted or deasserted, without any
 917 * requirements on the order.
 918 *
 919 * Returns pointer to allocated reset_control on success or error on failure
 920 */
 921struct reset_control *
 922devm_reset_control_array_get(struct device *dev, bool shared, bool optional)
 923{
 924        struct reset_control **ptr, *rstc;
 925
 926        ptr = devres_alloc(devm_reset_control_release, sizeof(*ptr),
 927                           GFP_KERNEL);
 928        if (!ptr)
 929                return ERR_PTR(-ENOMEM);
 930
 931        rstc = of_reset_control_array_get(dev->of_node, shared, optional, true);
 932        if (IS_ERR_OR_NULL(rstc)) {
 933                devres_free(ptr);
 934                return rstc;
 935        }
 936
 937        *ptr = rstc;
 938        devres_add(dev, ptr);
 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