aboutsummaryrefslogtreecommitdiffstats
path: root/roms/u-boot/drivers/watchdog/s5p_wdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/u-boot/drivers/watchdog/s5p_wdt.c')
-rw-r--r--roms/u-boot/drivers/watchdog/s5p_wdt.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/roms/u-boot/drivers/watchdog/s5p_wdt.c b/roms/u-boot/drivers/watchdog/s5p_wdt.c
new file mode 100644
index 000000000..5ad7d2609
--- /dev/null
+++ b/roms/u-boot/drivers/watchdog/s5p_wdt.c
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ * Minkyu Kang <mk7.kang@samsung.com>
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/watchdog.h>
+
+#define PRESCALER_VAL 255
+
+void wdt_stop(void)
+{
+ struct s5p_watchdog *wdt =
+ (struct s5p_watchdog *)samsung_get_base_watchdog();
+ unsigned int wtcon;
+
+ wtcon = readl(&wdt->wtcon);
+ wtcon &= ~(WTCON_EN | WTCON_INT | WTCON_RESET);
+
+ writel(wtcon, &wdt->wtcon);
+}
+
+void wdt_start(unsigned int timeout)
+{
+ struct s5p_watchdog *wdt =
+ (struct s5p_watchdog *)samsung_get_base_watchdog();
+ unsigned int wtcon;
+
+ wdt_stop();
+
+ wtcon = readl(&wdt->wtcon);
+ wtcon |= (WTCON_EN | WTCON_CLK(WTCON_CLK_128));
+ wtcon &= ~WTCON_INT;
+ wtcon |= WTCON_RESET;
+ wtcon |= WTCON_PRESCALER(PRESCALER_VAL);
+
+ writel(timeout, &wdt->wtdat);
+ writel(timeout, &wdt->wtcnt);
+ writel(wtcon, &wdt->wtcon);
+}