All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support
@ 2017-05-12 23:19 Álvaro Fernández Rojas
  2017-05-12 23:19 ` [U-Boot] [PATCH 1/8] dm: watchdog: add BCM6345 watchdog driver Álvaro Fernández Rojas
                   ` (8 more replies)
  0 siblings, 9 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-12 23:19 UTC (permalink / raw)
  To: u-boot

Adds support for Broadcom MIPS BCM6345 watchdog controller.
Also adds a generic watchdog sysreset driver to allow rebooting by expiring
the SoC watchdog.
This is needed for some specific Broadcom MIPS SoCs where pll_conf if bugged
and it can't be used to perform SoC reboots, like in BCM6348 (a1 rev).

Álvaro Fernández Rojas (8):
  dm: watchdog: add BCM6345 watchdog driver
  mips: bmips: add bcm6345-wdt driver support for BCM6358
  mips: bmips: add bcm6345-wdt driver support for BCM6328
  mips: bmips: add bcm6345-wdt driver support for BCM63268
  dm: sysreset: add watchdog-reboot driver
  mips: bmips: add wdt-reboot driver support for BCM6358
  mips: bmips: add wdt-reboot driver support for BCM6328
  mips: bmips: add wdt-reboot driver support for BCM63268

 arch/mips/dts/brcm,bcm63268.dtsi     |  11 ++++
 arch/mips/dts/brcm,bcm6328.dtsi      |  11 ++++
 arch/mips/dts/brcm,bcm6358.dtsi      |  11 ++++
 drivers/sysreset/Kconfig             |   6 ++
 drivers/sysreset/Makefile            |   1 +
 drivers/sysreset/sysreset_watchdog.c |  57 ++++++++++++++++++
 drivers/watchdog/Kconfig             |   8 +++
 drivers/watchdog/Makefile            |   1 +
 drivers/watchdog/bcm6345_wdt.c       | 109 +++++++++++++++++++++++++++++++++++
 9 files changed, 215 insertions(+)
 create mode 100644 drivers/sysreset/sysreset_watchdog.c
 create mode 100644 drivers/watchdog/bcm6345_wdt.c

-- 
2.1.4

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

* [U-Boot] [PATCH 1/8] dm: watchdog: add BCM6345 watchdog driver
  2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
@ 2017-05-12 23:19 ` Álvaro Fernández Rojas
  2017-05-16  0:17   ` Simon Glass
  2017-05-12 23:19 ` [U-Boot] [PATCH 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358 Álvaro Fernández Rojas
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-12 23:19 UTC (permalink / raw)
  To: u-boot

This driver is a simplified version of linux/drivers/watchdog/bcm63xx_wdt.c

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 drivers/watchdog/Kconfig       |   8 +++
 drivers/watchdog/Makefile      |   1 +
 drivers/watchdog/bcm6345_wdt.c | 109 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 118 insertions(+)
 create mode 100644 drivers/watchdog/bcm6345_wdt.c

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index bdaf5d4..8d56af7 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -46,4 +46,12 @@ config WDT_ASPEED
 	  It currently does not support Boot Flash Addressing Mode Detection or
 	  Second Boot.
 
+config WDT_BCM6345
+	bool "BCM6345 watchdog timer support"
+	depends on WDT && ARCH_BMIPS
+	help
+	  Select this to enable watchdog timer for BCM6345 SoCs.
+	  The watchdog timer is stopped when initialized.
+	  It performs full SoC reset.
+
 endmenu
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index 8378601..4b19e4c 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -18,4 +18,5 @@ obj-$(CONFIG_ULP_WATCHDOG) += ulp_wdog.o
 obj-$(CONFIG_WDT) += wdt-uclass.o
 obj-$(CONFIG_WDT_SANDBOX) += sandbox_wdt.o
 obj-$(CONFIG_WDT_ASPEED) += ast_wdt.o
+obj-$(CONFIG_WDT_BCM6345) += bcm6345_wdt.o
 obj-$(CONFIG_BCM2835_WDT)       += bcm2835_wdt.o
diff --git a/drivers/watchdog/bcm6345_wdt.c b/drivers/watchdog/bcm6345_wdt.c
new file mode 100644
index 0000000..858b6d5
--- /dev/null
+++ b/drivers/watchdog/bcm6345_wdt.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2017 Álvaro Fernández Rojas <noltari@gmail.com>
+ *
+ * Derived from linux/drivers/watchdog/bcm63xx_wdt.c:
+ *	Copyright (C) 2007 Miguel Gaio <miguel.gaio@efixo.com>
+ *	Copyright (C) 2008 Florian Fainelli <florian@openwrt.org>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <wdt.h>
+#include <asm/io.h>
+
+/* WDT Value register */
+#define WDT_VAL_REG		0x0
+#define WDT_VAL_MIN		0x00000002
+#define WDT_VAL_MAX		0xfffffffe
+
+/* WDT Control register */
+#define WDT_CTL_REG		0x4
+#define WDT_CTL_START1_MASK	0x0000ff00
+#define WDT_CTL_START2_MASK	0x000000ff
+#define WDT_CTL_STOP1_MASK	0x0000ee00
+#define WDT_CTL_STOP2_MASK	0x000000ee
+
+struct bcm6345_wdt_priv {
+	void __iomem *regs;
+};
+
+static int bcm6345_wdt_reset(struct udevice *dev)
+{
+	struct bcm6345_wdt_priv *priv = dev_get_priv(dev);
+
+	writel_be(WDT_CTL_START1_MASK, priv->regs + WDT_CTL_REG);
+	writel_be(WDT_CTL_START2_MASK, priv->regs + WDT_CTL_REG);
+
+	return 0;
+}
+
+static int bcm6345_wdt_start(struct udevice *dev, u64 timeout, ulong flags)
+{
+	struct bcm6345_wdt_priv *priv = dev_get_priv(dev);
+
+	if (timeout < WDT_VAL_MIN) {
+		debug("watchdog won't fire with less than 2 ticks\n");
+		timeout = WDT_VAL_MIN;
+	} else if (timeout > WDT_VAL_MAX) {
+		debug("maximum watchdog timeout exceeded\n");
+		timeout = WDT_VAL_MAX;
+	}
+
+	writel_be(timeout, priv->regs + WDT_VAL_REG);
+
+	return bcm6345_wdt_reset(dev);
+}
+
+static int bcm6345_wdt_expire_now(struct udevice *dev, ulong flags)
+{
+	return bcm6345_wdt_start(dev, WDT_VAL_MIN, flags);
+}
+
+static int bcm6345_wdt_stop(struct udevice *dev)
+{
+	struct bcm6345_wdt_priv *priv = dev_get_priv(dev);
+
+	writel_be(WDT_CTL_STOP1_MASK, priv->regs + WDT_CTL_REG);
+	writel_be(WDT_CTL_STOP2_MASK, priv->regs + WDT_CTL_REG);
+
+	return 0;
+}
+
+static const struct wdt_ops bcm6345_wdt_ops = {
+	.expire_now = bcm6345_wdt_expire_now,
+	.reset = bcm6345_wdt_reset,
+	.start = bcm6345_wdt_start,
+	.stop = bcm6345_wdt_stop,
+};
+
+static const struct udevice_id bcm6345_wdt_ids[] = {
+	{ .compatible = "brcm,bcm6345-wdt" },
+	{ /* sentinel */ }
+};
+
+static int bcm6345_wdt_probe(struct udevice *dev)
+{
+	struct bcm6345_wdt_priv *priv = dev_get_priv(dev);
+	fdt_addr_t addr;
+	fdt_size_t size;
+
+	addr = dev_get_addr_size_index(dev, 0, &size);
+	if (addr == FDT_ADDR_T_NONE)
+		return -EINVAL;
+
+	priv->regs = ioremap(addr, size);
+
+	bcm6345_wdt_stop(dev);
+
+	return 0;
+}
+
+U_BOOT_DRIVER(wdt_bcm6345) = {
+	.name = "wdt_bcm6345",
+	.id = UCLASS_WDT,
+	.of_match = bcm6345_wdt_ids,
+	.ops = &bcm6345_wdt_ops,
+	.priv_auto_alloc_size = sizeof(struct bcm6345_wdt_priv),
+	.probe = bcm6345_wdt_probe,
+};
-- 
2.1.4

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

* [U-Boot] [PATCH 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358
  2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
  2017-05-12 23:19 ` [U-Boot] [PATCH 1/8] dm: watchdog: add BCM6345 watchdog driver Álvaro Fernández Rojas
