xref: /rk3399_rockchip-uboot/include/watchdog.h (revision 87e4c6020eff05133e40ab8b7b0e37e6a2be37e4)
1012771d8Swdenk /*
2012771d8Swdenk  * (C) Copyright 2001
3012771d8Swdenk  * Erik Theisen,  Wave 7 Optics, etheisen@mindspring.com.
4012771d8Swdenk  *
51a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
6012771d8Swdenk  */
7012771d8Swdenk 
8012771d8Swdenk /*
9012771d8Swdenk  * Watchdog functions and macros.
10012771d8Swdenk  */
11012771d8Swdenk #ifndef _WATCHDOG_H_
12012771d8Swdenk #define _WATCHDOG_H_
13012771d8Swdenk 
14a6741bceSSimon Glass #if !defined(__ASSEMBLY__)
15a6741bceSSimon Glass /*
16a6741bceSSimon Glass  * Reset the watchdog timer, always returns 0
17a6741bceSSimon Glass  *
18a6741bceSSimon Glass  * This function is here since it is shared between board_f() and board_r(),
19a6741bceSSimon Glass  * and the legacy arch/<arch>/board.c code.
20a6741bceSSimon Glass  */
21a6741bceSSimon Glass int init_func_watchdog_reset(void);
22a6741bceSSimon Glass #endif
23a6741bceSSimon Glass 
249be2e790SSimon Glass #if defined(CONFIG_WATCHDOG) || defined(CONFIG_HW_WATCHDOG)
25a6741bceSSimon Glass #define INIT_FUNC_WATCHDOG_INIT	init_func_watchdog_init,
26a6741bceSSimon Glass #define INIT_FUNC_WATCHDOG_RESET	init_func_watchdog_reset,
27a6741bceSSimon Glass #else
28a6741bceSSimon Glass #define INIT_FUNC_WATCHDOG_INIT
29a6741bceSSimon Glass #define INIT_FUNC_WATCHDOG_RESET
30a6741bceSSimon Glass #endif
31a6741bceSSimon Glass 
32012771d8Swdenk #if defined(CONFIG_HW_WATCHDOG) && defined(CONFIG_WATCHDOG)
33012771d8Swdenk #  error "Configuration error: CONFIG_HW_WATCHDOG and CONFIG_WATCHDOG can't be used together."
34012771d8Swdenk #endif
35012771d8Swdenk 
36012771d8Swdenk /*
37012771d8Swdenk  * Hardware watchdog
38012771d8Swdenk  */
39012771d8Swdenk #ifdef CONFIG_HW_WATCHDOG
40012771d8Swdenk 	#if defined(__ASSEMBLY__)
41012771d8Swdenk 		#define WATCHDOG_RESET bl hw_watchdog_reset
42012771d8Swdenk 	#else
43012771d8Swdenk 		extern void hw_watchdog_reset(void);
44012771d8Swdenk 
45012771d8Swdenk 		#define WATCHDOG_RESET hw_watchdog_reset
46012771d8Swdenk 	#endif /* __ASSEMBLY__ */
47012771d8Swdenk #else
48012771d8Swdenk 	/*
49012771d8Swdenk 	 * Maybe a software watchdog?
50012771d8Swdenk 	 */
51012771d8Swdenk 	#if defined(CONFIG_WATCHDOG)
52012771d8Swdenk 		#if defined(__ASSEMBLY__)
53012771d8Swdenk 			#define WATCHDOG_RESET bl watchdog_reset
54012771d8Swdenk 		#else
55012771d8Swdenk 			extern void watchdog_reset(void);
56012771d8Swdenk 
57012771d8Swdenk 			#define WATCHDOG_RESET watchdog_reset
58012771d8Swdenk 		#endif
59012771d8Swdenk 	#else
60012771d8Swdenk 		/*
61012771d8Swdenk 		 * No hardware or software watchdog.
62012771d8Swdenk 		 */
63012771d8Swdenk 		#if defined(__ASSEMBLY__)
64012771d8Swdenk 			#define WATCHDOG_RESET /*XXX DO_NOT_DEL_THIS_COMMENT*/
65012771d8Swdenk 		#else
66012771d8Swdenk 			#define WATCHDOG_RESET() {}
67012771d8Swdenk 		#endif /* __ASSEMBLY__ */
68012771d8Swdenk 	#endif /* CONFIG_WATCHDOG && !__ASSEMBLY__ */
69012771d8Swdenk #endif /* CONFIG_HW_WATCHDOG */
70012771d8Swdenk 
71012771d8Swdenk /*
72012771d8Swdenk  * Prototypes from $(CPU)/cpu.c.
73012771d8Swdenk  */
74012771d8Swdenk 
75907208c4SChristophe Leroy /* MPC 8xx */
76*87e4c602SChristophe Leroy #if defined(CONFIG_MPC8xx) && !defined(__ASSEMBLY__)
77ba3da734SChristophe Leroy 	void reset_8xx_watchdog(immap_t __iomem *immr);
78907208c4SChristophe Leroy #endif
79907208c4SChristophe Leroy 
80e9a389a1SSonic Zhang #if defined(CONFIG_HW_WATCHDOG) && !defined(__ASSEMBLY__)
81a6720762STom Rini 	void hw_watchdog_init(void);
82a6720762STom Rini #endif
830f8062b2SBoschung, Rainer 
840f8062b2SBoschung, Rainer #if defined(CONFIG_MPC85xx) && !defined(__ASSEMBLY__)
850f8062b2SBoschung, Rainer 	void init_85xx_watchdog(void);
860f8062b2SBoschung, Rainer #endif
87012771d8Swdenk #endif /* _WATCHDOG_H_ */
88