All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] [V2] bcm2835: wdt: support for the bcm2835/2836 wdt
@ 2017-02-10 16:28 Paolo Pisati
  2017-02-10 16:28 ` [U-Boot] [PATCH] bcm2835_wdt: support for the BCM2835/2836 watchdog Paolo Pisati
  0 siblings, 1 reply; 3+ messages in thread
From: Paolo Pisati @ 2017-02-10 16:28 UTC (permalink / raw)
  To: u-boot

The following patch add support for the watchdog built into the
bcm2835/2836 chips, using the max timeout (~15s).

Tested on my RaspberryPi2.

Changelog:
v2: fixed __eufi_runtime usage and moved to Kconfig

Paolo Pisati (1):
  bcm2835_wdt: support for the BCM2835/2836 watchdog

 arch/arm/mach-bcm283x/reset.c  | 21 ++++++++++++++++++---
 board/raspberrypi/rpi/rpi.c    |  4 ++++
 drivers/watchdog/Kconfig       | 15 +++++++++++++++
 drivers/watchdog/Makefile      |  1 +
 drivers/watchdog/bcm2835_wdt.c | 35 +++++++++++++++++++++++++++++++++++
 5 files changed, 73 insertions(+), 3 deletions(-)
 create mode 100644 drivers/watchdog/bcm2835_wdt.c

-- 
2.7.4

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [U-Boot] [PATCH] bcm2835_wdt: support for the BCM2835/2836 watchdog
  2017-02-10 16:28 [U-Boot] [PATCH] [V2] bcm2835: wdt: support for the bcm2835/2836 wdt Paolo Pisati
@ 2017-02-10 16:28 ` Paolo Pisati
  2017-05-10 17:51   ` [U-Boot] " Tom Rini
  0 siblings, 1 reply; 3+ messages in thread
From: Paolo Pisati @ 2017-02-10 16:28 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Paolo Pisati <p.pisati@gmail.com>
---
 arch/arm/mach-bcm283x/reset.c  | 21 ++++++++++++++++++---
 board/raspberrypi/rpi/rpi.c    |  4 ++++
 drivers/watchdog/Kconfig       | 15 +++++++++++++++
 drivers/watchdog/Makefile      |  1 +
 drivers/watchdog/bcm2835_wdt.c | 35 +++++++++++++++++++++++++++++++++++
 5 files changed, 73 insertions(+), 3 deletions(-)
 create mode 100644 drivers/watchdog/bcm2835_wdt.c

diff --git a/arch/arm/mach-bcm283x/reset.c b/arch/arm/mach-bcm283x/reset.c
index 685815c..b62cb8a 100644
--- a/arch/arm/mach-bcm283x/reset.c
+++ b/arch/arm/mach-bcm283x/reset.c
@@ -21,18 +21,33 @@
  */
 #define BCM2835_WDOG_RSTS_RASPBERRYPI_HALT	0x555
 
+/* max ticks timeout */
+#define BCM2835_WDOG_MAX_TIMEOUT	0x000fffff
+
+#ifdef CONFIG_BCM2835_WDT
+extern void hw_watchdog_disable(void);
+#else
+void hw_watchdog_disable(void) {}
+#endif
+
 __efi_runtime_data struct bcm2835_wdog_regs *wdog_regs =
 	(struct bcm2835_wdog_regs *)BCM2835_WDOG_PHYSADDR;
 
-void __efi_runtime reset_cpu(ulong addr)
+void __efi_runtime reset_cpu(ulong ticks)
 {
-	uint32_t rstc;
+	uint32_t rstc, timeout;
+
+	if (ticks == 0) {
+		hw_watchdog_disable();
+		timeout = RESET_TIMEOUT;
+	} else
+		timeout = ticks & BCM2835_WDOG_MAX_TIMEOUT;
 
 	rstc = readl(&wdog_regs->rstc);
 	rstc &= ~BCM2835_WDOG_RSTC_WRCFG_MASK;
 	rstc |= BCM2835_WDOG_RSTC_WRCFG_FULL_RESET;
 
-	writel(BCM2835_WDOG_PASSWORD | RESET_TIMEOUT, &wdog_regs->wdog);
+	writel(BCM2835_WDOG_PASSWORD | timeout, &wdog_regs->wdog);
 	writel(BCM2835_WDOG_PASSWORD | rstc, &wdog_regs->rstc);
 }
 
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index 22e87a2..106e518 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -22,6 +22,7 @@
 #ifdef CONFIG_ARM64
 #include <asm/armv8/mmu.h>
 #endif
+#include <watchdog.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -478,6 +479,9 @@ static void rpi_disable_inactive_uart(void)
 
 int board_init(void)
 {
+#ifdef CONFIG_HW_WATCHDOG
+	hw_watchdog_init();
+#endif
 #ifndef CONFIG_PL01X_SERIAL
 	rpi_disable_inactive_uart();
 #endif
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index e69de29..1a84c41 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -0,0 +1,15 @@
+menu "Watchdog support"
+
+config HW_WATCHDOG
+	bool
+
+config BCM2835_WDT
+	bool "Enable BCM2835/2836 watchdog driver"
+	select HW_WATCHDOG
+	help
+	  Say Y here to enable the BCM2835/2836 watchdog
+
+	  This provides basic infrastructure to support BCM2835/2836 watchdog
+	  hardware, with a max timeout of ~15secs.
+
+endmenu
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index a007ae8..3b328ec 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -15,3 +15,4 @@ obj-$(CONFIG_XILINX_TB_WATCHDOG) += xilinx_tb_wdt.o
 obj-$(CONFIG_BFIN_WATCHDOG)  += bfin_wdt.o
 obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o
 obj-$(CONFIG_DESIGNWARE_WATCHDOG) += designware_wdt.o
+obj-$(CONFIG_BCM2835_WDT)       += bcm2835_wdt.o
diff --git a/drivers/watchdog/bcm2835_wdt.c b/drivers/watchdog/bcm2835_wdt.c
new file mode 100644
index 0000000..6f753ae
--- /dev/null
+++ b/drivers/watchdog/bcm2835_wdt.c
@@ -0,0 +1,35 @@
+/*
+ * Watchdog driver for Broadcom BCM2835
+ *
+ * Copyright (C) 2017 Paolo Pisati <p.pisati@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0
+ */
+
+#include <common.h>
+#include <efi_loader.h>
+#include <asm/io.h>
+#include <asm/arch/wdog.h>
+
+#define SECS_TO_WDOG_TICKS(x) ((x) << 16)
+#define MAX_TIMEOUT   0xf /* ~15s */
+
+static __efi_runtime_data bool enabled = true;
+
+extern void reset_cpu(ulong ticks);
+
+void hw_watchdog_reset(void)
+{
+	if (enabled)
+		reset_cpu(SECS_TO_WDOG_TICKS(MAX_TIMEOUT));
+}
+
+void hw_watchdog_init(void)
+{
+	hw_watchdog_reset();
+}
+
+void __efi_runtime hw_watchdog_disable(void)
+{
+	enabled = false;
+}
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [U-Boot] bcm2835_wdt: support for the BCM2835/2836 watchdog
  2017-02-10 16:28 ` [U-Boot] [PATCH] bcm2835_wdt: support for the BCM2835/2836 watchdog Paolo Pisati
@ 2017-05-10 17:51   ` Tom Rini
  0 siblings, 0 replies; 3+ messages in thread
From: Tom Rini @ 2017-05-10 17:51 UTC (permalink / raw)
  To: u-boot

On Fri, Feb 10, 2017 at 05:28:05PM +0100, Paolo Pisati wrote:

> Signed-off-by: Paolo Pisati <p.pisati@gmail.com>

After some fiddling of the Kconfig parts, applied to u-boot/master,
thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170510/bca2c79d/attachment.sig>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-05-10 17:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-10 16:28 [U-Boot] [PATCH] [V2] bcm2835: wdt: support for the bcm2835/2836 wdt Paolo Pisati
2017-02-10 16:28 ` [U-Boot] [PATCH] bcm2835_wdt: support for the BCM2835/2836 watchdog Paolo Pisati
2017-05-10 17:51   ` [U-Boot] " Tom Rini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.