@ 2017-05-12 23:19 ` Álvaro Fernández Rojas
  2017-05-16  0:17   ` Simon Glass
  2017-05-12 23:19 ` [U-Boot] [PATCH 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328 Álvaro Fernández Rojas
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-12 23:19 UTC (permalink / raw)
  To: u-boot

This driver controls the watchdog present on this SoC.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 arch/mips/dts/brcm,bcm6358.dtsi | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm6358.dtsi b/arch/mips/dts/brcm,bcm6358.dtsi
index 0dad998..5d8399c 100644
--- a/arch/mips/dts/brcm,bcm6358.dtsi
+++ b/arch/mips/dts/brcm,bcm6358.dtsi
@@ -87,6 +87,12 @@
 			#reset-cells = <1>;
 		};
 
+		wdt: watchdog at fffe005c {
+			compatible = "brcm,bcm6345-wdt";
+			reg = <0xfffe005c 0xc>;
+			clocks = <&periph_osc>;
+		};
+
 		gpio1: gpio-controller at fffe0080 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0xfffe0080 0x4>, <0xfffe0088 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328
  2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
  2017-05-12 23:19 ` [U-Boot] [PATCH 1/8] dm: watchdog: add BCM6345 watchdog driver Álvaro Fernández Rojas
  2017-05-12 23:19 ` [U-Boot] [PATCH 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358 Álvaro Fernández Rojas
@ 2017-05-12 23:19 ` Álvaro Fernández Rojas
  2017-05-16  0:17   ` Simon Glass
  2017-05-12 23:19 ` [U-Boot] [PATCH 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268 Álvaro Fernández Rojas
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-12 23:19 UTC (permalink / raw)
  To: u-boot

This driver controls the watchdog present on this SoC.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 arch/mips/dts/brcm,bcm6328.dtsi | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm6328.dtsi b/arch/mips/dts/brcm,bcm6328.dtsi
index 3926885..36dd8bc 100644
--- a/arch/mips/dts/brcm,bcm6328.dtsi
+++ b/arch/mips/dts/brcm,bcm6328.dtsi
@@ -78,6 +78,12 @@
 			mask = <0x1>;
 		};
 
