blob: a6e54d9f77356a5d47b268ce597ef7dc7ff72c39 [file] [log] [blame]
Minkyu Kang851db352012-01-18 15:55:05 +09001/*
2 * Copyright (C) 2012 Samsung Electronics
3 * Minkyu Kang <mk7.kang@samsung.com>
4 *
Wolfgang Denk3765b3e2013-10-07 13:07:26 +02005 * SPDX-License-Identifier: GPL-2.0+
Minkyu Kang851db352012-01-18 15:55:05 +09006 */
7
8#include <common.h>
9#include <asm/io.h>
10#include <asm/arch/watchdog.h>
11
12#define PRESCALER_VAL 255
13
14void wdt_stop(void)
15{
16 struct s5p_watchdog *wdt =
17 (struct s5p_watchdog *)samsung_get_base_watchdog();
18 unsigned int wtcon;
19
20 wtcon = readl(&wdt->wtcon);
21 wtcon &= ~(WTCON_EN | WTCON_INT | WTCON_RESET);
22
23 writel(wtcon, &wdt->wtcon);
24}
25
26void wdt_start(unsigned int timeout)
27{
28 struct s5p_watchdog *wdt =
29 (struct s5p_watchdog *)samsung_get_base_watchdog();
30 unsigned int wtcon;
31
32 wdt_stop();
33
34 wtcon = readl(&wdt->wtcon);
35 wtcon |= (WTCON_EN | WTCON_CLK(WTCON_CLK_128));
36 wtcon &= ~WTCON_INT;
37 wtcon |= WTCON_RESET;
38 wtcon |= WTCON_PRESCALER(PRESCALER_VAL);
39
40 writel(timeout, &wdt->wtdat);
41 writel(timeout, &wdt->wtcnt);
42 writel(wtcon, &wdt->wtcon);
43}