summaryrefslogtreecommitdiff
path: root/tools/src/wdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/src/wdt.c')
-rw-r--r--tools/src/wdt.c44
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);
+}