]>
Commit | Line | Data |
---|---|---|
f9917454 SG |
1 | /* |
2 | * Copyright (c) 2015 Google, Inc | |
3 | * Written by Simon Glass <[email protected]> | |
4 | * | |
5 | * SPDX-License-Identifier: GPL-2.0+ | |
6 | */ | |
7 | ||
8 | #ifndef __RESET_H | |
9 | #define __RESET_H | |
10 | ||
11 | enum reset_t { | |
12 | RESET_WARM, /* Reset CPU, keep GPIOs active */ | |
13 | RESET_COLD, /* Reset CPU and GPIOs */ | |
14 | RESET_POWER, /* Reset PMIC (remove and restore power) */ | |
15 | ||
16 | RESET_COUNT, | |
17 | }; | |
18 | ||
19 | struct reset_ops { | |
20 | /** | |
21 | * request() - request a reset of the given type | |
22 | * | |
23 | * Note that this function may return before the reset takes effect. | |
24 | * | |
25 | * @type: Reset type to request | |
26 | * @return -EINPROGRESS if the reset has been started and | |
27 | * will complete soon, -EPROTONOSUPPORT if not supported | |
28 | * by this device, 0 if the reset has already happened | |
29 | * (in which case this method will not actually return) | |
30 | */ | |
31 | int (*request)(struct udevice *dev, enum reset_t type); | |
32 | }; | |
33 | ||
34 | #define reset_get_ops(dev) ((struct reset_ops *)(dev)->driver->ops) | |
35 | ||
36 | /** | |
37 | * reset_request() - request a reset | |
38 | * | |
39 | * @type: Reset type to request | |
40 | * @return 0 if OK, -EPROTONOSUPPORT if not supported by this device | |
41 | */ | |
42 | int reset_request(struct udevice *dev, enum reset_t type); | |
43 | ||
44 | /** | |
45 | * reset_walk() - cause a reset | |
46 | * | |
47 | * This works through the available reset devices until it finds one that can | |
48 | * perform a reset. If the provided reset type is not available, the next one | |
49 | * will be tried. | |
50 | * | |
51 | * If this function fails to reset, it will display a message and halt | |
52 | * | |
53 | * @type: Reset type to request | |
1704d083 | 54 | * @return -EINPROGRESS if a reset is in progress, -ENOSYS if not available |
f9917454 | 55 | */ |
1704d083 SG |
56 | int reset_walk(enum reset_t type); |
57 | ||
58 | /** | |
59 | * reset_walk_halt() - try to reset, otherwise halt | |
60 | * | |
61 | * This calls reset_walk(). If it returns, indicating that reset is not | |
62 | * supported, it prints a message and halts. | |
63 | */ | |
64 | void reset_walk_halt(enum reset_t type); | |
f9917454 SG |
65 | |
66 | /** | |
67 | * reset_cpu() - calls reset_walk(RESET_WARM) | |
68 | */ | |
69 | void reset_cpu(ulong addr); | |
70 | ||
71 | #endif |