diff options
author | Ahmad Fatoum <a.fatoum@pengutronix.de> | 2021-06-19 05:45:08 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-06-21 08:04:36 +0200 |
commit | 84477a5d5a770133e96a44a9e2dd109ec4228d62 (patch) | |
tree | 14e0bec9a6815d493ec9641151aeb0cffb2cbb88 /arch/sandbox/board/watchdog.c | |
parent | d61d31fc4d4beaf261ff9f7f9d24907f52576d7e (diff) | |
download | barebox-84477a5d5a770133e96a44a9e2dd109ec4228d62.tar.gz barebox-84477a5d5a770133e96a44a9e2dd109ec4228d62.tar.xz |
sandbox: use nvmem on top of stickypage for reset reason
Watchdog and system reset driver use a byte in the sticky page to
persist reset reason over reexec. So far, this was a byte outside
partitioned space. With the new nvmem-cells binding, a partition can be
dedicated to holding nvmem cells. Use that instead.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Link: https://lore.barebox.org/20210619034516.6737-6-a.fatoum@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/sandbox/board/watchdog.c')
-rw-r--r-- | arch/sandbox/board/watchdog.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/arch/sandbox/board/watchdog.c b/arch/sandbox/board/watchdog.c index e1cff7a0bf..ff26a2019f 100644 --- a/arch/sandbox/board/watchdog.c +++ b/arch/sandbox/board/watchdog.c @@ -6,7 +6,7 @@ #include <mach/linux.h> #include <of.h> #include <watchdog.h> -#include <mfd/syscon.h> +#include <linux/nvmem-consumer.h> #include <reset_source.h> struct sandbox_watchdog { @@ -36,10 +36,9 @@ static int sandbox_watchdog_set_timeout(struct watchdog *wdd, unsigned int timeo static int sandbox_watchdog_probe(struct device_d *dev) { struct device_node *np = dev->device_node; + struct nvmem_cell *reset_source_cell; struct sandbox_watchdog *wd; struct watchdog *wdd; - struct regmap *src; - u32 src_offset; int ret; wd = xzalloc(sizeof(*wd)); @@ -57,16 +56,17 @@ static int sandbox_watchdog_probe(struct device_d *dev) return ret; } - src = syscon_regmap_lookup_by_phandle(np, "barebox,reset-source"); - if (IS_ERR(src)) - return 0; + reset_source_cell = of_nvmem_cell_get(dev->device_node, "reset-source"); + if (IS_ERR(reset_source_cell)) { + dev_warn(dev, "No reset source info available: %pe\n", reset_source_cell); + goto out; + } - ret = of_property_read_u32_index(np, "barebox,reset-source", 1, &src_offset); - if (ret) - return 0; + nvmem_cell_write(reset_source_cell, &(u8) { RESET_WDG }, 1); - regmap_update_bits(src, src_offset, 0xff, RESET_WDG); + nvmem_cell_put(reset_source_cell); +out: dev_info(dev, "probed\n"); return 0; } |