uboot/include/sysreset.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * Copyright (c) 2015 Google, Inc
   4 * Written by Simon Glass <sjg@chromium.org>
   5 */
   6
   7#ifndef __SYSRESET_H
   8#define __SYSRESET_H
   9
  10struct udevice;
  11
  12enum sysreset_t {
  13        SYSRESET_WARM,  /* Reset CPU, keep GPIOs active */
  14        SYSRESET_COLD,  /* Reset CPU and GPIOs */
  15        SYSRESET_POWER, /* Reset PMIC (remove and restore power) */
  16        SYSRESET_POWER_OFF,     /* Turn off power */
  17
  18        SYSRESET_COUNT,
  19};
  20
  21struct sysreset_ops {
  22        /**
  23         * request() - request a sysreset of the given type
  24         *
  25         * Note that this function may return before the reset takes effect.
  26         *
  27         * @type:       Reset type to request
  28         * @return -EINPROGRESS if the reset has been started and
  29         *              will complete soon, -EPROTONOSUPPORT if not supported
  30         *              by this device, 0 if the reset has already happened
  31         *              (in which case this method will not actually return)
  32         */
  33        int (*request)(struct udevice *dev, enum sysreset_t type);
  34        /**
  35         * get_status() - get printable reset status information
  36         *
  37         * @dev:        Device to check
  38         * @buf:        Buffer to receive the textual reset information
  39         * @size:       Size of the passed buffer
  40         * @return 0 if OK, -ve on error
  41         */
  42        int (*get_status)(struct udevice *dev, char *buf, int size);
  43
  44        /**
  45         * get_last() - get information on the last reset
  46         *
  47         * @dev:        Device to check
  48         * @return last reset state (enum sysreset_t) or -ve error
  49         */
  50        int (*get_last)(struct udevice *dev);
  51};
  52
  53#define sysreset_get_ops(dev)        ((struct sysreset_ops *)(dev)->driver->ops)
  54
  55/**
  56 * sysreset_request() - request a sysreset
  57 *
  58 * @type:       Reset type to request
  59 * @return 0 if OK, -EPROTONOSUPPORT if not supported by this device
  60 */
  61int sysreset_request(struct udevice *dev, enum sysreset_t type);
  62
  63/**
  64 * sysreset_get_status() - get printable reset status information
  65 *
  66 * @dev:        Device to check
  67 * @buf:        Buffer to receive the textual reset information
  68 * @size:       Size of the passed buffer
  69 * @return 0 if OK, -ve on error
  70 */
  71int sysreset_get_status(struct udevice *dev, char *buf, int size);
  72
  73/**
  74 * sysreset_get_last() - get information on the last reset
  75 *
  76 * @dev:        Device to check
  77 * @return last reset state (enum sysreset_t) or -ve error
  78 */
  79int sysreset_get_last(struct udevice *dev);
  80
  81/**
  82 * sysreset_walk() - cause a system reset
  83 *
  84 * This works through the available sysreset devices until it finds one that can
  85 * perform a reset. If the provided sysreset type is not available, the next one
  86 * will be tried.
  87 *
  88 * If this function fails to reset, it will display a message and halt
  89 *
  90 * @type:       Reset type to request
  91 * @return -EINPROGRESS if a reset is in progress, -ENOSYS if not available
  92 */
  93int sysreset_walk(enum sysreset_t type);
  94
  95/**
  96 * sysreset_get_last_walk() - get information on the last reset
  97 *
  98 * This works through the available sysreset devices until it finds one that can
  99 * perform a reset. If the provided sysreset type is not available, the next one
 100 * will be tried.
 101 *
 102 * If no device prives the information, this function returns -ENOENT
 103 *
 104 * @return last reset state (enum sysreset_t) or -ve error
 105 */
 106int sysreset_get_last_walk(void);
 107
 108/**
 109 * sysreset_walk_halt() - try to reset, otherwise halt
 110 *
 111 * This calls sysreset_walk(). If it returns, indicating that reset is not
 112 * supported, it prints a message and halts.
 113 */
 114void sysreset_walk_halt(enum sysreset_t type);
 115
 116/**
 117 * reset_cpu() - calls sysreset_walk(SYSRESET_WARM)
 118 */
 119void reset_cpu(void);
 120
 121#endif
 122