+		wdt: watchdog at 1000005c {
+			compatible = "brcm,bcm6345-wdt";
+			reg = <0x1000005c 0xc>;
+			clocks = <&periph_osc>;
+		};
+
 		gpio: gpio-controller at 10000084 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0x10000084 0x4>, <0x1000008c 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268
  2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                   ` (2 preceding siblings ...)
  2017-05-12 23:19 ` [U-Boot] [PATCH 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328 Álvaro Fernández Rojas
@ 2017-05-12 23:19 ` Álvaro Fernández Rojas
  2017-05-16  0:17   ` Simon Glass
  2017-05-12 23:19 ` [U-Boot] [PATCH 5/8] dm: sysreset: add watchdog-reboot driver Álvaro Fernández Rojas
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-12 23:19 UTC (permalink / raw)
  To: u-boot

This driver controls the watchdog present on this SoC.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 arch/mips/dts/brcm,bcm63268.dtsi | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm63268.dtsi b/arch/mips/dts/brcm,bcm63268.dtsi
index b03763f..a3b7e73 100644
--- a/arch/mips/dts/brcm,bcm63268.dtsi
+++ b/arch/mips/dts/brcm,bcm63268.dtsi
@@ -84,6 +84,12 @@
 			#reset-cells = <1>;
 		};
 
+		wdt: watchdog at 1000009c {
+			compatible = "brcm,bcm6345-wdt";
+			reg = <0x1000009c 0xc>;
+			clocks = <&periph_osc>;
+		};
+
 		gpio1: gpio-controller at 100000c0 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0x100000c0 0x4>, <0x100000c8 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH 5/8] dm: sysreset: add watchdog-reboot driver
  2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                   ` (3 preceding siblings ...)
  2017-05-12 23:19 ` [U-Boot] [PATCH 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268 Álvaro Fernández Rojas
@ 2017-05-12 23:19 ` Álvaro Fernández Rojas
  2017-05-16  0:17   ` Simon Glass
  2017-05-12 23:19 ` [U-Boot] [PATCH 6/8] mips: bmips: add wdt-reboot driver support for BCM6358 Álvaro Fernández Rojas
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-12 23:19 UTC (permalink / raw)
  To: u-boot

Add a new sysreset driver that uses the recently added watchdog support.
It performs a full SoC reset by calling wdt_expire_now op.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 drivers/sysreset/Kconfig             |  6 ++++
 drivers/sysreset/Makefile            |  1 +
 drivers/sysreset/sysreset_watchdog.c | 57 ++++++++++++++++++++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 100644 drivers/sysreset/sysreset_watchdog.c

diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
index b2f7464..a6d48e8 100644
--- a/drivers/sysreset/Kconfig
+++ b/drivers/sysreset/Kconfig
@@ -31,4 +31,10 @@ config SYSRESET_SYSCON
 	help
 	  Reboot support for generic SYSCON mapped register reset.
 
+config SYSRESET_WATCHDOG
+	bool "Enable support for watchdog reboot driver"
+	select WDT
+	help
+	  Reboot support for generic watchdog reset.
+
 endmenu
diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
index bd352e7..b683811 100644
--- a/drivers/sysreset/Makefile
+++ b/drivers/sysreset/Makefile
@@ -7,6 +7,7 @@
 obj-$(CONFIG_SYSRESET) += sysreset-uclass.o
 obj-$(CONFIG_SYSRESET_PSCI) += sysreset_psci.o
 obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o
+obj-$(CONFIG_SYSRESET_WATCHDOG) += sysreset_watchdog.o
 
 ifndef CONFIG_SPL_BUILD
 obj-$(CONFIG_ROCKCHIP_RK3036) += sysreset_rk3036.o
diff --git a/drivers/sysreset/sysreset_watchdog.c b/drivers/sysreset/sysreset_watchdog.c
new file mode 100644
index 0000000..caeb039
--- /dev/null
+++ b/drivers/sysreset/sysreset_watchdog.c
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2017 Álvaro Fernández Rojas <noltari@gmail.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <errno.h>
+#include <sysreset.h>
+#include <wdt.h>
+
+struct wdt_reboot_priv {
+	struct udevice *wdt;
+};
+
+static int wdt_reboot_request(struct udevice *dev, enum sysreset_t type)
+{
+	struct wdt_reboot_priv *priv = dev_get_priv(dev);
+
+	wdt_expire_now(priv->wdt, 0);
+
+	return -EINPROGRESS;
+}
+
+static struct sysreset_ops wdt_reboot_ops = {
+	.request = wdt_reboot_request,
+};
+
+int wdt_reboot_probe(struct udevice *dev)
+{
+	struct wdt_reboot_priv *priv = dev_get_priv(dev);
+	int err;
+
+	err = uclass_get_device_by_phandle(UCLASS_WDT, dev,
+					   "wdt", &priv->wdt);
+	if (err) {
+		error("unable to find wdt device\n");
+		return err;
+	}
+
+	return 0;
+}
+
+static const struct udevice_id wdt_reboot_ids[] = {
+	{ .compatible = "wdt-reboot" },
+	{ /* sentinel */ }
+};
+
+U_BOOT_DRIVER(wdt_reboot) = {
+	.name = "wdt_reboot",
+	.id = UCLASS_SYSRESET,
+	.of_match = wdt_reboot_ids,
+	.ops = &wdt_reboot_ops,
+	.priv_auto_alloc_size = sizeof(struct wdt_reboot_priv),
+	.probe = wdt_reboot_probe,
+};
-- 
2.1.4

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

* [U-Boot] [PATCH 6/8] mips: bmips: add wdt-reboot driver support for BCM6358
  2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                   ` (4 preceding siblings ...)
  2017-05-12 23:19 ` [U-Boot] [PATCH 5/8] dm: sysreset: add watchdog-reboot driver Álvaro Fernández Rojas
@ 2017-05-12 23:19 ` Álvaro Fernández Rojas
  2017-05-16  0:17   ` Simon Glass
  2017-05-12 23:19 ` [U-Boot] [PATCH 7/8] mips: bmips: add wdt-reboot driver support for BCM6328 Álvaro Fernández Rojas
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-12 23:19 UTC (permalink / raw)
  To: u-boot

This driver allows rebooting the SoC by calling wdt_expire_now op.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 arch/mips/dts/brcm,bcm6358.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm6358.dtsi b/arch/mips/dts/brcm,bcm6358.dtsi
index 5d8399c..4f63cf8 100644
--- a/arch/mips/dts/brcm,bcm6358.dtsi
+++ b/arch/mips/dts/brcm,bcm6358.dtsi
@@ -93,6 +93,11 @@
 			clocks = <&periph_osc>;
 		};
 
+		wdt-reboot {
+			compatible = "wdt-reboot";
+			wdt = <&wdt>;
+		};
+
 		gpio1: gpio-controller at fffe0080 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0xfffe0080 0x4>, <0xfffe0088 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH 7/8] mips: bmips: add wdt-reboot driver support for BCM6328
  2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                   ` (5 preceding siblings ...)
  2017-05-12 23:19 ` [U-Boot] [PATCH 6/8] mips: bmips: add wdt-reboot driver support for BCM6358 Álvaro Fernández Rojas
@ 2017-05-12 23:19 ` Álvaro Fernández Rojas
  2017-05-16  0:17   ` Simon Glass
  2017-05-12 23:19 ` [U-Boot] [PATCH 8/8] mips: bmips: add wdt-reboot driver support for BCM63268 Álvaro Fernández Rojas
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
  8 siblings, 1 reply; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-12 23:19 UTC (permalink / raw)
  To: u-boot

This driver allows rebooting the SoC by calling wdt_expire_now op.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 arch/mips/dts/brcm,bcm6328.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm6328.dtsi b/arch/mips/dts/brcm,bcm6328.dtsi
index 36dd8bc..a996075 100644
--- a/arch/mips/dts/brcm,bcm6328.dtsi
+++ b/arch/mips/dts/brcm,bcm6328.dtsi
@@ -84,6 +84,11 @@
 			clocks = <&periph_osc>;
 		};
 
+		wdt-reboot {
+			compatible = "wdt-reboot";
+			wdt = <&wdt>;
+		};
+
 		gpio: gpio-controller at 10000084 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0x10000084 0x4>, <0x1000008c 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH 8/8] mips: bmips: add wdt-reboot driver support for BCM63268
  2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                   ` (6 preceding siblings ...)
  2017-05-12 23:19 ` [U-Boot] [PATCH 7/8] mips: bmips: add wdt-reboot driver support for BCM6328 Álvaro Fernández Rojas
@ 2017-05-12 23:19 ` Álvaro Fernández Rojas
  2017-05-16  0:18   ` Simon Glass
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
  8 siblings, 1 reply; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-12 23:19 UTC (permalink / raw)
  To: u-boot

This driver allows rebooting the SoC by calling wdt_expire_now op.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 arch/mips/dts/brcm,bcm63268.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm63268.dtsi b/arch/mips/dts/brcm,bcm63268.dtsi
index a3b7e73..113a96b 100644
--- a/arch/mips/dts/brcm,bcm63268.dtsi
+++ b/arch/mips/dts/brcm,bcm63268.dtsi
@@ -90,6 +90,11 @@
 			clocks = <&periph_osc>;
 		};
 
+		wdt-reboot {
+			compatible = "wdt-reboot";
+			wdt = <&wdt>;
+		};
+
 		gpio1: gpio-controller at 100000c0 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0x100000c0 0x4>, <0x100000c8 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH 1/8] dm: watchdog: add BCM6345 watchdog driver
  2017-05-12 23:19 ` [U-Boot] [PATCH 1/8] dm: watchdog: add BCM6345 watchdog driver Álvaro Fernández Rojas
@ 2017-05-16  0:17   ` Simon Glass
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Glass @ 2017-05-16  0:17 UTC (permalink / raw)
  To: u-boot

