diff options
| author | Sonic Zhang <sonic.zhang@analog.com> | 2013-04-07 18:02:37 +0800 | 
|---|---|---|
| committer | Sonic Zhang <sonic.zhang@analog.com> | 2013-05-13 16:30:26 +0800 | 
| commit | e9a389a18477c1c57a0b30e9ea8f4d38c6e26e63 (patch) | |
| tree | 4e0c9e5c15d316a8e16c10c428e44e41bf58e1b5 | |
| parent | 13262d4cdab79b6ee8d9c6089f84132a4c9372a4 (diff) | |
| download | olio-uboot-2014.01-e9a389a18477c1c57a0b30e9ea8f4d38c6e26e63.tar.xz olio-uboot-2014.01-e9a389a18477c1c57a0b30e9ea8f4d38c6e26e63.zip | |
blackfin: Move blackfin watchdog driver out of the blackfin arch folder.
- Enable hw_watchdog_init() in watchdog.h if CONFIG_HW_WATCHDOG is defined.
- Move blackfin hw watchdog driver to the generic driver folder.
- Call hw_watchdog_init() from blackfin board init code.
- Reuse macro CONFIG_WATCHDOG_TIMEOUT_MSECS
- Update README.watchdog accordingly
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
| -rw-r--r-- | arch/blackfin/cpu/Makefile | 1 | ||||
| -rw-r--r-- | arch/blackfin/cpu/initcode.c | 5 | ||||
| -rw-r--r-- | arch/blackfin/cpu/start.S | 26 | ||||
| -rw-r--r-- | arch/blackfin/lib/board.c | 4 | ||||
| -rw-r--r-- | doc/README.watchdog | 3 | ||||
| -rw-r--r-- | drivers/watchdog/Makefile | 1 | ||||
| -rw-r--r-- | drivers/watchdog/bfin_wdt.c (renamed from arch/blackfin/cpu/watchdog.c) | 7 | ||||
| -rw-r--r-- | include/configs/bfin_adi_common.h | 6 | ||||
| -rw-r--r-- | include/watchdog.h | 3 | 
9 files changed, 40 insertions, 16 deletions
| diff --git a/arch/blackfin/cpu/Makefile b/arch/blackfin/cpu/Makefile index 0a72ec5df..145f63eea 100644 --- a/arch/blackfin/cpu/Makefile +++ b/arch/blackfin/cpu/Makefile @@ -25,7 +25,6 @@ COBJS-y  += os_log.o  COBJS-y  += reset.o  COBJS-y  += serial.o  COBJS-y  += traps.o -COBJS-$(CONFIG_HW_WATCHDOG)  += watchdog.o  SRCS     := $(SEXTRA:.o=.S) $(SOBJS:.o=.S) $(COBJS-y:.o=.c)  OBJS     := $(addprefix $(obj),$(COBJS-y) $(SOBJS)) diff --git a/arch/blackfin/cpu/initcode.c b/arch/blackfin/cpu/initcode.c index 8ef0b92c2..078209fc2 100644 --- a/arch/blackfin/cpu/initcode.c +++ b/arch/blackfin/cpu/initcode.c @@ -13,6 +13,7 @@  #include <config.h>  #include <asm/blackfin.h> +#include <asm/mach-common/bits/watchdog.h>  #include <asm/mach-common/bits/bootrom.h>  #include <asm/mach-common/bits/core.h> @@ -468,9 +469,11 @@ program_early_devices(ADI_BOOT_DATA *bs, uint *sdivB, uint *divB, uint *vcoB)  		bfin_write_SEC_GCTL(0x1);  		bfin_write_SEC_CCTL(0x1);  #endif +		bfin_write_WDOG_CTL(WDDIS); +		SSYNC();  		bfin_write_WDOG_CNT(MSEC_TO_SCLK(CONFIG_HW_WATCHDOG_TIMEOUT_INITCODE));  #if CONFIG_BFIN_BOOT_MODE != BFIN_BOOT_UART -		bfin_write_WDOG_CTL(0); +		bfin_write_WDOG_CTL(WDEN);  #endif  		serial_putc('f');  	} diff --git a/arch/blackfin/cpu/start.S b/arch/blackfin/cpu/start.S index 7155fc858..1c6ae3527 100644 --- a/arch/blackfin/cpu/start.S +++ b/arch/blackfin/cpu/start.S @@ -32,6 +32,7 @@  #include <config.h>  #include <asm/blackfin.h> +#include <asm/mach-common/bits/watchdog.h>  #include <asm/mach-common/bits/core.h>  #include <asm/mach-common/bits/pll.h> @@ -65,20 +66,29 @@ ENTRY(_start)  	p5.h = HI(COREMMR_BASE);  #ifdef CONFIG_HW_WATCHDOG -#ifndef __ADSPBF60x__ -# ifndef CONFIG_HW_WATCHDOG_TIMEOUT_START -#  define CONFIG_HW_WATCHDOG_TIMEOUT_START 5000 -# endif -	/* Program the watchdog with an initial timeout of ~5 seconds. +	/* Program the watchdog with default timeout of ~5 seconds.  	 * That should be long enough to bootstrap ourselves up and  	 * then the common u-boot code can take over.  	 */ +	r1 = WDDIS; +# ifdef __ADSPBF60x__ +	[p4 + (WDOG_CTL - SYSMMR_BASE)] = r1; +# else +	W[p4 + (WDOG_CTL - SYSMMR_BASE)] = r1; +# endif +	SSYNC;  	r0 = 0; -	r0.h = HI(MSEC_TO_SCLK(CONFIG_HW_WATCHDOG_TIMEOUT_START)); +	r0.h = HI(MSEC_TO_SCLK(CONFIG_WATCHDOG_TIMEOUT_MSECS));  	[p4 + (WDOG_CNT - SYSMMR_BASE)] = r0; +	SSYNC; +	r1 = WDEN;  	/* fire up the watchdog - R0.L above needs to be 0x0000 */ -	W[p4 + (WDOG_CTL - SYSMMR_BASE)] = r0; -#endif +# ifdef __ADSPBF60x__ +	[p4 + (WDOG_CTL - SYSMMR_BASE)] = r1; +# else +	W[p4 + (WDOG_CTL - SYSMMR_BASE)] = r1; +# endif +	SSYNC;  #endif  	/* Turn on the serial for debugging the init process */ diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c index 85b859df7..f1d55470e 100644 --- a/arch/blackfin/lib/board.c +++ b/arch/blackfin/lib/board.c @@ -279,9 +279,9 @@ void board_init_f(ulong bootflag)  	dcache_enable();  #endif -#ifdef CONFIG_WATCHDOG +#ifdef CONFIG_HW_WATCHDOG  	serial_early_puts("Setting up external watchdog\n"); -	watchdog_init(); +	hw_watchdog_init();  #endif  #ifdef DEBUG diff --git a/doc/README.watchdog b/doc/README.watchdog index 33f31c214..59f306b85 100644 --- a/doc/README.watchdog +++ b/doc/README.watchdog @@ -30,3 +30,6 @@ CONFIG_IMX_WATCHDOG  CONFIG_XILINX_TB_WATCHDOG  	Available for Xilinx Axi platforms to service timebase watchdog timer. + +CONFIG_BFIN_WATCHDOG +	Available for bf5xx and bf6xx to service the watchdog. diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile index 13e7c3768..d57578df6 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ -33,6 +33,7 @@ endif  COBJS-$(CONFIG_TNETV107X_WATCHDOG) += tnetv107x_wdt.o  COBJS-$(CONFIG_S5P)               += s5p_wdt.o  COBJS-$(CONFIG_XILINX_TB_WATCHDOG) += xilinx_tb_wdt.o +COBJS-$(CONFIG_BFIN_WATCHDOG)  += bfin_wdt.o  COBJS	:= $(COBJS-y)  SRCS	:= $(COBJS:.o=.c) diff --git a/arch/blackfin/cpu/watchdog.c b/drivers/watchdog/bfin_wdt.c index 1886bda0a..7a6756b2e 100644 --- a/arch/blackfin/cpu/watchdog.c +++ b/drivers/watchdog/bfin_wdt.c @@ -9,6 +9,7 @@  #include <common.h>  #include <watchdog.h>  #include <asm/blackfin.h> +#include <asm/mach-common/bits/watchdog.h>  void hw_watchdog_reset(void)  { @@ -17,7 +18,9 @@ void hw_watchdog_reset(void)  void hw_watchdog_init(void)  { -	bfin_write_WDOG_CNT(5 * get_sclk());	/* 5 second timeout */ +	bfin_write_WDOG_CTL(WDDIS); +	SSYNC(); +	bfin_write_WDOG_CNT(CONFIG_WATCHDOG_TIMEOUT_MSECS / 1000 * get_sclk());  	hw_watchdog_reset(); -	bfin_write_WDOG_CTL(0x0); +	bfin_write_WDOG_CTL(WDEN);  } diff --git a/include/configs/bfin_adi_common.h b/include/configs/bfin_adi_common.h index c986ba3d3..0bcccf831 100644 --- a/include/configs/bfin_adi_common.h +++ b/include/configs/bfin_adi_common.h @@ -314,5 +314,11 @@  #define CONFIG_BFIN_SPI_GPIO_CS /* Only matters if BFIN_SPI is enabled */  #define CONFIG_LZMA  #define CONFIG_MONITOR_IS_IN_RAM +#ifdef CONFIG_HW_WATCHDOG +# define CONFIG_BFIN_WATCHDOG +# ifndef CONFIG_WATCHDOG_TIMEOUT_MSECS +#  define CONFIG_WATCHDOG_TIMEOUT_MSECS 5000 +# endif +#endif  #endif diff --git a/include/watchdog.h b/include/watchdog.h index 97ec186be..d95e4b164 100644 --- a/include/watchdog.h +++ b/include/watchdog.h @@ -108,8 +108,7 @@ int init_func_watchdog_reset(void);  	void reset_4xx_watchdog(void);  #endif -/* Freescale i.MX */ -#if defined(CONFIG_IMX_WATCHDOG) && !defined(__ASSEMBLY__) +#if defined(CONFIG_HW_WATCHDOG) && !defined(__ASSEMBLY__)  	void hw_watchdog_init(void);  #endif  #endif /* _WATCHDOG_H_ */ |