xref: /rk3399_rockchip-uboot/include/watchdog.h (revision a6741bce507151f561250a00f28bcbfb2372ba02)
1012771d8Swdenk /*
2012771d8Swdenk  * (C) Copyright 2001
3012771d8Swdenk  * Erik Theisen,  Wave 7 Optics, etheisen@mindspring.com.
4012771d8Swdenk  *
5012771d8Swdenk  * See file CREDITS for list of people who contributed to this
6012771d8Swdenk  * project.
7012771d8Swdenk  *
8012771d8Swdenk  * This program is free software; you can redistribute it and/or
9012771d8Swdenk  * modify it under the terms of the GNU General Public License as
10012771d8Swdenk  * published by the Free Software Foundation; either version 2 of
11012771d8Swdenk  * the License, or (at your option) any later version.
12012771d8Swdenk  *
13012771d8Swdenk  * This program is distributed in the hope that it will be useful,
14012771d8Swdenk  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15012771d8Swdenk  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
16012771d8Swdenk  * GNU General Public License for more details.
17012771d8Swdenk  *
18012771d8Swdenk  * You should have received a copy of the GNU General Public License
19012771d8Swdenk  * along with this program; if not, write to the Free Software
20012771d8Swdenk  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21012771d8Swdenk  * MA 02111-1307 USA
22012771d8Swdenk  */
23012771d8Swdenk 
24012771d8Swdenk /*
25012771d8Swdenk  * Watchdog functions and macros.
26012771d8Swdenk  */
27012771d8Swdenk #ifndef _WATCHDOG_H_
28012771d8Swdenk #define _WATCHDOG_H_
29012771d8Swdenk 
30*a6741bceSSimon Glass #if !defined(__ASSEMBLY__)
31*a6741bceSSimon Glass /*
32*a6741bceSSimon Glass  * Reset the watchdog timer, always returns 0
33*a6741bceSSimon Glass  *
34*a6741bceSSimon Glass  * This function is here since it is shared between board_f() and board_r(),
35*a6741bceSSimon Glass  * and the legacy arch/<arch>/board.c code.
36*a6741bceSSimon Glass  */
37*a6741bceSSimon Glass int init_func_watchdog_reset(void);
38*a6741bceSSimon Glass #endif
39*a6741bceSSimon Glass 
40*a6741bceSSimon Glass #ifdef CONFIG_WATCHDOG
41*a6741bceSSimon Glass #define INIT_FUNC_WATCHDOG_INIT	init_func_watchdog_init,
42*a6741bceSSimon Glass #define INIT_FUNC_WATCHDOG_RESET	init_func_watchdog_reset,
43*a6741bceSSimon Glass #else
44*a6741bceSSimon Glass #define INIT_FUNC_WATCHDOG_INIT
45*a6741bceSSimon Glass #define INIT_FUNC_WATCHDOG_RESET
46*a6741bceSSimon Glass #endif
47*a6741bceSSimon Glass 
48012771d8Swdenk #if defined(CONFIG_HW_WATCHDOG) && defined(CONFIG_WATCHDOG)
49012771d8Swdenk #  error "Configuration error: CONFIG_HW_WATCHDOG and CONFIG_WATCHDOG can't be used together."
50012771d8Swdenk #endif
51012771d8Swdenk 
52012771d8Swdenk /*
53012771d8Swdenk  * Hardware watchdog
54012771d8Swdenk  */
55012771d8Swdenk #ifdef CONFIG_HW_WATCHDOG
56012771d8Swdenk 	#if defined(__ASSEMBLY__)
57012771d8Swdenk 		#define WATCHDOG_RESET bl hw_watchdog_reset
58012771d8Swdenk 	#else
59012771d8Swdenk 		extern void hw_watchdog_reset(void);
60012771d8Swdenk 
61012771d8Swdenk 		#define WATCHDOG_RESET hw_watchdog_reset
62012771d8Swdenk 	#endif /* __ASSEMBLY__ */
63012771d8Swdenk #else
64012771d8Swdenk 	/*
65012771d8Swdenk 	 * Maybe a software watchdog?
66012771d8Swdenk 	 */
67012771d8Swdenk 	#if defined(CONFIG_WATCHDOG)
68012771d8Swdenk 		#if defined(__ASSEMBLY__)
69012771d8Swdenk 			#define WATCHDOG_RESET bl watchdog_reset
70012771d8Swdenk 		#else
71012771d8Swdenk 			extern void watchdog_reset(void);
72012771d8Swdenk 
73012771d8Swdenk 			#define WATCHDOG_RESET watchdog_reset
74012771d8Swdenk 		#endif
75012771d8Swdenk 	#else
76012771d8Swdenk 		/*
77012771d8Swdenk 		 * No hardware or software watchdog.
78012771d8Swdenk 		 */
79012771d8Swdenk 		#if defined(__ASSEMBLY__)
80012771d8Swdenk 			#define WATCHDOG_RESET /*XXX DO_NOT_DEL_THIS_COMMENT*/
81012771d8Swdenk 		#else
82012771d8Swdenk 			#define WATCHDOG_RESET() {}
83012771d8Swdenk 		#endif /* __ASSEMBLY__ */
84012771d8Swdenk 	#endif /* CONFIG_WATCHDOG && !__ASSEMBLY__ */
85012771d8Swdenk #endif /* CONFIG_HW_WATCHDOG */
86012771d8Swdenk 
87012771d8Swdenk /*
88012771d8Swdenk  * Prototypes from $(CPU)/cpu.c.
89012771d8Swdenk  */
90012771d8Swdenk 
91012771d8Swdenk /* MPC 8xx */
92012771d8Swdenk #if (defined(CONFIG_8xx) || defined(CONFIG_MPC860)) && !defined(__ASSEMBLY__)
93012771d8Swdenk 	void reset_8xx_watchdog(volatile immap_t *immr);
94012771d8Swdenk #endif
95012771d8Swdenk 
960db5bca8Swdenk /* MPC 5xx */
970db5bca8Swdenk #if defined(CONFIG_5xx) && !defined(__ASSEMBLY__)
980db5bca8Swdenk 	void reset_5xx_watchdog(volatile immap_t *immr);
990db5bca8Swdenk #endif
1000db5bca8Swdenk 
101a21fb981SDetlev Zundel /* MPC 5xxx */
102a21fb981SDetlev Zundel #if defined(CONFIG_MPC5xxx) && !defined(__ASSEMBLY__)
103a21fb981SDetlev Zundel 	void reset_5xxx_watchdog(void);
104a21fb981SDetlev Zundel #endif
105a21fb981SDetlev Zundel 
1060c8721a4SWolfgang Denk /* AMCC 4xx */
107012771d8Swdenk #if defined(CONFIG_4xx) && !defined(__ASSEMBLY__)
108012771d8Swdenk 	void reset_4xx_watchdog(void);
109012771d8Swdenk #endif
110012771d8Swdenk 
111a6720762STom Rini /* Freescale i.MX */
112a6720762STom Rini #if defined(CONFIG_IMX_WATCHDOG) && !defined(__ASSEMBLY__)
113a6720762STom Rini 	void hw_watchdog_init(void);
114a6720762STom Rini #endif
115012771d8Swdenk #endif /* _WATCHDOG_H_ */
116