linux/drivers/reset/core.c
<<
>>
Prefs
   1/*
   2 * Reset Controller framework
   3 *
   4 * Copyright 2013 Philipp Zabel, Pengutronix
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 */
  11#include <linux/atomic.h>
  12#include <linux/device.h>
  13#include <linux/err.h>
  14#include <linux/export.h>
  15#include <linux/kernel.h>
  16#include <linux/kref.h>
  17#include <linux/module.h>
  18#include <linux/of.h>
  19#include <linux/reset.h>
  20#include <linux/reset-controller.h>
  21#include <linux/slab.h>
  22
  23static DEFINE_MUTEX(reset_list_mutex);
  24static LIST_HEAD(reset_controller_list);
  25
  26/**
  27 * struct reset_control - a reset control
  28 * @rcdev: a pointer to the reset controller device
  29 *         this reset control belongs to
  30 * @list: list entry for the rcdev's reset controller list
  31 * @id: ID of the reset controller in the reset
  32 *      controller device
  33 * @refcnt: Number of gets of this reset_control
  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 shared;
  46        bool array;
  47        atomic_t deassert_count;
  48        atomic_t triggered_count;
  49};
  50
  51/**
  52 * struct reset_control_array - an array of reset controls
  53 * @base: reset control for compatibility with reset control API functions
  54 * @num_rstcs: number of reset controls
  55 * @rstc: array of reset controls
  56 */
  57struct reset_control_array {
  58        struct reset_control base;
  59        unsigned int num_rstcs;
  60        struct reset_control *rstc[];
  61};
  62
  63/**
  64 * of_reset_simple_xlate - translate reset_spec to the reset line number
  65 * @rcdev: a pointer to the reset controller device
  66 * @reset_spec: reset line specifier as found in the device tree
  67 * @flags: a flags pointer to fill in (optional)
  68 *
  69 * This simple translation function should be used for reset controllers
  70 * with 1:1 mapping, where reset lines can be indexed by number without gaps.
  71 */
  72static int of_reset_simple_xlate(struct reset_controller_dev *rcdev,
  73                          const struct of_phandle_args *reset_spec)
  74{
  75        if (reset_spec->args[0] >= rcdev->nr_resets)
  76                return -EINVAL;
  77
  78        return reset_spec->args[0];
  79}
  80
  81/**
  82 * reset_controller_register - register a reset controller device
  83 * @rcdev: a pointer to the initialized reset controller device
  84 */
  85int reset_controller_register(struct reset_controller_dev *rcdev)
  86{
  87        if (!rcdev->of_xlate) {
  88                rcdev->of_reset_n_cells = 1;
  89                rcdev->of_xlate = of_reset_simple_xlate;
  90        }
  91
  92        INIT_LIST_HEAD(&rcdev->reset_control_head);
  93
  94        mutex_lock(&reset_list_mutex);
  95        list_add(&rcdev->list, &reset_controller_list);
  96        mutex_unlock(&reset_list_mutex);
  97
  98        return 0;
  99}
 100EXPORT_SYMBOL_GPL(reset_controller_register);
 101
 102/**
 103 * reset_controller_unregister - unregister a reset controller device
 104 * @rcdev: a pointer to the reset controller device
 105 */
 106void reset_controller_unregister(struct reset_controller_dev *rcdev)
 107{
 108        mutex_lock(&reset_list_mutex);
 109        list_del(&rcdev->list);
 110        mutex_unlock(&reset_list_mutex);
 111}
 112EXPORT_SYMBOL_GPL(reset_controller_unregister);
 113
 114static void devm_reset_controller_release(struct device *dev, void *res)
 115{
 116        reset_controller_unregister(*(struct reset_controller_dev **)res);
 117}
 118
 119/**
 120 * devm_reset_controller_register - resource managed reset_controller_register()
 121 * @dev: device that is registering this reset controller
 122 * @rcdev: a pointer to the initialized reset controller device
 123 *
 124 * Managed reset_controller_register(). For reset controllers registered by
 125 * this function, reset_controller_unregister() is automatically called on
 126 * driver detach. See reset_controller_register() for more information.
 127 */
 128int devm_reset_controller_register(struct device *dev,
 129                                   struct reset_controller_dev *rcdev)
 130{
 131        struct reset_controller_dev **rcdevp;
 132        int ret;
 133
 134        rcdevp = devres_alloc(devm_reset_controller_release, sizeof(*rcdevp),
 135                              GFP_KERNEL);
 136        if (!rcdevp)
 137                return -ENOMEM;
 138
 139        ret = reset_controller_register(rcdev);
 140        if (!ret) {
 141                *rcdevp = rcdev;
 142                devres_add(dev, rcdevp);
 143        } else {
 144                devres_free(rcdevp);
 145        }
 146
 147        return ret;
 148}
 149EXPORT_SYMBOL_GPL(devm_reset_controller_register);
 150
 151static inline struct reset_control_array *
 152rstc_to_array(struct reset_control *rstc) {
 153        return container_of(rstc, struct reset_control_array, base);
 154}
 155
 156static int reset_control_array_reset(struct reset_control_array *resets)
 157{
 158        int ret, i;
 159
 160        for (i = 0; i < resets->num_rstcs; i++) {
 161                ret = reset_control_reset(resets->rstc[i]);
 162                if (ret)
 163                        return ret;
 164        }
 165
 166        return 0;
 167}
 168
 169static int reset_control_array_assert(struct reset_control_array *resets)
 170{
 171        int ret, i;
 172
 173        for (i = 0; i < resets->num_rstcs; i++) {
 174                ret = reset_control_assert(resets->rstc[i]);
 175                if (ret)
 176                        goto err;
 177        }
 178
 179        return 0;
 180
 181err:
 182        while (i--)
 183                reset_control_deassert(resets->rstc[i]);
 184        return ret;
 185}
 186
 187static int reset_control_array_deassert(struct reset_control_array *resets)
 188{
 189        int ret, i;
 190
 191        for (i = 0; i < resets->num_rstcs; i++) {
 192                ret = reset_control_deassert(resets->rstc[i]);
 193                if (ret)
 194                        goto err;
 195        }
 196
 197        return 0;
 198
 199err:
 200        while (i--)
 201                reset_control_assert(resets->rstc[i]);
 202        return ret;
 203}
 204
 205static inline bool reset_control_is_array(struct reset_control *rstc)
 206{
 207        return rstc->array;
 208}
 209
 210/**
 211 * reset_control_reset - reset the controlled device
 212 * @rstc: reset controller
 213 *
 214 * On a shared reset line the actual reset pulse is only triggered once for the
 215 * lifetime of the reset_control instance: for all but the first caller this is
 216 * a no-op.
 217 * Consumers must not use reset_control_(de)assert on shared reset lines when
 218 * reset_control_reset has been used.
 219 *
 220 * If rstc is NULL it is an optional reset and the function will just
 221 * return 0.
 222 */
 223int reset_control_reset(struct reset_control *rstc)
 224{
 225        int ret;
 226
 227        if (!rstc)
 228                return 0;
 229
 230        if (WARN_ON(IS_ERR(rstc)))
 231                return -EINVAL;
 232
 233        if (reset_control_is_array(rstc))
 234                return reset_control_array_reset(rstc_to_array(rstc));
 235
 236        if (!rstc->rcdev->ops->reset)
 237                return -ENOTSUPP;
 238
 239        if (rstc->shared) {
 240                if (WARN_ON(atomic_read(&rstc->deassert_count) != 0))
 241                        return -EINVAL;
 242
 243                if (atomic_inc_return(&rstc->triggered_count) != 1)
 244                        return 0;
 245        }
 246
 247        ret = rstc->rcdev->ops->reset(rstc->rcdev, rstc->id);
 248        if (rstc->shared && ret)
 249                atomic_dec(&rstc->triggered_count);
 250
 251        return ret;
 252}
 253EXPORT_SYMBOL_GPL(reset_control_reset);
 254
 255/**
 256 * reset_control_assert - asserts the reset line
 257 * @rstc: reset controller
 258 *
 259 * Calling this on an exclusive reset controller guarantees that the reset
 260 * will be asserted. When called on a shared reset controller the line may
 261 * still be deasserted, as long as other users keep it so.
 262 *
 263 * For shared reset controls a driver cannot expect the hw's registers and
 264 * internal state to be reset, but must be prepared for this to happen.
 265 * Consumers must not use reset_control_reset on shared reset lines when
 266 * reset_control_(de)assert has been used.
 267 * return 0.
 268 *
 269 * If rstc is NULL it is an optional reset and the function will just
 270 * return 0.
 271 */
 272int reset_control_assert(struct reset_control *rstc)
 273{
 274        if (!rstc)
 275                return 0;
 276
 277        if (WARN_ON(IS_ERR(rstc)))
 278                return -EINVAL;
 279
 280        if (reset_control_is_array(rstc))
 281                return reset_control_array_assert(rstc_to_array(rstc));
 282
 283        if (rstc->shared) {
 284                if (WARN_ON(atomic_read(&rstc->triggered_count) != 0))
 285                        return -EINVAL;
 286
 287                if (WARN_ON(atomic_read(&rstc->deassert_count) == 0))
 288                        return -EINVAL;
 289
 290                if (atomic_dec_return(&rstc->deassert_count) != 0)
 291                        return 0;
 292
 293                /*
 294                 * Shared reset controls allow the reset line to be in any state
 295                 * after this call, so doing nothing is a valid option.
 296                 */
 297                if (!rstc->rcdev->ops->assert)
 298                        return 0;
 299        } else {
 300                /*
 301                 * If the reset controller does not implement .assert(), there
 302                 * is no way to guarantee that the reset line is asserted after
 303                 * this call.
 304                 */
 305                if (!rstc->rcdev->ops->assert)
 306                        return -ENOTSUPP;
 307        }
 308
 309        return rstc->rcdev->ops->assert(rstc->rcdev, rstc->id);
 310}
 311EXPORT_SYMBOL_GPL(reset_control_assert);
 312
 313/**
 314 * reset_control_deassert - deasserts the reset line
 315 * @rstc: reset controller
 316 *
 317 * After calling this function, the reset is guaranteed to be deasserted.
 318 * Consumers must not use reset_control_reset on shared reset lines when
 319 * reset_control_(de)assert has been used.
 320 * return 0.
 321 *
 322 * If rstc is NULL it is an optional reset and the function will just
 323 * return 0.
 324 */
 325int reset_control_deassert(struct reset_control *rstc)
 326{
 327        if (!rstc)
 328                return 0;
 329
 330        if (WARN_ON(IS_ERR(rstc)))
 331                return -EINVAL;
 332
 333        if (reset_control_is_array(rstc))
 334                return reset_control_array_deassert(rstc_to_array(rstc));
 335
 336        if (rstc->shared) {
 337                if (WARN_ON(atomic_read(&rstc->triggered_count) != 0))
 338                        return -EINVAL;
 339
 340                if (atomic_inc_return(&rstc->deassert_count) != 1)
 341                        return 0;
 342        }
 343
 344        /*
 345         * If the reset controller does not implement .deassert(), we assume
 346         * that it handles self-deasserting reset lines via .reset(). In that
 347         * case, the reset lines are deasserted by default. If that is not the
 348         * case, the reset controller driver should implement .deassert() and
 349         * return -ENOTSUPP.
 350         */
 351        if (!rstc->rcdev->ops->deassert)
 352                return 0;
 353
 354        return rstc->rcdev->ops->deassert(rstc->rcdev, rstc->id);
 355}
 356EXPORT_SYMBOL_GPL(reset_control_deassert);
 357
 358/**
 359 * reset_control_status - returns a negative errno if not supported, a
 360 * positive value if the reset line is asserted, or zero if the reset
 361 * line is not asserted or if the desc is NULL (optional reset).
 362 * @rstc: reset controller
 363 */
 364int reset_control_status(struct reset_control *rstc)
 365{
 366        if (!rstc)
 367                return 0;
 368
 369        if (WARN_ON(IS_ERR(rstc)) || reset_control_is_array(rstc))
 370                return -EINVAL;
 371
 372        if (rstc->rcdev->ops->status)
 373                return rstc->rcdev->ops->status(rstc->rcdev, rstc->id);
 374
 375        return -ENOTSUPP;
 376}
 377EXPORT_SYMBOL_GPL(reset_control_status);
 378
 379static struct reset_control *__reset_control_get_internal(
 380                                struct reset_controller_dev *rcdev,
 381                                unsigned int index, bool shared)
 382{
 383        struct reset_control *rstc;
 384
 385        lockdep_assert_held(&reset_list_mutex);
 386
 387        list_for_each_entry(rstc, &rcdev->reset_control_head, list) {
 388                if (rstc->id == index) {
 389                        if (WARN_ON(!rstc->shared || !shared))
 390                                return ERR_PTR(-EBUSY);
 391
 392                        kref_get(&rstc->refcnt);
 393                        return rstc;
 394                }
 395        }
 396
 397        rstc = kzalloc(sizeof(*rstc), GFP_KERNEL);
 398        if (!rstc)
 399                return ERR_PTR(-ENOMEM);
 400
 401        try_module_get(rcdev->owner);
 402
 403        rstc->rcdev = rcdev;
 404        list_add(&rstc->list, &rcdev->reset_control_head);
 405        rstc->id = index;
 406        kref_init(&rstc->refcnt);
 407        rstc->shared = shared;
 408
 409        return rstc;
 410}
 411
 412static void __reset_control_release(struct kref *kref)
 413{
 414        struct reset_control *rstc = container_of(kref, struct reset_control,
 415                                                  refcnt);
 416
 417        lockdep_assert_held(&reset_list_mutex);
 418
 419        module_put(rstc->rcdev->owner);
 420
 421        list_del(&rstc->list);
 422        kfree(rstc);
 423}
 424
 425static void __reset_control_put_internal(struct reset_control *rstc)
 426{
 427        lockdep_assert_held(&reset_list_mutex);
 428
 429        kref_put(&rstc->refcnt, __reset_control_release);
 430}
 431
 432struct reset_control *__of_reset_control_get(struct device_node *node,
 433                                     const char *id, int index, bool shared,
 434                                     bool optional)
 435{
 436        struct reset_control *rstc;
 437        struct reset_controller_dev *r, *rcdev;
 438        struct of_phandle_args args;
 439        int rstc_id;
 440        int ret;
 441
 442        if (!node)
 443                return ERR_PTR(-EINVAL);
 444
 445        if (id) {
 446                index = of_property_match_string(node,
 447                                                 "reset-names", id);
 448                if (index == -EILSEQ)
 449                        return ERR_PTR(index);
 450                if (index < 0)
 451                        return optional ? NULL : ERR_PTR(-ENOENT);
 452        }
 453
 454        ret = of_parse_phandle_with_args(node, "resets", "#reset-cells",
 455                                         index, &args);
 456        if (ret == -EINVAL)
 457                return ERR_PTR(ret);
 458        if (ret)
 459                return optional ? NULL : ERR_PTR(ret);
 460
 461        mutex_lock(&reset_list_mutex);
 462        rcdev = NULL;
 463        list_for_each_entry(r, &reset_controller_list, list) {
 464                if (args.np == r->of_node) {
 465                        rcdev = r;
 466                        break;
 467                }
 468        }
 469        of_node_put(args.np);
 470
 471        if (!rcdev) {
 472                mutex_unlock(&reset_list_mutex);
 473                return ERR_PTR(-EPROBE_DEFER);
 474        }
 475
 476        if (WARN_ON(args.args_count != rcdev->of_reset_n_cells)) {
 477                mutex_unlock(&reset_list_mutex);
 478                return ERR_PTR(-EINVAL);
 479        }
 480
 481        rstc_id = rcdev->of_xlate(rcdev, &args);
 482        if (rstc_id < 0) {
 483                mutex_unlock(&reset_list_mutex);
 484                return ERR_PTR(rstc_id);
 485        }
 486
 487        /* reset_list_mutex also protects the rcdev's reset_control list */
 488        rstc = __reset_control_get_internal(rcdev, rstc_id, shared);
 489
 490        mutex_unlock(&reset_list_mutex);
 491
 492        return rstc;
 493}
 494EXPORT_SYMBOL_GPL(__of_reset_control_get);
 495
 496struct reset_control *__reset_control_get(struct device *dev, const char *id,
 497                                          int index, bool shared, bool optional)
 498{
 499        if (dev->of_node)
 500                return __of_reset_control_get(dev->of_node, id, index, shared,
 501                                              optional);
 502
 503        return optional ? NULL : ERR_PTR(-EINVAL);
 504}
 505EXPORT_SYMBOL_GPL(__reset_control_get);
 506
 507static void reset_control_array_put(struct reset_control_array *resets)
 508{
 509        int i;
 510
 511        mutex_lock(&reset_list_mutex);
 512        for (i = 0; i < resets->num_rstcs; i++)
 513                __reset_control_put_internal(resets->rstc[i]);
 514        mutex_unlock(&reset_list_mutex);
 515}
 516
 517/**
 518 * reset_control_put - free the reset controller
 519 * @rstc: reset controller
 520 */
 521void reset_control_put(struct reset_control *rstc)
 522{
 523        if (IS_ERR_OR_NULL(rstc))
 524                return;
 525
 526        if (reset_control_is_array(rstc)) {
 527                reset_control_array_put(rstc_to_array(rstc));
 528                return;
 529        }
 530
 531        mutex_lock(&reset_list_mutex);
 532        __reset_control_put_internal(rstc);
 533        mutex_unlock(&reset_list_mutex);
 534}
 535EXPORT_SYMBOL_GPL(reset_control_put);
 536
 537static void devm_reset_control_release(struct device *dev, void *res)
 538{
 539        reset_control_put(*(struct reset_control **)res);
 540}
 541
 542struct reset_control *__devm_reset_control_get(struct device *dev,
 543                                     const char *id, int index, bool shared,
 544                                     bool optional)
 545{
 546        struct reset_control **ptr, *rstc;
 547
 548        ptr = devres_alloc(devm_reset_control_release, sizeof(*ptr),
 549                           GFP_KERNEL);
 550        if (!ptr)
 551                return ERR_PTR(-ENOMEM);
 552
 553        rstc = __reset_control_get(dev, id, index, shared, optional);
 554        if (!IS_ERR(rstc)) {
 555                *ptr = rstc;
 556                devres_add(dev, ptr);
 557        } else {
 558                devres_free(ptr);
 559        }
 560
 561        return rstc;
 562}
 563EXPORT_SYMBOL_GPL(__devm_reset_control_get);
 564
 565/**
 566 * device_reset - find reset controller associated with the device
 567 *                and perform reset
 568 * @dev: device to be reset by the controller
 569 * @optional: whether it is optional to reset the device
 570 *
 571 * Convenience wrapper for __reset_control_get() and reset_control_reset().
 572 * This is useful for the common case of devices with single, dedicated reset
 573 * lines.
 574 */
 575int __device_reset(struct device *dev, bool optional)
 576{
 577        struct reset_control *rstc;
 578        int ret;
 579
 580        rstc = __reset_control_get(dev, NULL, 0, 0, optional);
 581        if (IS_ERR(rstc))
 582                return PTR_ERR(rstc);
 583
 584        ret = reset_control_reset(rstc);
 585
 586        reset_control_put(rstc);
 587
 588        return ret;
 589}
 590EXPORT_SYMBOL_GPL(__device_reset);
 591
 592/**
 593 * APIs to manage an array of reset controls.
 594 */
 595/**
 596 * of_reset_control_get_count - Count number of resets available with a device
 597 *
 598 * @node: device node that contains 'resets'.
 599 *
 600 * Returns positive reset count on success, or error number on failure and
 601 * on count being zero.
 602 */
 603static int of_reset_control_get_count(struct device_node *node)
 604{
 605        int count;
 606
 607        if (!node)
 608                return -EINVAL;
 609
 610        count = of_count_phandle_with_args(node, "resets", "#reset-cells");
 611        if (count == 0)
 612                count = -ENOENT;
 613
 614        return count;
 615}
 616
 617/**
 618 * of_reset_control_array_get - Get a list of reset controls using
 619 *                              device node.
 620 *
 621 * @np: device node for the device that requests the reset controls array
 622 * @shared: whether reset controls are shared or not
 623 * @optional: whether it is optional to get the reset controls
 624 *
 625 * Returns pointer to allocated reset_control_array on success or
 626 * error on failure
 627 */
 628struct reset_control *
 629of_reset_control_array_get(struct device_node *np, bool shared, bool optional)
 630{
 631        struct reset_control_array *resets;
 632        struct reset_control *rstc;
 633        int num, i;
 634
 635        num = of_reset_control_get_count(np);
 636        if (num < 0)
 637                return optional ? NULL : ERR_PTR(num);
 638
 639        resets = kzalloc(sizeof(*resets) + sizeof(resets->rstc[0]) * num,
 640                         GFP_KERNEL);
 641        if (!resets)
 642                return ERR_PTR(-ENOMEM);
 643
 644        for (i = 0; i < num; i++) {
 645                rstc = __of_reset_control_get(np, NULL, i, shared, optional);
 646                if (IS_ERR(rstc))
 647                        goto err_rst;
 648                resets->rstc[i] = rstc;
 649        }
 650        resets->num_rstcs = num;
 651        resets->base.array = true;
 652
 653        return &resets->base;
 654
 655err_rst:
 656        mutex_lock(&reset_list_mutex);
 657        while (--i >= 0)
 658                __reset_control_put_internal(resets->rstc[i]);
 659        mutex_unlock(&reset_list_mutex);
 660
 661        kfree(resets);
 662
 663        return rstc;
 664}
 665EXPORT_SYMBOL_GPL(of_reset_control_array_get);
 666
 667/**
 668 * devm_reset_control_array_get - Resource managed reset control array get
 669 *
 670 * @dev: device that requests the list of reset controls
 671 * @shared: whether reset controls are shared or not
 672 * @optional: whether it is optional to get the reset controls
 673 *
 674 * The reset control array APIs are intended for a list of resets
 675 * that just have to be asserted or deasserted, without any
 676 * requirements on the order.
 677 *
 678 * Returns pointer to allocated reset_control_array on success or
 679 * error on failure
 680 */
 681struct reset_control *
 682devm_reset_control_array_get(struct device *dev, bool shared, bool optional)
 683{
 684        struct reset_control **devres;
 685        struct reset_control *rstc;
 686
 687        devres = devres_alloc(devm_reset_control_release, sizeof(*devres),
 688                              GFP_KERNEL);
 689        if (!devres)
 690                return ERR_PTR(-ENOMEM);
 691
 692        rstc = of_reset_control_array_get(dev->of_node, shared, optional);
 693        if (IS_ERR(rstc)) {
 694                devres_free(devres);
 695                return rstc;
 696        }
 697
 698        *devres = rstc;
 699        devres_add(dev, devres);
 700
 701        return rstc;
 702}
 703EXPORT_SYMBOL_GPL(devm_reset_control_array_get);
 704