summaryrefslogtreecommitdiffstats
path: root/arch/sandbox/board/watchdog.c
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2021-06-19 05:45:08 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2021-06-21 08:04:36 +0200
commit84477a5d5a770133e96a44a9e2dd109ec4228d62 (patch)
tree14e0bec9a6815d493ec9641151aeb0cffb2cbb88 /arch/sandbox/board/watchdog.c
parentd61d31fc4d4beaf261ff9f7f9d24907f52576d7e (diff)
downloadbarebox-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.c20
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;
}