xref: /rk3399_rockchip-uboot/drivers/watchdog/s5p_wdt.c (revision 3765b3e7bd0f8e46914d417f29cbcb0c72b1acf7)
12b5fdd07SMarek Vasut /*
22b5fdd07SMarek Vasut  * Copyright (C) 2012 Samsung Electronics
32b5fdd07SMarek Vasut  * Minkyu Kang <mk7.kang@samsung.com>
42b5fdd07SMarek Vasut  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
62b5fdd07SMarek Vasut  */
72b5fdd07SMarek Vasut 
82b5fdd07SMarek Vasut #include <common.h>
92b5fdd07SMarek Vasut #include <asm/io.h>
102b5fdd07SMarek Vasut #include <asm/arch/watchdog.h>
112b5fdd07SMarek Vasut 
122b5fdd07SMarek Vasut #define PRESCALER_VAL 255
132b5fdd07SMarek Vasut 
wdt_stop(void)142b5fdd07SMarek Vasut void wdt_stop(void)
152b5fdd07SMarek Vasut {
162b5fdd07SMarek Vasut 	struct s5p_watchdog *wdt =
172b5fdd07SMarek Vasut 		(struct s5p_watchdog *)samsung_get_base_watchdog();
182b5fdd07SMarek Vasut 	unsigned int wtcon;
192b5fdd07SMarek Vasut 
202b5fdd07SMarek Vasut 	wtcon = readl(&wdt->wtcon);
212b5fdd07SMarek Vasut 	wtcon &= ~(WTCON_EN | WTCON_INT | WTCON_RESET);
222b5fdd07SMarek Vasut 
232b5fdd07SMarek Vasut 	writel(wtcon, &wdt->wtcon);
242b5fdd07SMarek Vasut }
252b5fdd07SMarek Vasut 
wdt_start(unsigned int timeout)262b5fdd07SMarek Vasut void wdt_start(unsigned int timeout)
272b5fdd07SMarek Vasut {
282b5fdd07SMarek Vasut 	struct s5p_watchdog *wdt =
292b5fdd07SMarek Vasut 		(struct s5p_watchdog *)samsung_get_base_watchdog();
302b5fdd07SMarek Vasut 	unsigned int wtcon;
312b5fdd07SMarek Vasut 
322b5fdd07SMarek Vasut 	wdt_stop();
332b5fdd07SMarek Vasut 
342b5fdd07SMarek Vasut 	wtcon = readl(&wdt->wtcon);
352b5fdd07SMarek Vasut 	wtcon |= (WTCON_EN | WTCON_CLK(WTCON_CLK_128));
362b5fdd07SMarek Vasut 	wtcon &= ~WTCON_INT;
372b5fdd07SMarek Vasut 	wtcon |= WTCON_RESET;
382b5fdd07SMarek Vasut 	wtcon |= WTCON_PRESCALER(PRESCALER_VAL);
392b5fdd07SMarek Vasut 
402b5fdd07SMarek Vasut 	writel(timeout, &wdt->wtdat);
412b5fdd07SMarek Vasut 	writel(timeout, &wdt->wtcnt);
422b5fdd07SMarek Vasut 	writel(wtcon, &wdt->wtcon);
432b5fdd07SMarek Vasut }
44