On 12 May 2017 at 17:19, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> This driver is a simplified version of linux/drivers/watchdog/bcm63xx_wdt.c
>
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  drivers/watchdog/Kconfig       |   8 +++
>  drivers/watchdog/Makefile      |   1 +
>  drivers/watchdog/bcm6345_wdt.c | 109 +++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 118 insertions(+)
>  create mode 100644 drivers/watchdog/bcm6345_wdt.c
>

Reviewed-by: Simon Glass <sjg@chromium.org>

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

* [U-Boot] [PATCH 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358
  2017-05-12 23:19 ` [U-Boot] [PATCH 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358 Álvaro Fernández Rojas
@ 2017-05-16  0:17   ` Simon Glass
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Glass @ 2017-05-16  0:17 UTC (permalink / raw)
  To: u-boot

On 12 May 2017 at 17:19, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> This driver controls the watchdog present on this SoC.
>
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  arch/mips/dts/brcm,bcm6358.dtsi | 6 ++++++
>  1 file changed, 6 insertions(+)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

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

* [U-Boot] [PATCH 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328
  2017-05-12 23:19 ` [U-Boot] [PATCH 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328 Álvaro Fernández Rojas
@ 2017-05-16  0:17   ` Simon Glass
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Glass @ 2017-05-16  0:17 UTC (permalink / raw)
  To: u-boot

On 12 May 2017 at 17:19, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> This driver controls the watchdog present on this SoC.
>
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  arch/mips/dts/brcm,bcm6328.dtsi | 6 ++++++
>  1 file changed, 6 insertions(+)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

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

* [U-Boot] [PATCH 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268
  2017-05-12 23:19 ` [U-Boot] [PATCH 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268 Álvaro Fernández Rojas
@ 2017-05-16  0:17   ` Simon Glass
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Glass @ 2017-05-16  0:17 UTC (permalink / raw)
  To: u-boot

On 12 May 2017 at 17:19, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> This driver controls the watchdog present on this SoC.
>
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  arch/mips/dts/brcm,bcm63268.dtsi | 6 ++++++
>  1 file changed, 6 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>

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

* [U-Boot] [PATCH 5/8] dm: sysreset: add watchdog-reboot driver
  2017-05-12 23:19 ` [U-Boot] [PATCH 5/8] dm: sysreset: add watchdog-reboot driver Álvaro Fernández Rojas
@ 2017-05-16  0:17   ` Simon Glass
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Glass @ 2017-05-16  0:17 UTC (permalink / raw)
  To: u-boot

On 12 May 2017 at 17:19, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> Add a new sysreset driver that uses the recently added watchdog support.
> It performs a full SoC reset by calling wdt_expire_now op.
>
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  drivers/sysreset/Kconfig             |  6 ++++
>  drivers/sysreset/Makefile            |  1 +
>  drivers/sysreset/sysreset_watchdog.c | 57 ++++++++++++++++++++++++++++++++++++
>  3 files changed, 64 insertions(+)
>  create mode 100644 drivers/sysreset/sysreset_watchdog.c
>

Reviewed-by: Simon Glass <sjg@chromium.org>

Please see below.

> diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
> index b2f7464..a6d48e8 100644
> --- a/drivers/sysreset/Kconfig
> +++ b/drivers/sysreset/Kconfig
> @@ -31,4 +31,10 @@ config SYSRESET_SYSCON
>         help
>           Reboot support for generic SYSCON mapped register reset.
>
> +config SYSRESET_WATCHDOG
> +       bool "Enable support for watchdog reboot driver"
> +       select WDT
> +       help
> +         Reboot support for generic watchdog reset.
> +
>  endmenu
> diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
> index bd352e7..b683811 100644
> --- a/drivers/sysreset/Makefile
> +++ b/drivers/sysreset/Makefile
> @@ -7,6 +7,7 @@
>  obj-$(CONFIG_SYSRESET) += sysreset-uclass.o
>  obj-$(CONFIG_SYSRESET_PSCI) += sysreset_psci.o
>  obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o
> +obj-$(CONFIG_SYSRESET_WATCHDOG) += sysreset_watchdog.o
>
>  ifndef CONFIG_SPL_BUILD
>  obj-$(CONFIG_ROCKCHIP_RK3036) += sysreset_rk3036.o
> diff --git a/drivers/sysreset/sysreset_watchdog.c b/drivers/sysreset/sysreset_watchdog.c
> new file mode 100644
> index 0000000..caeb039
> --- /dev/null
> +++ b/drivers/sysreset/sysreset_watchdog.c
> @@ -0,0 +1,57 @@
> +/*
> + * Copyright (C) 2017 Álvaro Fernández Rojas <noltari@gmail.com>
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <errno.h>
> +#include <sysreset.h>
> +#include <wdt.h>
> +
> +struct wdt_reboot_priv {
> +       struct udevice *wdt;
> +};
> +
> +static int wdt_reboot_request(struct udevice *dev, enum sysreset_t type)
> +{
> +       struct wdt_reboot_priv *priv = dev_get_priv(dev);
> +
> +       wdt_expire_now(priv->wdt, 0);

Missing error check?

> +
> +       return -EINPROGRESS;
> +}
> +
> +static struct sysreset_ops wdt_reboot_ops = {
> +       .request = wdt_reboot_request,
> +};
> +
> +int wdt_reboot_probe(struct udevice *dev)
> +{
> +       struct wdt_reboot_priv *priv = dev_get_priv(dev);
> +       int err;
> +
> +       err = uclass_get_device_by_phandle(UCLASS_WDT, dev,
> +                                          "wdt", &priv->wdt);
> +       if (err) {
> +               error("unable to find wdt device\n");
> +               return err;
> +       }
> +
> +       return 0;
> +}
> +
> +static const struct udevice_id wdt_reboot_ids[] = {
> +       { .compatible = "wdt-reboot" },
> +       { /* sentinel */ }
> +};
> +
> +U_BOOT_DRIVER(wdt_reboot) = {
> +       .name = "wdt_reboot",
> +       .id = UCLASS_SYSRESET,
> +       .of_match = wdt_reboot_ids,
> +       .ops = &wdt_reboot_ops,
> +       .priv_auto_alloc_size = sizeof(struct wdt_reboot_priv),
> +       .probe = wdt_reboot_probe,
> +};
> --
> 2.1.4
>

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

* [U-Boot] [PATCH 6/8] mips: bmips: add wdt-reboot driver support for BCM6358
  2017-05-12 23:19 ` [U-Boot] [PATCH 6/8] mips: bmips: add wdt-reboot driver support for BCM6358 Álvaro Fernández Rojas
@ 2017-05-16  0:17   ` Simon Glass
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Glass @ 2017-05-16  0:17 UTC (permalink / raw)
  To: u-boot

On 12 May 2017 at 17:19, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> This driver allows rebooting the SoC by calling wdt_expire_now op.
>
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  arch/mips/dts/brcm,bcm6358.dtsi | 5 +++++
>  1 file changed, 5 insertions(+)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

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

* [U-Boot] [PATCH 7/8] mips: bmips: add wdt-reboot driver support for BCM6328
  2017-05-12 23:19 ` [U-Boot] [PATCH 7/8] mips: bmips: add wdt-reboot driver support for BCM6328 Álvaro Fernández Rojas
@ 2017-05-16  0:17   ` Simon Glass
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Glass @ 2017-05-16  0:17 UTC (permalink / raw)
  To: u-boot

On 12 May 2017 at 17:19, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> This driver allows rebooting the SoC by calling wdt_expire_now op.
>
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  arch/mips/dts/brcm,bcm6328.dtsi | 5 +++++
>  1 file changed, 5 insertions(+)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

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

* [U-Boot] [PATCH 8/8] mips: bmips: add wdt-reboot driver support for BCM63268
  2017-05-12 23:19 ` [U-Boot] [PATCH 8/8] mips: bmips: add wdt-reboot driver support for BCM63268 Álvaro Fernández Rojas
@ 2017-05-16  0:18   ` Simon Glass
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Glass @ 2017-05-16  0:18 UTC (permalink / raw)
  To: u-boot

On 12 May 2017 at 17:19, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> This driver allows rebooting the SoC by calling wdt_expire_now op.
>
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  arch/mips/dts/brcm,bcm63268.dtsi | 5 +++++
>  1 file changed, 5 insertions(+)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

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

* [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support
  2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                   ` (7 preceding siblings ...)
  2017-05-12 23:19 ` [U-Boot] [PATCH 8/8] mips: bmips: add wdt-reboot driver support for BCM63268 Álvaro Fernández Rojas
@ 2017-05-16 16:29 ` Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 1/8] dm: watchdog: add BCM6345 watchdog driver Álvaro Fernández Rojas
                     ` (8 more replies)
  8 siblings, 9 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-16 16:29 UTC (permalink / raw)
  To: u-boot

Adds support for Broadcom MIPS BCM6345 watchdog controller.
Also adds a generic watchdog sysreset driver to allow rebooting by expiring
the SoC watchdog.
This is needed for some specific Broadcom MIPS SoCs where pll_conf if bugged
and it can't be used to perform SoC reboots, like in BCM6348 (a1 rev).

v2: add changes requested by Simon Glass.

Álvaro Fernández Rojas (8):
  dm: watchdog: add BCM6345 watchdog driver
  mips: bmips: add bcm6345-wdt driver support for BCM6358
  mips: bmips: add bcm6345-wdt driver support for BCM6328
  mips: bmips: add bcm6345-wdt driver support for BCM63268
  dm: sysreset: add watchdog-reboot driver
  mips: bmips: add wdt-reboot driver support for BCM6358
  mips: bmips: add wdt-reboot driver support for BCM6328
  mips: bmips: add wdt-reboot driver support for BCM63268

 arch/mips/dts/brcm,bcm63268.dtsi     |  11 ++++
 arch/mips/dts/brcm,bcm6328.dtsi      |  11 ++++
 arch/mips/dts/brcm,bcm6358.dtsi      |  11 ++++
 drivers/sysreset/Kconfig             |   6 ++
 drivers/sysreset/Makefile            |   1 +
 drivers/sysreset/sysreset_watchdog.c |  60 +++++++++++++++++++
 drivers/watchdog/Kconfig             |   8 +++
 drivers/watchdog/Makefile            |   1 +
 drivers/watchdog/bcm6345_wdt.c       | 110 +++++++++++++++++++++++++++++++++++
 9 files changed, 219 insertions(+)
 create mode 100644 drivers/sysreset/sysreset_watchdog.c
 create mode 100644 drivers/watchdog/bcm6345_wdt.c

-- 
2.1.4

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

* [U-Boot] [PATCH v2 1/8] dm: watchdog: add BCM6345 watchdog driver
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
@ 2017-05-16 16:29   ` Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358 Álvaro Fernández Rojas
                     ` (7 subsequent siblings)
  8 siblings, 0 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-16 16:29 UTC (permalink / raw)
  To: u-boot

This driver is a simplified version of linux/drivers/watchdog/bcm63xx_wdt.c

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 v2: no changes.

 drivers/watchdog/Kconfig       |   8 +++
 drivers/watchdog/Makefile      |   1 +
 drivers/watchdog/bcm6345_wdt.c | 110 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 119 insertions(+)
 create mode 100644 drivers/watchdog/bcm6345_wdt.c

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 22a7c4f..b911233 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -54,4 +54,12 @@ config WDT_ASPEED
 	  It currently does not support Boot Flash Addressing Mode Detection or
 	  Second Boot.
 
+config WDT_BCM6345
+	bool "BCM6345 watchdog timer support"
+	depends on WDT && ARCH_BMIPS
+	help
+	  Select this to enable watchdog timer for BCM6345 SoCs.
+	  The watchdog timer is stopped when initialized.
+	  It performs full SoC reset.
+
 endmenu
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index 8378601..4b19e4c 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -18,4 +18,5 @@ obj-$(CONFIG_ULP_WATCHDOG) += ulp_wdog.o
 obj-$(CONFIG_WDT) += wdt-uclass.o
 obj-$(CONFIG_WDT_SANDBOX) += sandbox_wdt.o
 obj-$(CONFIG_WDT_ASPEED) += ast_wdt.o
+obj-$(CONFIG_WDT_BCM6345) += bcm6345_wdt.o
 obj-$(CONFIG_BCM2835_WDT)       += bcm2835_wdt.o
diff --git a/drivers/watchdog/bcm6345_wdt.c b/drivers/watchdog/bcm6345_wdt.c
new file mode 100644
index 0000000..c6b02ec
--- /dev/null
+++ b/drivers/watchdog/bcm6345_wdt.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2017 Álvaro Fernández Rojas <noltari@gmail.com>
+ *
+ * Derived from linux/drivers/watchdog/bcm63xx_wdt.c:
+ *	Copyright (C) 2007 Miguel Gaio <miguel.gaio@efixo.com>
+ *	Copyright (C) 2008 Florian Fainelli <florian@openwrt.org>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <wdt.h>
+#include <asm/io.h>
+
+/* WDT Value register */
+#define WDT_VAL_REG		0x0
+#define WDT_VAL_MIN		0x00000002
+#define WDT_VAL_MAX		0xfffffffe
+
+/* WDT Control register */
+#define WDT_CTL_REG		0x4
+#define WDT_CTL_START1_MASK	0x0000ff00
+#define WDT_CTL_START2_MASK	0x000000ff
+#define WDT_CTL_STOP1_MASK	0x0000ee00
+#define WDT_CTL_STOP2_MASK	0x000000ee
+
+struct bcm6345_wdt_priv {
+	void __iomem *regs;
+};
+
+static int bcm6345_wdt_reset(struct udevice *dev)
+{
+	struct bcm6345_wdt_priv *priv = dev_get_priv(dev);
+
+	writel_be(WDT_CTL_START1_MASK, priv->regs + WDT_CTL_REG);
+	writel_be(WDT_CTL_START2_MASK, priv->regs + WDT_CTL_REG);
+
+	return 0;
+}
+
+static int bcm6345_wdt_start(struct udevice *dev, u64 timeout, ulong flags)
+{
+	struct bcm6345_wdt_priv *priv = dev_get_priv(dev);
+
+	if (timeout < WDT_VAL_MIN) {
+		debug("watchdog won't fire with less than 2 ticks\n");
+		timeout = WDT_VAL_MIN;
+	} else if (timeout > WDT_VAL_MAX) {
+		debug("maximum watchdog timeout exceeded\n");
+		timeout = WDT_VAL_MAX;
+	}
+
+	writel_be(timeout, priv->regs + WDT_VAL_REG);
+
+	return bcm6345_wdt_reset(dev);
+}
+
+static int bcm6345_wdt_expire_now(struct udevice *dev, ulong flags)
+{
+	return bcm6345_wdt_start(dev, WDT_VAL_MIN, flags);
+}
+
+static int bcm6345_wdt_stop(struct udevice *dev)
+{
+	struct bcm6345_wdt_priv *priv = dev_get_priv(dev);
+
+	writel_be(WDT_CTL_STOP1_MASK, priv->regs + WDT_CTL_REG);
+	writel_be(WDT_CTL_STOP2_MASK, priv->regs + WDT_CTL_REG);
+
+	return 0;
+}
+
+static const struct wdt_ops bcm6345_wdt_ops = {
+	.expire_now = bcm6345_wdt_expire_now,
+	.reset = bcm6345_wdt_reset,
+	.start = bcm6345_wdt_start,
+	.stop = bcm6345_wdt_stop,
+};
+
+static const struct udevice_id bcm6345_wdt_ids[] = {
+	{ .compatible = "brcm,bcm6345-wdt" },
+	{ /* sentinel */ }
+};
+
+static int bcm6345_wdt_probe(struct udevice *dev)
+{
+	struct bcm6345_wdt_priv *priv = dev_get_priv(dev);
+	fdt_addr_t addr;
+	fdt_size_t size;
+
+	addr = dev_get_addr_size_index(dev, 0, &size);
+	if (addr == FDT_ADDR_T_NONE)
+		return -EINVAL;
+
+	priv->regs = ioremap(addr, size);
+
+	bcm6345_wdt_stop(dev);
+
+	return 0;
+}
+
+U_BOOT_DRIVER(wdt_bcm6345) = {
+	.name = "wdt_bcm6345",
+	.id = UCLASS_WDT,
+	.of_match = bcm6345_wdt_ids,
+	.ops = &bcm6345_wdt_ops,
+	.priv_auto_alloc_size = sizeof(struct bcm6345_wdt_priv),
+	.probe = bcm6345_wdt_probe,
+};
-- 
2.1.4

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

* [U-Boot] [PATCH v2 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 1/8] dm: watchdog: add BCM6345 watchdog driver Álvaro Fernández Rojas
@ 2017-05-16 16:29   ` Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328 Álvaro Fernández Rojas
                     ` (6 subsequent siblings)
  8 siblings, 0 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-16 16:29 UTC (permalink / raw)
  To: u-boot

This driver controls the watchdog present on this SoC.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 v2: no changes.

 arch/mips/dts/brcm,bcm6358.dtsi | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm6358.dtsi b/arch/mips/dts/brcm,bcm6358.dtsi
index 0dad998..5d8399c 100644
--- a/arch/mips/dts/brcm,bcm6358.dtsi
+++ b/arch/mips/dts/brcm,bcm6358.dtsi
@@ -87,6 +87,12 @@
 			#reset-cells = <1>;
 		};
 
+		wdt: watchdog at fffe005c {
+			compatible = "brcm,bcm6345-wdt";
+			reg = <0xfffe005c 0xc>;
+			clocks = <&periph_osc>;
+		};
+
 		gpio1: gpio-controller at fffe0080 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0xfffe0080 0x4>, <0xfffe0088 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH v2 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 1/8] dm: watchdog: add BCM6345 watchdog driver Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358 Álvaro Fernández Rojas
