xref: /rk3399_rockchip-uboot/drivers/watchdog/bcm2835_wdt.c (revision 45a6d231b2f9b891a7df517fc40b8466e12f2b57)
1*45a6d231SPaolo Pisati /*
2*45a6d231SPaolo Pisati  * Watchdog driver for Broadcom BCM2835
3*45a6d231SPaolo Pisati  *
4*45a6d231SPaolo Pisati  * Copyright (C) 2017 Paolo Pisati <p.pisati@gmail.com>
5*45a6d231SPaolo Pisati  *
6*45a6d231SPaolo Pisati  * SPDX-License-Identifier: GPL-2.0
7*45a6d231SPaolo Pisati  */
8*45a6d231SPaolo Pisati 
9*45a6d231SPaolo Pisati #include <common.h>
10*45a6d231SPaolo Pisati #include <efi_loader.h>
11*45a6d231SPaolo Pisati #include <asm/io.h>
12*45a6d231SPaolo Pisati #include <asm/arch/wdog.h>
13*45a6d231SPaolo Pisati 
14*45a6d231SPaolo Pisati #define SECS_TO_WDOG_TICKS(x) ((x) << 16)
15*45a6d231SPaolo Pisati #define MAX_TIMEOUT   0xf /* ~15s */
16*45a6d231SPaolo Pisati 
17*45a6d231SPaolo Pisati static __efi_runtime_data bool enabled = true;
18*45a6d231SPaolo Pisati 
19*45a6d231SPaolo Pisati extern void reset_cpu(ulong ticks);
20*45a6d231SPaolo Pisati 
hw_watchdog_reset(void)21*45a6d231SPaolo Pisati void hw_watchdog_reset(void)
22*45a6d231SPaolo Pisati {
23*45a6d231SPaolo Pisati 	if (enabled)
24*45a6d231SPaolo Pisati 		reset_cpu(SECS_TO_WDOG_TICKS(MAX_TIMEOUT));
25*45a6d231SPaolo Pisati }
26*45a6d231SPaolo Pisati 
hw_watchdog_init(void)27*45a6d231SPaolo Pisati void hw_watchdog_init(void)
28*45a6d231SPaolo Pisati {
29*45a6d231SPaolo Pisati 	hw_watchdog_reset();
30*45a6d231SPaolo Pisati }
31*45a6d231SPaolo Pisati 
hw_watchdog_disable(void)32*45a6d231SPaolo Pisati void __efi_runtime hw_watchdog_disable(void)
33*45a6d231SPaolo Pisati {
34*45a6d231SPaolo Pisati 	enabled = false;
35*45a6d231SPaolo Pisati }
36