diff options
Diffstat (limited to 'tools/src/wdt.c')
| -rw-r--r-- | tools/src/wdt.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tools/src/wdt.c b/tools/src/wdt.c new file mode 100644 index 0000000..a3ebe3a --- /dev/null +++ b/tools/src/wdt.c @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: MIT */ + +#include "wdt.h" +#include "adt.h" +#include "types.h" +#include "utils.h" + +#define WDT_COUNT 0x10 +#define WDT_ALARM 0x14 +#define WDT_CTL 0x1c + +static u64 wdt_base = 0; + +void wdt_disable(void) +{ + int path[8]; + int node = adt_path_offset_trace(adt, "/arm-io/wdt", path); + + if (node < 0) { + printf("WDT node not found!\n"); + return; + } + + if (adt_get_reg(adt, path, "reg", 0, &wdt_base, NULL)) { + printf("Failed to get WDT reg property!\n"); + return; + } + + printf("WDT registers @ 0x%lx\n", wdt_base); + + write32(wdt_base + WDT_CTL, 0); + + printf("WDT disabled\n"); +} + +void wdt_reboot(void) +{ + if (!wdt_base) + return; + + write32(wdt_base + WDT_ALARM, 0x100000); + write32(wdt_base + WDT_COUNT, 0); + write32(wdt_base + WDT_CTL, 4); +} |