@ 2017-05-16 16:29   ` Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268 Álvaro Fernández Rojas
                     ` (5 subsequent siblings)
  8 siblings, 0 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-16 16:29 UTC (permalink / raw)
  To: u-boot

This driver controls the watchdog present on this SoC.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 v2: no changes.

 arch/mips/dts/brcm,bcm6328.dtsi | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm6328.dtsi b/arch/mips/dts/brcm,bcm6328.dtsi
index 3926885..36dd8bc 100644
--- a/arch/mips/dts/brcm,bcm6328.dtsi
+++ b/arch/mips/dts/brcm,bcm6328.dtsi
@@ -78,6 +78,12 @@
 			mask = <0x1>;
 		};
 
+		wdt: watchdog at 1000005c {
+			compatible = "brcm,bcm6345-wdt";
+			reg = <0x1000005c 0xc>;
+			clocks = <&periph_osc>;
+		};
+
 		gpio: gpio-controller at 10000084 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0x10000084 0x4>, <0x1000008c 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH v2 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                     ` (2 preceding siblings ...)
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328 Álvaro Fernández Rojas
@ 2017-05-16 16:29   ` Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 5/8] dm: sysreset: add watchdog-reboot driver Álvaro Fernández Rojas
                     ` (4 subsequent siblings)
  8 siblings, 0 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-16 16:29 UTC (permalink / raw)
  To: u-boot

This driver controls the watchdog present on this SoC.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 v2: no changes.

 arch/mips/dts/brcm,bcm63268.dtsi | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm63268.dtsi b/arch/mips/dts/brcm,bcm63268.dtsi
index b03763f..a3b7e73 100644
--- a/arch/mips/dts/brcm,bcm63268.dtsi
+++ b/arch/mips/dts/brcm,bcm63268.dtsi
@@ -84,6 +84,12 @@
 			#reset-cells = <1>;
 		};
 
+		wdt: watchdog at 1000009c {
+			compatible = "brcm,bcm6345-wdt";
+			reg = <0x1000009c 0xc>;
+			clocks = <&periph_osc>;
+		};
+
 		gpio1: gpio-controller at 100000c0 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0x100000c0 0x4>, <0x100000c8 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH v2 5/8] dm: sysreset: add watchdog-reboot driver
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                     ` (3 preceding siblings ...)
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268 Álvaro Fernández Rojas
@ 2017-05-16 16:29   ` Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 6/8] mips: bmips: add wdt-reboot driver support for BCM6358 Álvaro Fernández Rojas
                     ` (3 subsequent siblings)
  8 siblings, 0 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-16 16:29 UTC (permalink / raw)
  To: u-boot

