blackfin: Move blackfin watchdog driver out of the blackfin arch folder.
authorSonic Zhang <sonic.zhang@analog.com>
Sun, 7 Apr 2013 10:02:37 +0000 (18:02 +0800)
committerSonic Zhang <sonic.zhang@analog.com>
Mon, 13 May 2013 08:30:26 +0000 (16:30 +0800)
- 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>
arch/blackfin/cpu/Makefile
arch/blackfin/cpu/initcode.c
arch/blackfin/cpu/start.S
arch/blackfin/cpu/watchdog.c [deleted file]
arch/blackfin/lib/board.c
doc/README.watchdog
drivers/watchdog/Makefile
drivers/watchdog/bfin_wdt.c [new file with mode: 0644]
include/configs/bfin_adi_common.h
include/watchdog.h

index 0a72ec5df3c0d6cb17edc8f43b75cd8e04dda761..145f63eea7109fc1cfdc7953085dbf2c36fa68c6 100644 (file)
@@ -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))
index 8ef0b92c238c580efefa04749333d4bf4b3163a7..078209fc246b1404c1f497ea7367429e437168bf 100644 (file)
@@ -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');
        }
index 7155fc858b781d7d9a579f3879d228dab2d2e6fb..1c6ae352758bc4a182b5e1c604f60647ee844ac9 100644 (file)
@@ -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 (file)
index 1886bda..0000000
+++ /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);
-}
index 85b859df721c45e00f100c1a9caf04b7f5ff6665..f1d55470e869965db43b612f3c50e3be3005f677 100644 (file)
@@ -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
index 33f31c2140573222932aae8f376de9eed9c70b8c..59f306b8511cb24a70803e81dbfb9d51d6925016 100644 (file)
@@ -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.
index 13e7c376861a67c167392b5c8f2448e8b24fd5c8..d57578df6c2e0ac5bdd65bbf96b6fe407e1f8efd 100644 (file)
@@ -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/drivers/watchdog/bfin_wdt.c b/drivers/watchdog/bfin_wdt.c
new file mode 100644 (file)
index 0000000..7a6756b
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * 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>
+#include <asm/mach-common/bits/watchdog.h>
+
+void hw_watchdog_reset(void)
+{
+       bfin_write_WDOG_STAT(0);
+}
+
+void hw_watchdog_init(void)
+{
+       bfin_write_WDOG_CTL(WDDIS);
+       SSYNC();
+       bfin_write_WDOG_CNT(CONFIG_WATCHDOG_TIMEOUT_MSECS / 1000 * get_sclk());
+       hw_watchdog_reset();
+       bfin_write_WDOG_CTL(WDEN);
+}
index c986ba3d3e46432ead359013b49a988a39c1e3c8..0bcccf831b4707567f2eae32563cad0edce31f31 100644 (file)
 #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
index 97ec186be32e43fa2d40173b57718f1f1bb34eee..d95e4b164d85e0cf25e65c09027edd5b3d402902 100644 (file)
@@ -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_ */