diff options
Diffstat (limited to 'arch')
| -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/cpu/watchdog.c | 23 | ||||
| -rw-r--r-- | arch/blackfin/lib/board.c | 4 | 
5 files changed, 24 insertions, 35 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/cpu/watchdog.c b/arch/blackfin/cpu/watchdog.c deleted file mode 100644 index 1886bda0a..000000000 --- a/arch/blackfin/cpu/watchdog.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * watchdog.c - driver for Blackfin on-chip watchdog - * - * Copyright (c) 2007-2009 Analog Devices Inc. - * - * Licensed under the GPL-2 or later. - */ - -#include <common.h> -#include <watchdog.h> -#include <asm/blackfin.h> - -void hw_watchdog_reset(void) -{ -	bfin_write_WDOG_STAT(0); -} - -void hw_watchdog_init(void) -{ -	bfin_write_WDOG_CNT(5 * get_sclk());	/* 5 second timeout */ -	hw_watchdog_reset(); -	bfin_write_WDOG_CTL(0x0); -} 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 |