Add a new sysreset driver that uses the recently added watchdog support.
It performs a full SoC reset by calling wdt_expire_now op.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 v2: introduce changes requested by Simon Glass:
  - Check wdt_expire_now() return for errors.

 drivers/sysreset/Kconfig             |  6 ++++
 drivers/sysreset/Makefile            |  1 +
 drivers/sysreset/sysreset_watchdog.c | 60 ++++++++++++++++++++++++++++++++++++
 3 files changed, 67 insertions(+)
 create mode 100644 drivers/sysreset/sysreset_watchdog.c

diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
index b2f7464..a6d48e8 100644
--- a/drivers/sysreset/Kconfig
+++ b/drivers/sysreset/Kconfig
@@ -31,4 +31,10 @@ config SYSRESET_SYSCON
 	help
 	  Reboot support for generic SYSCON mapped register reset.
 
+config SYSRESET_WATCHDOG
+	bool "Enable support for watchdog reboot driver"
+	select WDT
+	help
+	  Reboot support for generic watchdog reset.
+
 endmenu
diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
index bd352e7..b683811 100644
--- a/drivers/sysreset/Makefile
+++ b/drivers/sysreset/Makefile
@@ -7,6 +7,7 @@
 obj-$(CONFIG_SYSRESET) += sysreset-uclass.o
 obj-$(CONFIG_SYSRESET_PSCI) += sysreset_psci.o
 obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o
