diff options
| author | Tom Rini <trini@konsulko.com> | 2016-05-27 15:49:43 -0400 |
|---|---|---|
| committer | Tom Rini <trini@konsulko.com> | 2016-05-27 20:34:12 -0400 |
| commit | e4a94ce4ac77396b181663c0493c50bc2d5b9143 (patch) | |
| tree | 7564e2d5e7e24841a763460f7eaf91409abd0312 /include/sysreset.h | |
| parent | 378f9134eba4665ea94a63653393d25418665fda (diff) | |
| parent | 3c27b6ad540828c44a62d209030df5ba86896df0 (diff) | |
| download | u-boot-e4a94ce4ac77396b181663c0493c50bc2d5b9143.tar.gz u-boot-e4a94ce4ac77396b181663c0493c50bc2d5b9143.tar.xz u-boot-e4a94ce4ac77396b181663c0493c50bc2d5b9143.zip | |
Merge git://git.denx.de/u-boot-dm
For odroid-c2 (arch-meson) for now disable designware eth as meson
now needs to do some harder GPIO work.
Signed-off-by: Tom Rini <trini@konsulko.com>
Conflicts:
lib/efi_loader/efi_disk.c
Modified:
configs/odroid-c2_defconfig
Diffstat (limited to 'include/sysreset.h')
| -rw-r--r-- | include/sysreset.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/include/sysreset.h b/include/sysreset.h new file mode 100644 index 0000000000..393c7be3d8 --- /dev/null +++ b/include/sysreset.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2015 Google, Inc + * Written by Simon Glass <sjg@chromium.org> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __SYSRESET_H +#define __SYSRESET_H + +enum sysreset_t { + SYSRESET_WARM, /* Reset CPU, keep GPIOs active */ + SYSRESET_COLD, /* Reset CPU and GPIOs */ + SYSRESET_POWER, /* Reset PMIC (remove and restore power) */ + + SYSRESET_COUNT, +}; + +struct sysreset_ops { + /** + * request() - request a sysreset of the given type + * + * Note that this function may return before the reset takes effect. + * + * @type: Reset type to request + * @return -EINPROGRESS if the reset has been started and + * will complete soon, -EPROTONOSUPPORT if not supported + * by this device, 0 if the reset has already happened + * (in which case this method will not actually return) + */ + int (*request)(struct udevice *dev, enum sysreset_t type); +}; + +#define sysreset_get_ops(dev) ((struct sysreset_ops *)(dev)->driver->ops) + +/** + * sysreset_request() - request a sysreset + * + * @type: Reset type to request + * @return 0 if OK, -EPROTONOSUPPORT if not supported by this device + */ +int sysreset_request(struct udevice *dev, enum sysreset_t type); + +/** + * sysreset_walk() - cause a system reset + * + * This works through the available sysreset devices until it finds one that can + * perform a reset. If the provided sysreset type is not available, the next one + * will be tried. + * + * If this function fails to reset, it will display a message and halt + * + * @type: Reset type to request + * @return -EINPROGRESS if a reset is in progress, -ENOSYS if not available + */ +int sysreset_walk(enum sysreset_t type); + +/** + * sysreset_walk_halt() - try to reset, otherwise halt + * + * This calls sysreset_walk(). If it returns, indicating that reset is not + * supported, it prints a message and halts. + */ +void sysreset_walk_halt(enum sysreset_t type); + +/** + * reset_cpu() - calls sysreset_walk(SYSRESET_WARM) + */ +void reset_cpu(ulong addr); + +#endif |