+obj-$(CONFIG_SYSRESET_WATCHDOG) += sysreset_watchdog.o
 
 ifndef CONFIG_SPL_BUILD
 obj-$(CONFIG_ROCKCHIP_RK3036) += sysreset_rk3036.o
diff --git a/drivers/sysreset/sysreset_watchdog.c b/drivers/sysreset/sysreset_watchdog.c
new file mode 100644
index 0000000..304ed05
--- /dev/null
+++ b/drivers/sysreset/sysreset_watchdog.c
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 Álvaro Fernández Rojas <noltari@gmail.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <errno.h>
+#include <sysreset.h>
+#include <wdt.h>
+
+struct wdt_reboot_priv {
+	struct udevice *wdt;
+};
+
+static int wdt_reboot_request(struct udevice *dev, enum sysreset_t type)
+{
+	struct wdt_reboot_priv *priv = dev_get_priv(dev);
+	int ret;
+
+	ret = wdt_expire_now(priv->wdt, 0);
+	if (ret)
+		return ret;
+
+	return -EINPROGRESS;
+}
+
+static struct sysreset_ops wdt_reboot_ops = {
+	.request = wdt_reboot_request,
+};
+
+int wdt_reboot_probe(struct udevice *dev)
+{
+	struct wdt_reboot_priv *priv = dev_get_priv(dev);
+	int err;
+
+	err = uclass_get_device_by_phandle(UCLASS_WDT, dev,
+					   "wdt", &priv->wdt);
+	if (err) {
+		error("unable to find wdt device\n");
+		return err;
+	}
+
+	return 0;
+}
+
+static const struct udevice_id wdt_reboot_ids[] = {
+	{ .compatible = "wdt-reboot" },
+	{ /* sentinel */ }
+};
+
+U_BOOT_DRIVER(wdt_reboot) = {
+	.name = "wdt_reboot",
+	.id = UCLASS_SYSRESET,
+	.of_match = wdt_reboot_ids,
+	.ops = &wdt_reboot_ops,
+	.priv_auto_alloc_size = sizeof(struct wdt_reboot_priv),
+	.probe = wdt_reboot_probe,
+};
-- 
2.1.4

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

* [U-Boot] [PATCH v2 6/8] mips: bmips: add wdt-reboot driver support for BCM6358
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                     ` (4 preceding siblings ...)
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 5/8] dm: sysreset: add watchdog-reboot driver Álvaro Fernández Rojas
@ 2017-05-16 16:29   ` Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 7/8] mips: bmips: add wdt-reboot driver support for BCM6328 Álvaro Fernández Rojas
                     ` (2 subsequent siblings)
  8 siblings, 0 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-16 16:29 UTC (permalink / raw)
  To: u-boot

This driver allows rebooting the SoC by calling wdt_expire_now op.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 v2: no changes.

 arch/mips/dts/brcm,bcm6358.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm6358.dtsi b/arch/mips/dts/brcm,bcm6358.dtsi
index 5d8399c..4f63cf8 100644
--- a/arch/mips/dts/brcm,bcm6358.dtsi
+++ b/arch/mips/dts/brcm,bcm6358.dtsi
@@ -93,6 +93,11 @@
 			clocks = <&periph_osc>;
 		};
 
+		wdt-reboot {
+			compatible = "wdt-reboot";
+			wdt = <&wdt>;
+		};
+
 		gpio1: gpio-controller at fffe0080 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0xfffe0080 0x4>, <0xfffe0088 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH v2 7/8] mips: bmips: add wdt-reboot driver support for BCM6328
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                     ` (5 preceding siblings ...)
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 6/8] mips: bmips: add wdt-reboot driver support for BCM6358 Álvaro Fernández Rojas
@ 2017-05-16 16:29   ` Álvaro Fernández Rojas
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 8/8] mips: bmips: add wdt-reboot driver support for BCM63268 Álvaro Fernández Rojas
  2017-05-20 16:09   ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Daniel Schwierzeck
  8 siblings, 0 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-16 16:29 UTC (permalink / raw)
  To: u-boot

This driver allows rebooting the SoC by calling wdt_expire_now op.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 v2: no changes.

 arch/mips/dts/brcm,bcm6328.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm6328.dtsi b/arch/mips/dts/brcm,bcm6328.dtsi
index 36dd8bc..a996075 100644
--- a/arch/mips/dts/brcm,bcm6328.dtsi
+++ b/arch/mips/dts/brcm,bcm6328.dtsi
@@ -84,6 +84,11 @@
 			clocks = <&periph_osc>;
 		};
 
+		wdt-reboot {
+			compatible = "wdt-reboot";
+			wdt = <&wdt>;
+		};
+
 		gpio: gpio-controller at 10000084 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0x10000084 0x4>, <0x1000008c 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH v2 8/8] mips: bmips: add wdt-reboot driver support for BCM63268
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                     ` (6 preceding siblings ...)
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 7/8] mips: bmips: add wdt-reboot driver support for BCM6328 Álvaro Fernández Rojas
@ 2017-05-16 16:29   ` Álvaro Fernández Rojas
  2017-05-20 16:09   ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Daniel Schwierzeck
  8 siblings, 0 replies; 27+ messages in thread
From: Álvaro Fernández Rojas @ 2017-05-16 16:29 UTC (permalink / raw)
  To: u-boot

This driver allows rebooting the SoC by calling wdt_expire_now op.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 v2: no changes.

 arch/mips/dts/brcm,bcm63268.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/mips/dts/brcm,bcm63268.dtsi b/arch/mips/dts/brcm,bcm63268.dtsi
index a3b7e73..113a96b 100644
--- a/arch/mips/dts/brcm,bcm63268.dtsi
+++ b/arch/mips/dts/brcm,bcm63268.dtsi
@@ -90,6 +90,11 @@
 			clocks = <&periph_osc>;
 		};
 
+		wdt-reboot {
+			compatible = "wdt-reboot";
+			wdt = <&wdt>;
+		};
+
 		gpio1: gpio-controller at 100000c0 {
 			compatible = "brcm,bcm6345-gpio";
 			reg = <0x100000c0 0x4>, <0x100000c8 0x4>;
-- 
2.1.4

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

* [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support
  2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
                     ` (7 preceding siblings ...)
  2017-05-16 16:29   ` [U-Boot] [PATCH v2 8/8] mips: bmips: add wdt-reboot driver support for BCM63268 Álvaro Fernández Rojas
@ 2017-05-20 16:09   ` Daniel Schwierzeck
  8 siblings, 0 replies; 27+ messages in thread
From: Daniel Schwierzeck @ 2017-05-20 16:09 UTC (permalink / raw)
  To: u-boot



Am 16.05.2017 um 18:29 schrieb Álvaro Fernández Rojas:
> Adds support for Broadcom MIPS BCM6345 watchdog controller.
> Also adds a generic watchdog sysreset driver to allow rebooting by expiring
> the SoC watchdog.
> This is needed for some specific Broadcom MIPS SoCs where pll_conf if bugged
> and it can't be used to perform SoC reboots, like in BCM6348 (a1 rev).
> 
> v2: add changes requested by Simon Glass.
> 
> Álvaro Fernández Rojas (8):
>   dm: watchdog: add BCM6345 watchdog driver
>   mips: bmips: add bcm6345-wdt driver support for BCM6358
>   mips: bmips: add bcm6345-wdt driver support for BCM6328
>   mips: bmips: add bcm6345-wdt driver support for BCM63268
>   dm: sysreset: add watchdog-reboot driver
>   mips: bmips: add wdt-reboot driver support for BCM6358
>   mips: bmips: add wdt-reboot driver support for BCM6328
>   mips: bmips: add wdt-reboot driver support for BCM63268
> 
>  arch/mips/dts/brcm,bcm63268.dtsi     |  11 ++++
>  arch/mips/dts/brcm,bcm6328.dtsi      |  11 ++++
>  arch/mips/dts/brcm,bcm6358.dtsi      |  11 ++++
>  drivers/sysreset/Kconfig             |   6 ++
>  drivers/sysreset/Makefile            |   1 +
>  drivers/sysreset/sysreset_watchdog.c |  60 +++++++++++++++++++
>  drivers/watchdog/Kconfig             |   8 +++
>  drivers/watchdog/Makefile            |   1 +
>  drivers/watchdog/bcm6345_wdt.c       | 110 +++++++++++++++++++++++++++++++++++
>  9 files changed, 219 insertions(+)
>  create mode 100644 drivers/sysreset/sysreset_watchdog.c
>  create mode 100644 drivers/watchdog/bcm6345_wdt.c
> 

series applied to u-boot-mips, thanks.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170520/682351dc/attachment.sig>

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

end of thread, other threads:[~2017-05-20 16:09 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-12 23:19 [U-Boot] [PATCH 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
2017-05-12 23:19 ` [U-Boot] [PATCH 1/8] dm: watchdog: add BCM6345 watchdog driver Álvaro Fernández Rojas
2017-05-16  0:17   ` Simon Glass
2017-05-12 23:19 ` [U-Boot] [PATCH 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358 Álvaro Fernández Rojas
2017-05-16  0:17   ` Simon Glass
2017-05-12 23:19 ` [U-Boot] [PATCH 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328 Álvaro Fernández Rojas
2017-05-16  0:17   ` Simon Glass
2017-05-12 23:19 ` [U-Boot] [PATCH 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268 Álvaro Fernández Rojas
2017-05-16  0:17   ` Simon Glass
2017-05-12 23:19 ` [U-Boot] [PATCH 5/8] dm: sysreset: add watchdog-reboot driver Álvaro Fernández Rojas
2017-05-16  0:17   ` Simon Glass
2017-05-12 23:19 ` [U-Boot] [PATCH 6/8] mips: bmips: add wdt-reboot driver support for BCM6358 Álvaro Fernández Rojas
2017-05-16  0:17   ` Simon Glass
2017-05-12 23:19 ` [U-Boot] [PATCH 7/8] mips: bmips: add wdt-reboot driver support for BCM6328 Álvaro Fernández Rojas
2017-05-16  0:17   ` Simon Glass
2017-05-12 23:19 ` [U-Boot] [PATCH 8/8] mips: bmips: add wdt-reboot driver support for BCM63268 Álvaro Fernández Rojas
2017-05-16  0:18   ` Simon Glass
2017-05-16 16:29 ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Álvaro Fernández Rojas
2017-05-16 16:29   ` [U-Boot] [PATCH v2 1/8] dm: watchdog: add BCM6345 watchdog driver Álvaro Fernández Rojas
2017-05-16 16:29   ` [U-Boot] [PATCH v2 2/8] mips: bmips: add bcm6345-wdt driver support for BCM6358 Álvaro Fernández Rojas
2017-05-16 16:29   ` [U-Boot] [PATCH v2 3/8] mips: bmips: add bcm6345-wdt driver support for BCM6328 Álvaro Fernández Rojas
2017-05-16 16:29   ` [U-Boot] [PATCH v2 4/8] mips: bmips: add bcm6345-wdt driver support for BCM63268 Álvaro Fernández Rojas
2017-05-16 16:29   ` [U-Boot] [PATCH v2 5/8] dm: sysreset: add watchdog-reboot driver Álvaro Fernández Rojas
2017-05-16 16:29   ` [U-Boot] [PATCH v2 6/8] mips: bmips: add wdt-reboot driver support for BCM6358 Álvaro Fernández Rojas
2017-05-16 16:29   ` [U-Boot] [PATCH v2 7/8] mips: bmips: add wdt-reboot driver support for BCM6328 Álvaro Fernández Rojas
2017-05-16 16:29   ` [U-Boot] [PATCH v2 8/8] mips: bmips: add wdt-reboot driver support for BCM63268 Álvaro Fernández Rojas
2017-05-20 16:09   ` [U-Boot] [PATCH v2 0/8] mips: bmips: add bcm6345 watchdog support Daniel Schwierzeck

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.