Linux Watchdog driver development
 help / color / mirror / Atom feed
* [PATCH V2] watchdog: add MT7621 watchdog support
@ 2014-10-13 12:15 John Crispin
  0 siblings, 0 replies; 9+ messages in thread
From: John Crispin @ 2014-10-13 12:15 UTC (permalink / raw)
  To: Wim Van Sebroeck; +Cc: linux-watchdog, linux-mips

This patch adds support for the watchdog core found on newer mediatek/ralink
Wifi SoCs.

Signed-off-by: John Crispin <blogic@openwrt.org>
---
Changes since V1

* fix the comments identifying the driver
* add a comment to the code setting the prescaler
* use watchdog_init_timeout
* use devm_reset_control_get
* get rid of the miscdev code

 .../devicetree/bindings/watchdog/mt7621-wdt.txt    |   12 ++
 drivers/watchdog/Kconfig                           |    7 +
 drivers/watchdog/Makefile                          |    1 +
 drivers/watchdog/mt7621_wdt.c                      |  186 ++++++++++++++++++++
 4 files changed, 206 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
 create mode 100644 drivers/watchdog/mt7621_wdt.c

diff --git a/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
new file mode 100644
index 0000000..c15ef0e
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
@@ -0,0 +1,12 @@
+Ralink Watchdog Timers
+
+Required properties:
+- compatible: must be "mediatek,mt7621-wdt"
+- reg: physical base address of the controller and length of the register range
+
+Example:
+
+	watchdog@100 {
+		compatible = "mediatek,mt7621-wdt";
+		reg = <0x100 0x10>;
+	};
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index f57312f..9ee0d32 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1186,6 +1186,13 @@ config RALINK_WDT
 	help
 	  Hardware driver for the Ralink SoC Watchdog Timer.
 
+config MT7621_WDT
+	tristate "Mediatek SoC watchdog"
+	select WATCHDOG_CORE
+	depends on SOC_MT7620 || SOC_MT7621
+	help
+	  Hardware driver for the Mediatek/Ralink SoC Watchdog Timer.
+
 # PARISC Architecture
 
 # POWERPC Architecture
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index 468c320..5b2031e 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -138,6 +138,7 @@ obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o
 octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o
 obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
 obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o
+obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
 
 # PARISC Architecture
 
diff --git a/drivers/watchdog/mt7621_wdt.c b/drivers/watchdog/mt7621_wdt.c
new file mode 100644
index 0000000..0cb9e0b
--- /dev/null
+++ b/drivers/watchdog/mt7621_wdt.c
@@ -0,0 +1,186 @@
+/*
+ * Ralink MT7621/MT7628 built-in hardware watchdog timer
+ *
+ * Copyright (C) 2014 John Crispin <blogic@openwrt.org>
+ *
+ * This driver was based on: drivers/watchdog/rt2880_wdt.c
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <linux/clk.h>
+#include <linux/reset.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/watchdog.h>
+#include <linux/moduleparam.h>
+#include <linux/platform_device.h>
+
+#include <asm/mach-ralink/ralink_regs.h>
+
+#define SYSC_RSTSTAT			0x38
+#define WDT_RST_CAUSE			BIT(1)
+
+#define RALINK_WDT_TIMEOUT		30
+
+#define TIMER_REG_TMRSTAT		0x00
+#define TIMER_REG_TMR1LOAD		0x24
+#define TIMER_REG_TMR1CTL		0x20
+
+#define TMR1CTL_ENABLE			BIT(7)
+#define TMR1CTL_RESTART			BIT(9)
+#define TMR1CTL_PRESCALE_SHIFT		16
+
+static void __iomem *mt7621_wdt_base;
+static struct reset_control *mt7621_wdt_reset;
+
+static bool nowayout = WATCHDOG_NOWAYOUT;
+module_param(nowayout, bool, 0);
+MODULE_PARM_DESC(nowayout,
+		 "Watchdog cannot be stopped once started (default="
+		 __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
+
+static inline void rt_wdt_w32(unsigned reg, u32 val)
+{
+	iowrite32(val, mt7621_wdt_base + reg);
+}
+
+static inline u32 rt_wdt_r32(unsigned reg)
+{
+	return ioread32(mt7621_wdt_base + reg);
+}
+
+static int mt7621_wdt_ping(struct watchdog_device *w)
+{
+	rt_wdt_w32(TIMER_REG_TMRSTAT, TMR1CTL_RESTART);
+
+	return 0;
+}
+
+static int mt7621_wdt_set_timeout(struct watchdog_device *w, unsigned int t)
+{
+	w->timeout = t;
+	rt_wdt_w32(TIMER_REG_TMR1LOAD, t * 1000);
+	mt7621_wdt_ping(w);
+
+	return 0;
+}
+
+static int mt7621_wdt_start(struct watchdog_device *w)
+{
+	u32 t;
+
+	/* set the prescaler to 1ms == 1000us */
+	rt_wdt_w32(TIMER_REG_TMR1CTL, 1000 << TMR1CTL_PRESCALE_SHIFT);
+
+	mt7621_wdt_set_timeout(w, w->timeout);
+
+	t = rt_wdt_r32(TIMER_REG_TMR1CTL);
+	t |= TMR1CTL_ENABLE;
+	rt_wdt_w32(TIMER_REG_TMR1CTL, t);
+
+	return 0;
+}
+
+static int mt7621_wdt_stop(struct watchdog_device *w)
+{
+	u32 t;
+
+	mt7621_wdt_ping(w);
+
+	t = rt_wdt_r32(TIMER_REG_TMR1CTL);
+	t &= ~TMR1CTL_ENABLE;
+	rt_wdt_w32(TIMER_REG_TMR1CTL, t);
+
+	return 0;
+}
+
+static int mt7621_wdt_bootcause(void)
+{
+	if (rt_sysc_r32(SYSC_RSTSTAT) & WDT_RST_CAUSE)
+		return WDIOF_CARDRESET;
+
+	return 0;
+}
+
+static struct watchdog_info mt7621_wdt_info = {
+	.identity = "Mediatek Watchdog",
+	.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
+};
+
+static struct watchdog_ops mt7621_wdt_ops = {
+	.owner = THIS_MODULE,
+	.start = mt7621_wdt_start,
+	.stop = mt7621_wdt_stop,
+	.ping = mt7621_wdt_ping,
+	.set_timeout = mt7621_wdt_set_timeout,
+};
+
+static struct watchdog_device mt7621_wdt_dev = {
+	.info = &mt7621_wdt_info,
+	.ops = &mt7621_wdt_ops,
+	.min_timeout = 1,
+	.max_timeout = 0xfffful / 1000,
+};
+
+static int mt7621_wdt_probe(struct platform_device *pdev)
+{
+	struct resource *res;
+	int ret;
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	mt7621_wdt_base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(mt7621_wdt_base))
+		return PTR_ERR(mt7621_wdt_base);
+
+	mt7621_wdt_reset = devm_reset_control_get(&pdev->dev, NULL);
+	if (!IS_ERR(mt7621_wdt_reset))
+		reset_control_deassert(mt7621_wdt_reset);
+
+	mt7621_wdt_dev.dev = &pdev->dev;
+	mt7621_wdt_dev.bootstatus = mt7621_wdt_bootcause();
+
+	watchdog_init_timeout(&mt7621_wdt_dev, mt7621_wdt_dev.max_timeout, &pdev->dev);
+	watchdog_set_nowayout(&mt7621_wdt_dev, nowayout);
+
+	ret = watchdog_register_device(&mt7621_wdt_dev);
+
+	return 0;
+}
+
+static int mt7621_wdt_remove(struct platform_device *pdev)
+{
+	watchdog_unregister_device(&mt7621_wdt_dev);
+
+	return 0;
+}
+
+static void mt7621_wdt_shutdown(struct platform_device *pdev)
+{
+	mt7621_wdt_stop(&mt7621_wdt_dev);
+}
+
+static const struct of_device_id mt7621_wdt_match[] = {
+	{ .compatible = "mediatek,mt7621-wdt" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, mt7621_wdt_match);
+
+static struct platform_driver mt7621_wdt_driver = {
+	.probe		= mt7621_wdt_probe,
+	.remove		= mt7621_wdt_remove,
+	.shutdown	= mt7621_wdt_shutdown,
+	.driver		= {
+		.name		= KBUILD_MODNAME,
+		.owner		= THIS_MODULE,
+		.of_match_table	= mt7621_wdt_match,
+	},
+};
+
+module_platform_driver(mt7621_wdt_driver);
+
+MODULE_DESCRIPTION("MediaTek MT762x hardware watchdog driver");
+MODULE_AUTHOR("John Crispin <blogic@openwrt.org");
+MODULE_LICENSE("GPL v2");
-- 
1.7.10.4


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

* [PATCH V2] watchdog: add MT7621 watchdog support
@ 2014-10-16 10:08 John Crispin
  2014-10-16 10:10 ` John Crispin
  2014-10-16 13:48 ` Guenter Roeck
  0 siblings, 2 replies; 9+ messages in thread
From: John Crispin @ 2014-10-16 10:08 UTC (permalink / raw)
  To: Wim Van Sebroeck; +Cc: linux-watchdog, linux-mips

This patch adds support for the watchdog core found on newer mediatek/ralink
Wifi SoCs.

Signed-off-by: John Crispin <blogic@openwrt.org>
---
Changes since V1

* fix the comments identifying the driver
* add a comment to the code setting the prescaler
* use watchdog_init_timeout
* use devm_reset_control_get
* get rid of the miscdev code

 .../devicetree/bindings/watchdog/mt7621-wdt.txt    |   12 ++
 drivers/watchdog/Kconfig                           |    7 +
 drivers/watchdog/Makefile                          |    1 +
 drivers/watchdog/mt7621_wdt.c                      |  186 ++++++++++++++++++++
 4 files changed, 206 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
 create mode 100644 drivers/watchdog/mt7621_wdt.c

diff --git a/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
new file mode 100644
index 0000000..c15ef0e
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
@@ -0,0 +1,12 @@
+Ralink Watchdog Timers
+
+Required properties:
+- compatible: must be "mediatek,mt7621-wdt"
+- reg: physical base address of the controller and length of the register range
+
+Example:
+
+	watchdog@100 {
+		compatible = "mediatek,mt7621-wdt";
+		reg = <0x100 0x10>;
+	};
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index f57312f..9ee0d32 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1186,6 +1186,13 @@ config RALINK_WDT
 	help
 	  Hardware driver for the Ralink SoC Watchdog Timer.
 
+config MT7621_WDT
+	tristate "Mediatek SoC watchdog"
+	select WATCHDOG_CORE
+	depends on SOC_MT7620 || SOC_MT7621
+	help
+	  Hardware driver for the Mediatek/Ralink SoC Watchdog Timer.
+
 # PARISC Architecture
 
 # POWERPC Architecture
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index 468c320..5b2031e 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -138,6 +138,7 @@ obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o
 octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o
 obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
 obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o
+obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
 
 # PARISC Architecture
 
diff --git a/drivers/watchdog/mt7621_wdt.c b/drivers/watchdog/mt7621_wdt.c
new file mode 100644
index 0000000..0cb9e0b
--- /dev/null
+++ b/drivers/watchdog/mt7621_wdt.c
@@ -0,0 +1,186 @@
+/*
+ * Ralink MT7621/MT7628 built-in hardware watchdog timer
+ *
+ * Copyright (C) 2014 John Crispin <blogic@openwrt.org>
+ *
+ * This driver was based on: drivers/watchdog/rt2880_wdt.c
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <linux/clk.h>
+#include <linux/reset.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/watchdog.h>
+#include <linux/moduleparam.h>
+#include <linux/platform_device.h>
+
+#include <asm/mach-ralink/ralink_regs.h>
+
+#define SYSC_RSTSTAT			0x38
+#define WDT_RST_CAUSE			BIT(1)
+
+#define RALINK_WDT_TIMEOUT		30
+
+#define TIMER_REG_TMRSTAT		0x00
+#define TIMER_REG_TMR1LOAD		0x24
+#define TIMER_REG_TMR1CTL		0x20
+
+#define TMR1CTL_ENABLE			BIT(7)
+#define TMR1CTL_RESTART			BIT(9)
+#define TMR1CTL_PRESCALE_SHIFT		16
+
+static void __iomem *mt7621_wdt_base;
+static struct reset_control *mt7621_wdt_reset;
+
+static bool nowayout = WATCHDOG_NOWAYOUT;
+module_param(nowayout, bool, 0);
+MODULE_PARM_DESC(nowayout,
+		 "Watchdog cannot be stopped once started (default="
+		 __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
+
+static inline void rt_wdt_w32(unsigned reg, u32 val)
+{
+	iowrite32(val, mt7621_wdt_base + reg);
+}
+
+static inline u32 rt_wdt_r32(unsigned reg)
+{
+	return ioread32(mt7621_wdt_base + reg);
+}
+
+static int mt7621_wdt_ping(struct watchdog_device *w)
+{
+	rt_wdt_w32(TIMER_REG_TMRSTAT, TMR1CTL_RESTART);
+
+	return 0;
+}
+
+static int mt7621_wdt_set_timeout(struct watchdog_device *w, unsigned int t)
+{
+	w->timeout = t;
+	rt_wdt_w32(TIMER_REG_TMR1LOAD, t * 1000);
+	mt7621_wdt_ping(w);
+
+	return 0;
+}
+
+static int mt7621_wdt_start(struct watchdog_device *w)
+{
+	u32 t;
+
+	/* set the prescaler to 1ms == 1000us */
+	rt_wdt_w32(TIMER_REG_TMR1CTL, 1000 << TMR1CTL_PRESCALE_SHIFT);
+
+	mt7621_wdt_set_timeout(w, w->timeout);
+
+	t = rt_wdt_r32(TIMER_REG_TMR1CTL);
+	t |= TMR1CTL_ENABLE;
+	rt_wdt_w32(TIMER_REG_TMR1CTL, t);
+
+	return 0;
+}
+
+static int mt7621_wdt_stop(struct watchdog_device *w)
+{
+	u32 t;
+
+	mt7621_wdt_ping(w);
+
+	t = rt_wdt_r32(TIMER_REG_TMR1CTL);
+	t &= ~TMR1CTL_ENABLE;
+	rt_wdt_w32(TIMER_REG_TMR1CTL, t);
+
+	return 0;
+}
+
+static int mt7621_wdt_bootcause(void)
+{
+	if (rt_sysc_r32(SYSC_RSTSTAT) & WDT_RST_CAUSE)
+		return WDIOF_CARDRESET;
+
+	return 0;
+}
+
+static struct watchdog_info mt7621_wdt_info = {
+	.identity = "Mediatek Watchdog",
+	.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
+};
+
+static struct watchdog_ops mt7621_wdt_ops = {
+	.owner = THIS_MODULE,
+	.start = mt7621_wdt_start,
+	.stop = mt7621_wdt_stop,
+	.ping = mt7621_wdt_ping,
+	.set_timeout = mt7621_wdt_set_timeout,
+};
+
+static struct watchdog_device mt7621_wdt_dev = {
+	.info = &mt7621_wdt_info,
+	.ops = &mt7621_wdt_ops,
+	.min_timeout = 1,
+	.max_timeout = 0xfffful / 1000,
+};
+
+static int mt7621_wdt_probe(struct platform_device *pdev)
+{
+	struct resource *res;
+	int ret;
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	mt7621_wdt_base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(mt7621_wdt_base))
+		return PTR_ERR(mt7621_wdt_base);
+
+	mt7621_wdt_reset = devm_reset_control_get(&pdev->dev, NULL);
+	if (!IS_ERR(mt7621_wdt_reset))
+		reset_control_deassert(mt7621_wdt_reset);
+
+	mt7621_wdt_dev.dev = &pdev->dev;
+	mt7621_wdt_dev.bootstatus = mt7621_wdt_bootcause();
+
+	watchdog_init_timeout(&mt7621_wdt_dev, mt7621_wdt_dev.max_timeout, &pdev->dev);
+	watchdog_set_nowayout(&mt7621_wdt_dev, nowayout);
+
+	ret = watchdog_register_device(&mt7621_wdt_dev);
+
+	return 0;
+}
+
+static int mt7621_wdt_remove(struct platform_device *pdev)
+{
+	watchdog_unregister_device(&mt7621_wdt_dev);
+
+	return 0;
+}
+
+static void mt7621_wdt_shutdown(struct platform_device *pdev)
+{
+	mt7621_wdt_stop(&mt7621_wdt_dev);
+}
+
+static const struct of_device_id mt7621_wdt_match[] = {
+	{ .compatible = "mediatek,mt7621-wdt" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, mt7621_wdt_match);
+
+static struct platform_driver mt7621_wdt_driver = {
+	.probe		= mt7621_wdt_probe,
+	.remove		= mt7621_wdt_remove,
+	.shutdown	= mt7621_wdt_shutdown,
+	.driver		= {
+		.name		= KBUILD_MODNAME,
+		.owner		= THIS_MODULE,
+		.of_match_table	= mt7621_wdt_match,
+	},
+};
+
+module_platform_driver(mt7621_wdt_driver);
+
+MODULE_DESCRIPTION("MediaTek MT762x hardware watchdog driver");
+MODULE_AUTHOR("John Crispin <blogic@openwrt.org");
+MODULE_LICENSE("GPL v2");
-- 
1.7.10.4


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

* Re: [PATCH V2] watchdog: add MT7621 watchdog support
  2014-10-16 10:08 [PATCH V2] watchdog: add MT7621 watchdog support John Crispin
@ 2014-10-16 10:10 ` John Crispin
  2014-10-16 13:48 ` Guenter Roeck
  1 sibling, 0 replies; 9+ messages in thread
From: John Crispin @ 2014-10-16 10:10 UTC (permalink / raw)
  Cc: linux-watchdog

sorry for sending the patch twice, the VM used failed to connect to
the ntp server and thought it was the 13th ...


On 16/10/2014 12:08, John Crispin wrote:
> This patch adds support for the watchdog core found on newer
> mediatek/ralink Wifi SoCs.
> 
> Signed-off-by: John Crispin <blogic@openwrt.org> --- Changes since
> V1
> 
> * fix the comments identifying the driver * add a comment to the
> code setting the prescaler * use watchdog_init_timeout * use
> devm_reset_control_get * get rid of the miscdev code
> 
> .../devicetree/bindings/watchdog/mt7621-wdt.txt    |   12 ++ 
> drivers/watchdog/Kconfig                           |    7 + 
> drivers/watchdog/Makefile                          |    1 + 
> drivers/watchdog/mt7621_wdt.c                      |  186
> ++++++++++++++++++++ 4 files changed, 206 insertions(+) create mode
> 100644 Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt 
> create mode 100644 drivers/watchdog/mt7621_wdt.c
> 
> diff --git
> a/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt new
> file mode 100644 index 0000000..c15ef0e --- /dev/null +++
> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt @@ -0,0
> +1,12 @@ +Ralink Watchdog Timers + +Required properties: +-
> compatible: must be "mediatek,mt7621-wdt" +- reg: physical base
> address of the controller and length of the register range + 
> +Example: + +	watchdog@100 { +		compatible =
> "mediatek,mt7621-wdt"; +		reg = <0x100 0x10>; +	}; diff --git
> a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index
> f57312f..9ee0d32 100644 --- a/drivers/watchdog/Kconfig +++
> b/drivers/watchdog/Kconfig @@ -1186,6 +1186,13 @@ config
> RALINK_WDT help Hardware driver for the Ralink SoC Watchdog Timer.
> 
> +config MT7621_WDT +	tristate "Mediatek SoC watchdog" +	select
> WATCHDOG_CORE +	depends on SOC_MT7620 || SOC_MT7621 +	help +
> Hardware driver for the Mediatek/Ralink SoC Watchdog Timer. + #
> PARISC Architecture
> 
> # POWERPC Architecture diff --git a/drivers/watchdog/Makefile
> b/drivers/watchdog/Makefile index 468c320..5b2031e 100644 ---
> a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@
> -138,6 +138,7 @@ obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o 
> octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o 
> obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o obj-$(CONFIG_RALINK_WDT)
> += rt2880_wdt.o +obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
> 
> # PARISC Architecture
> 
> diff --git a/drivers/watchdog/mt7621_wdt.c
> b/drivers/watchdog/mt7621_wdt.c new file mode 100644 index
> 0000000..0cb9e0b --- /dev/null +++ b/drivers/watchdog/mt7621_wdt.c 
> @@ -0,0 +1,186 @@ +/* + * Ralink MT7621/MT7628 built-in hardware
> watchdog timer + * + * Copyright (C) 2014 John Crispin
> <blogic@openwrt.org> + * + * This driver was based on:
> drivers/watchdog/rt2880_wdt.c + * + * This program is free
> software; you can redistribute it and/or modify it + * under the
> terms of the GNU General Public License version 2 as published + *
> by the Free Software Foundation. + */ + +#include <linux/clk.h> 
> +#include <linux/reset.h> +#include <linux/module.h> +#include
> <linux/kernel.h> +#include <linux/watchdog.h> +#include
> <linux/moduleparam.h> +#include <linux/platform_device.h> + 
> +#include <asm/mach-ralink/ralink_regs.h> + +#define SYSC_RSTSTAT
> 0x38 +#define WDT_RST_CAUSE			BIT(1) + +#define RALINK_WDT_TIMEOUT
> 30 + +#define TIMER_REG_TMRSTAT		0x00 +#define TIMER_REG_TMR1LOAD
> 0x24 +#define TIMER_REG_TMR1CTL		0x20 + +#define TMR1CTL_ENABLE
> BIT(7) +#define TMR1CTL_RESTART			BIT(9) +#define
> TMR1CTL_PRESCALE_SHIFT		16 + +static void __iomem
> *mt7621_wdt_base; +static struct reset_control *mt7621_wdt_reset; 
> + +static bool nowayout = WATCHDOG_NOWAYOUT; 
> +module_param(nowayout, bool, 0); +MODULE_PARM_DESC(nowayout, +
> "Watchdog cannot be stopped once started (default=" +
> __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); + +static inline void
> rt_wdt_w32(unsigned reg, u32 val) +{ +	iowrite32(val,
> mt7621_wdt_base + reg); +} + +static inline u32 rt_wdt_r32(unsigned
> reg) +{ +	return ioread32(mt7621_wdt_base + reg); +} + +static int
> mt7621_wdt_ping(struct watchdog_device *w) +{ +
> rt_wdt_w32(TIMER_REG_TMRSTAT, TMR1CTL_RESTART); + +	return 0; +} + 
> +static int mt7621_wdt_set_timeout(struct watchdog_device *w,
> unsigned int t) +{ +	w->timeout = t; +
> rt_wdt_w32(TIMER_REG_TMR1LOAD, t * 1000); +	mt7621_wdt_ping(w); + +
> return 0; +} + +static int mt7621_wdt_start(struct watchdog_device
> *w) +{ +	u32 t; + +	/* set the prescaler to 1ms == 1000us */ +
> rt_wdt_w32(TIMER_REG_TMR1CTL, 1000 << TMR1CTL_PRESCALE_SHIFT); + +
> mt7621_wdt_set_timeout(w, w->timeout); + +	t =
> rt_wdt_r32(TIMER_REG_TMR1CTL); +	t |= TMR1CTL_ENABLE; +
> rt_wdt_w32(TIMER_REG_TMR1CTL, t); + +	return 0; +} + +static int
> mt7621_wdt_stop(struct watchdog_device *w) +{ +	u32 t; + +
> mt7621_wdt_ping(w); + +	t = rt_wdt_r32(TIMER_REG_TMR1CTL); +	t &=
> ~TMR1CTL_ENABLE; +	rt_wdt_w32(TIMER_REG_TMR1CTL, t); + +	return 0; 
> +} + +static int mt7621_wdt_bootcause(void) +{ +	if
> (rt_sysc_r32(SYSC_RSTSTAT) & WDT_RST_CAUSE) +		return
> WDIOF_CARDRESET; + +	return 0; +} + +static struct watchdog_info
> mt7621_wdt_info = { +	.identity = "Mediatek Watchdog", +	.options =
> WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE, +}; + 
> +static struct watchdog_ops mt7621_wdt_ops = { +	.owner =
> THIS_MODULE, +	.start = mt7621_wdt_start, +	.stop =
> mt7621_wdt_stop, +	.ping = mt7621_wdt_ping, +	.set_timeout =
> mt7621_wdt_set_timeout, +}; + +static struct watchdog_device
> mt7621_wdt_dev = { +	.info = &mt7621_wdt_info, +	.ops =
> &mt7621_wdt_ops, +	.min_timeout = 1, +	.max_timeout = 0xfffful /
> 1000, +}; + +static int mt7621_wdt_probe(struct platform_device
> *pdev) +{ +	struct resource *res; +	int ret; + +	res =
> platform_get_resource(pdev, IORESOURCE_MEM, 0); +	mt7621_wdt_base =
> devm_ioremap_resource(&pdev->dev, res); +	if
> (IS_ERR(mt7621_wdt_base)) +		return PTR_ERR(mt7621_wdt_base); + +
> mt7621_wdt_reset = devm_reset_control_get(&pdev->dev, NULL); +	if
> (!IS_ERR(mt7621_wdt_reset)) +
> reset_control_deassert(mt7621_wdt_reset); + +	mt7621_wdt_dev.dev =
> &pdev->dev; +	mt7621_wdt_dev.bootstatus = mt7621_wdt_bootcause(); 
> + +	watchdog_init_timeout(&mt7621_wdt_dev,
> mt7621_wdt_dev.max_timeout, &pdev->dev); +
> watchdog_set_nowayout(&mt7621_wdt_dev, nowayout); + +	ret =
> watchdog_register_device(&mt7621_wdt_dev); + +	return 0; +} + 
> +static int mt7621_wdt_remove(struct platform_device *pdev) +{ +
> watchdog_unregister_device(&mt7621_wdt_dev); + +	return 0; +} + 
> +static void mt7621_wdt_shutdown(struct platform_device *pdev) +{ +
> mt7621_wdt_stop(&mt7621_wdt_dev); +} + +static const struct
> of_device_id mt7621_wdt_match[] = { +	{ .compatible =
> "mediatek,mt7621-wdt" }, +	{}, +}; +MODULE_DEVICE_TABLE(of,
> mt7621_wdt_match); + +static struct platform_driver
> mt7621_wdt_driver = { +	.probe		= mt7621_wdt_probe, +	.remove		=
> mt7621_wdt_remove, +	.shutdown	= mt7621_wdt_shutdown, +	.driver		=
> { +		.name		= KBUILD_MODNAME, +		.owner		= THIS_MODULE, +
> .of_match_table	= mt7621_wdt_match, +	}, +}; + 
> +module_platform_driver(mt7621_wdt_driver); + 
> +MODULE_DESCRIPTION("MediaTek MT762x hardware watchdog driver"); 
> +MODULE_AUTHOR("John Crispin <blogic@openwrt.org"); 
> +MODULE_LICENSE("GPL v2");
> 

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

* Re: [PATCH V2] watchdog: add MT7621 watchdog support
  2014-10-16 10:08 [PATCH V2] watchdog: add MT7621 watchdog support John Crispin
  2014-10-16 10:10 ` John Crispin
@ 2014-10-16 13:48 ` Guenter Roeck
  2014-10-16 13:56   ` John Crispin
  1 sibling, 1 reply; 9+ messages in thread
From: Guenter Roeck @ 2014-10-16 13:48 UTC (permalink / raw)
  To: John Crispin, Wim Van Sebroeck; +Cc: linux-watchdog, linux-mips

On 10/16/2014 03:08 AM, John Crispin wrote:
> This patch adds support for the watchdog core found on newer mediatek/ralink
> Wifi SoCs.
>
> Signed-off-by: John Crispin <blogic@openwrt.org>
> ---
> Changes since V1
>
> * fix the comments identifying the driver
> * add a comment to the code setting the prescaler
> * use watchdog_init_timeout
> * use devm_reset_control_get
> * get rid of the miscdev code
>
>   .../devicetree/bindings/watchdog/mt7621-wdt.txt    |   12 ++
>   drivers/watchdog/Kconfig                           |    7 +
>   drivers/watchdog/Makefile                          |    1 +
>   drivers/watchdog/mt7621_wdt.c                      |  186 ++++++++++++++++++++
>   4 files changed, 206 insertions(+)
>   create mode 100644 Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
>   create mode 100644 drivers/watchdog/mt7621_wdt.c
>
> diff --git a/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
> new file mode 100644
> index 0000000..c15ef0e
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt
> @@ -0,0 +1,12 @@
> +Ralink Watchdog Timers
> +
> +Required properties:
> +- compatible: must be "mediatek,mt7621-wdt"
> +- reg: physical base address of the controller and length of the register range
> +
> +Example:
> +
> +	watchdog@100 {
> +		compatible = "mediatek,mt7621-wdt";
> +		reg = <0x100 0x10>;
> +	};
> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
> index f57312f..9ee0d32 100644
> --- a/drivers/watchdog/Kconfig
> +++ b/drivers/watchdog/Kconfig
> @@ -1186,6 +1186,13 @@ config RALINK_WDT
>   	help
>   	  Hardware driver for the Ralink SoC Watchdog Timer.
>
> +config MT7621_WDT
> +	tristate "Mediatek SoC watchdog"
> +	select WATCHDOG_CORE
> +	depends on SOC_MT7620 || SOC_MT7621

There is no SOC_MT7621 symbol, at least not in the current kernel.

> +	help
> +	  Hardware driver for the Mediatek/Ralink SoC Watchdog Timer.
> +
How about mentioning the supported chips (7620 ? 7621 ? 7628 ?)

>   # PARISC Architecture
>
>   # POWERPC Architecture
> diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
> index 468c320..5b2031e 100644
> --- a/drivers/watchdog/Makefile
> +++ b/drivers/watchdog/Makefile
> @@ -138,6 +138,7 @@ obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o
>   octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o
>   obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
>   obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o
> +obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
>
>   # PARISC Architecture
>
> diff --git a/drivers/watchdog/mt7621_wdt.c b/drivers/watchdog/mt7621_wdt.c
> new file mode 100644
> index 0000000..0cb9e0b
> --- /dev/null
> +++ b/drivers/watchdog/mt7621_wdt.c
> @@ -0,0 +1,186 @@
> +/*
> + * Ralink MT7621/MT7628 built-in hardware watchdog timer
> + *
MT7628 or MT7620 ?

Thanks,
Guenter

> + * Copyright (C) 2014 John Crispin <blogic@openwrt.org>
> + *
> + * This driver was based on: drivers/watchdog/rt2880_wdt.c
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License version 2 as published
> + * by the Free Software Foundation.
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/reset.h>
> +#include <linux/module.h>
> +#include <linux/kernel.h>
> +#include <linux/watchdog.h>
> +#include <linux/moduleparam.h>
> +#include <linux/platform_device.h>
> +
> +#include <asm/mach-ralink/ralink_regs.h>
> +
> +#define SYSC_RSTSTAT			0x38
> +#define WDT_RST_CAUSE			BIT(1)
> +
> +#define RALINK_WDT_TIMEOUT		30
> +
> +#define TIMER_REG_TMRSTAT		0x00
> +#define TIMER_REG_TMR1LOAD		0x24
> +#define TIMER_REG_TMR1CTL		0x20
> +
> +#define TMR1CTL_ENABLE			BIT(7)
> +#define TMR1CTL_RESTART			BIT(9)
> +#define TMR1CTL_PRESCALE_SHIFT		16
> +
> +static void __iomem *mt7621_wdt_base;
> +static struct reset_control *mt7621_wdt_reset;
> +
> +static bool nowayout = WATCHDOG_NOWAYOUT;
> +module_param(nowayout, bool, 0);
> +MODULE_PARM_DESC(nowayout,
> +		 "Watchdog cannot be stopped once started (default="
> +		 __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
> +
> +static inline void rt_wdt_w32(unsigned reg, u32 val)
> +{
> +	iowrite32(val, mt7621_wdt_base + reg);
> +}
> +
> +static inline u32 rt_wdt_r32(unsigned reg)
> +{
> +	return ioread32(mt7621_wdt_base + reg);
> +}
> +
> +static int mt7621_wdt_ping(struct watchdog_device *w)
> +{
> +	rt_wdt_w32(TIMER_REG_TMRSTAT, TMR1CTL_RESTART);
> +
> +	return 0;
> +}
> +
> +static int mt7621_wdt_set_timeout(struct watchdog_device *w, unsigned int t)
> +{
> +	w->timeout = t;
> +	rt_wdt_w32(TIMER_REG_TMR1LOAD, t * 1000);
> +	mt7621_wdt_ping(w);
> +
> +	return 0;
> +}
> +
> +static int mt7621_wdt_start(struct watchdog_device *w)
> +{
> +	u32 t;
> +
> +	/* set the prescaler to 1ms == 1000us */
> +	rt_wdt_w32(TIMER_REG_TMR1CTL, 1000 << TMR1CTL_PRESCALE_SHIFT);
> +
> +	mt7621_wdt_set_timeout(w, w->timeout);
> +
> +	t = rt_wdt_r32(TIMER_REG_TMR1CTL);
> +	t |= TMR1CTL_ENABLE;
> +	rt_wdt_w32(TIMER_REG_TMR1CTL, t);
> +
> +	return 0;
> +}
> +
> +static int mt7621_wdt_stop(struct watchdog_device *w)
> +{
> +	u32 t;
> +
> +	mt7621_wdt_ping(w);
> +
> +	t = rt_wdt_r32(TIMER_REG_TMR1CTL);
> +	t &= ~TMR1CTL_ENABLE;
> +	rt_wdt_w32(TIMER_REG_TMR1CTL, t);
> +
> +	return 0;
> +}
> +
> +static int mt7621_wdt_bootcause(void)
> +{
> +	if (rt_sysc_r32(SYSC_RSTSTAT) & WDT_RST_CAUSE)
> +		return WDIOF_CARDRESET;
> +
> +	return 0;
> +}
> +
> +static struct watchdog_info mt7621_wdt_info = {
> +	.identity = "Mediatek Watchdog",
> +	.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
> +};
> +
> +static struct watchdog_ops mt7621_wdt_ops = {
> +	.owner = THIS_MODULE,
> +	.start = mt7621_wdt_start,
> +	.stop = mt7621_wdt_stop,
> +	.ping = mt7621_wdt_ping,
> +	.set_timeout = mt7621_wdt_set_timeout,
> +};
> +
> +static struct watchdog_device mt7621_wdt_dev = {
> +	.info = &mt7621_wdt_info,
> +	.ops = &mt7621_wdt_ops,
> +	.min_timeout = 1,
> +	.max_timeout = 0xfffful / 1000,
> +};
> +
> +static int mt7621_wdt_probe(struct platform_device *pdev)
> +{
> +	struct resource *res;
> +	int ret;
> +
> +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +	mt7621_wdt_base = devm_ioremap_resource(&pdev->dev, res);
> +	if (IS_ERR(mt7621_wdt_base))
> +		return PTR_ERR(mt7621_wdt_base);
> +
> +	mt7621_wdt_reset = devm_reset_control_get(&pdev->dev, NULL);
> +	if (!IS_ERR(mt7621_wdt_reset))
> +		reset_control_deassert(mt7621_wdt_reset);
> +
> +	mt7621_wdt_dev.dev = &pdev->dev;
> +	mt7621_wdt_dev.bootstatus = mt7621_wdt_bootcause();
> +
> +	watchdog_init_timeout(&mt7621_wdt_dev, mt7621_wdt_dev.max_timeout, &pdev->dev);
> +	watchdog_set_nowayout(&mt7621_wdt_dev, nowayout);
> +
> +	ret = watchdog_register_device(&mt7621_wdt_dev);
> +
> +	return 0;
> +}
> +
> +static int mt7621_wdt_remove(struct platform_device *pdev)
> +{
> +	watchdog_unregister_device(&mt7621_wdt_dev);
> +
> +	return 0;
> +}
> +
> +static void mt7621_wdt_shutdown(struct platform_device *pdev)
> +{
> +	mt7621_wdt_stop(&mt7621_wdt_dev);
> +}
> +
> +static const struct of_device_id mt7621_wdt_match[] = {
> +	{ .compatible = "mediatek,mt7621-wdt" },
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, mt7621_wdt_match);
> +
> +static struct platform_driver mt7621_wdt_driver = {
> +	.probe		= mt7621_wdt_probe,
> +	.remove		= mt7621_wdt_remove,
> +	.shutdown	= mt7621_wdt_shutdown,
> +	.driver		= {
> +		.name		= KBUILD_MODNAME,
> +		.owner		= THIS_MODULE,
> +		.of_match_table	= mt7621_wdt_match,
> +	},
> +};
> +
> +module_platform_driver(mt7621_wdt_driver);
> +
> +MODULE_DESCRIPTION("MediaTek MT762x hardware watchdog driver");
> +MODULE_AUTHOR("John Crispin <blogic@openwrt.org");
> +MODULE_LICENSE("GPL v2");
>


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

* Re: [PATCH V2] watchdog: add MT7621 watchdog support
  2014-10-16 13:48 ` Guenter Roeck
@ 2014-10-16 13:56   ` John Crispin
  2014-10-16 15:17     ` Guenter Roeck
  0 siblings, 1 reply; 9+ messages in thread
From: John Crispin @ 2014-10-16 13:56 UTC (permalink / raw)
  To: Guenter Roeck, John Crispin, Wim Van Sebroeck; +Cc: linux-watchdog, linux-mips

Hi



On 16/10/2014 15:48, Guenter Roeck wrote:
> On 10/16/2014 03:08 AM, John Crispin wrote:
>> This patch adds support for the watchdog core found on newer 
>> mediatek/ralink Wifi SoCs.
>> 
>> Signed-off-by: John Crispin <blogic@openwrt.org> --- Changes 
>> since V1
>> 
>> * fix the comments identifying the driver * add a comment to the 
>> code setting the prescaler * use watchdog_init_timeout * use 
>> devm_reset_control_get * get rid of the miscdev code
>> 
>> .../devicetree/bindings/watchdog/mt7621-wdt.txt    |   12 ++ 
>> drivers/watchdog/Kconfig                           |    7 + 
>> drivers/watchdog/Makefile                          |    1 + 
>> drivers/watchdog/mt7621_wdt.c                      |  186 
>> ++++++++++++++++++++ 4 files changed, 206 insertions(+) create 
>> mode 100644 
>> Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt create 
>> mode 100644 drivers/watchdog/mt7621_wdt.c
>> 
>> diff --git 
>> a/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt 
>> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt new 
>> file mode 100644 index 0000000..c15ef0e --- /dev/null +++ 
>> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt @@ 
>> -0,0 +1,12 @@ +Ralink Watchdog Timers + +Required properties: +- 
>> compatible: must be "mediatek,mt7621-wdt" +- reg: physical base 
>> address of the controller and length of the register range + 
>> +Example: + +    watchdog@100 { +        compatible = 
>> "mediatek,mt7621-wdt"; +        reg = <0x100 0x10>; +    }; diff 
>> --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
>> index f57312f..9ee0d32 100644 --- a/drivers/watchdog/Kconfig +++ 
>> b/drivers/watchdog/Kconfig @@ -1186,6 +1186,13 @@ config 
>> RALINK_WDT help Hardware driver for the Ralink SoC Watchdog 
>> Timer.
>> 
>> +config MT7621_WDT +    tristate "Mediatek SoC watchdog" + select
>> WATCHDOG_CORE +    depends on SOC_MT7620 || SOC_MT7621
> 
> There is no SOC_MT7621 symbol, at least not in the current kernel.

the answer has not changed since last time. the patches are sitting in
the linux-mips patchwork.



> 
>> +    help +      Hardware driver for the Mediatek/Ralink SoC 
>> Watchdog Timer. +
> How about mentioning the supported chips (7620 ? 7621 ? 7628 ?)

ok

> 
>> # PARISC Architecture
>> 
>> # POWERPC Architecture diff --git a/drivers/watchdog/Makefile 
>> b/drivers/watchdog/Makefile index 468c320..5b2031e 100644 --- 
>> a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ 
>> -138,6 +138,7 @@ obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o 
>> octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o 
>> obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
>> obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o
>> +obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
>> 
>> # PARISC Architecture
>> 
>> diff --git a/drivers/watchdog/mt7621_wdt.c 
>> b/drivers/watchdog/mt7621_wdt.c new file mode 100644 index 
>> 0000000..0cb9e0b --- /dev/null +++ 
>> b/drivers/watchdog/mt7621_wdt.c @@ -0,0 +1,186 @@ +/* + * Ralink 
>> MT7621/MT7628 built-in hardware watchdog timer + *
> MT7628 or MT7620 ?
> 

MT7621 and MT7628 as it says there. the mt7628 is a subtype of mt7620.
it is the same core with slightly different peripherals. this is
covered by the SOC_MT7620. there i a patch for this inside the
linux-mips patchwork.

shall i resend a V3 only with the "How about mentioning the supported
chips (7620 ? 7621 ? 7628 ?)" fixed ?

Thanks,
	John



> Thanks, Guenter
> 
>> + * Copyright (C) 2014 John Crispin <blogic@openwrt.org> + * + * 
>> This driver was based on: drivers/watchdog/rt2880_wdt.c + * + * 
>> This program is free software; you can redistribute it and/or 
>> modify it + * under the terms of the GNU General Public License 
>> version 2 as published + * by the Free Software Foundation. + */ 
>> + +#include <linux/clk.h> +#include <linux/reset.h> +#include 
>> <linux/module.h> +#include <linux/kernel.h> +#include 
>> <linux/watchdog.h> +#include <linux/moduleparam.h> +#include 
>> <linux/platform_device.h> + +#include 
>> <asm/mach-ralink/ralink_regs.h> + +#define SYSC_RSTSTAT 0x38
>> +#define WDT_RST_CAUSE            BIT(1) + +#define 
>> RALINK_WDT_TIMEOUT        30 + +#define TIMER_REG_TMRSTAT 0x00
>> +#define TIMER_REG_TMR1LOAD        0x24 +#define 
>> TIMER_REG_TMR1CTL        0x20 + +#define TMR1CTL_ENABLE BIT(7)
>> +#define TMR1CTL_RESTART            BIT(9) +#define 
>> TMR1CTL_PRESCALE_SHIFT        16 + +static void __iomem 
>> *mt7621_wdt_base; +static struct reset_control *mt7621_wdt_reset;
>> + +static bool nowayout = WATCHDOG_NOWAYOUT; 
>> +module_param(nowayout, bool, 0); +MODULE_PARM_DESC(nowayout, + 
>> "Watchdog cannot be stopped once started (default=" + 
>> __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); + +static inline void 
>> rt_wdt_w32(unsigned reg, u32 val) +{ +    iowrite32(val, 
>> mt7621_wdt_base + reg); +} + +static inline u32 
>> rt_wdt_r32(unsigned reg) +{ +    return ioread32(mt7621_wdt_base 
>> + reg); +} + +static int mt7621_wdt_ping(struct watchdog_device 
>> *w) +{ +    rt_wdt_w32(TIMER_REG_TMRSTAT, TMR1CTL_RESTART); + + 
>> return 0; +} + +static int mt7621_wdt_set_timeout(struct 
>> watchdog_device *w, unsigned int t) +{ +    w->timeout = t; + 
>> rt_wdt_w32(TIMER_REG_TMR1LOAD, t * 1000); + mt7621_wdt_ping(w); +
>> +    return 0; +} + +static int mt7621_wdt_start(struct
>> watchdog_device *w) +{ +    u32 t; + + /* set the prescaler to
>> 1ms == 1000us */ + rt_wdt_w32(TIMER_REG_TMR1CTL, 1000 <<
>> TMR1CTL_PRESCALE_SHIFT); + +    mt7621_wdt_set_timeout(w,
>> w->timeout); + +    t = rt_wdt_r32(TIMER_REG_TMR1CTL); +    t |=
>> TMR1CTL_ENABLE; + rt_wdt_w32(TIMER_REG_TMR1CTL, t); + +    return
>> 0; +} + +static int mt7621_wdt_stop(struct watchdog_device *w) +{
>> +    u32 t; + + mt7621_wdt_ping(w); + +    t =
>> rt_wdt_r32(TIMER_REG_TMR1CTL); + t &= ~TMR1CTL_ENABLE; +
>> rt_wdt_w32(TIMER_REG_TMR1CTL, t); + + return 0; +} + +static int
>> mt7621_wdt_bootcause(void) +{ +    if (rt_sysc_r32(SYSC_RSTSTAT)
>> & WDT_RST_CAUSE) +        return WDIOF_CARDRESET; + +    return
>> 0; +} + +static struct watchdog_info mt7621_wdt_info = { +
>> .identity = "Mediatek Watchdog", +    .options = WDIOF_SETTIMEOUT
>> | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE, +}; + +static struct
>> watchdog_ops mt7621_wdt_ops = { +    .owner = THIS_MODULE, +
>> .start = mt7621_wdt_start, +    .stop = mt7621_wdt_stop, +
>> .ping = mt7621_wdt_ping, +    .set_timeout =
>> mt7621_wdt_set_timeout, +}; + +static struct watchdog_device
>> mt7621_wdt_dev = { +    .info = &mt7621_wdt_info, +    .ops =
>> &mt7621_wdt_ops, +    .min_timeout = 1, +    .max_timeout =
>> 0xfffful / 1000, +}; + +static int mt7621_wdt_probe(struct
>> platform_device *pdev) +{ +    struct resource *res; +    int
>> ret; + +    res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>> + mt7621_wdt_base = devm_ioremap_resource(&pdev->dev, res); +
>> if (IS_ERR(mt7621_wdt_base)) +        return 
>> PTR_ERR(mt7621_wdt_base); + +    mt7621_wdt_reset = 
>> devm_reset_control_get(&pdev->dev, NULL); +    if 
>> (!IS_ERR(mt7621_wdt_reset)) + 
>> reset_control_deassert(mt7621_wdt_reset); + + mt7621_wdt_dev.dev
>> = &pdev->dev; +    mt7621_wdt_dev.bootstatus = 
>> mt7621_wdt_bootcause(); + + 
>> watchdog_init_timeout(&mt7621_wdt_dev, 
>> mt7621_wdt_dev.max_timeout, &pdev->dev); + 
>> watchdog_set_nowayout(&mt7621_wdt_dev, nowayout); + +    ret = 
>> watchdog_register_device(&mt7621_wdt_dev); + +    return 0; +} + 
>> +static int mt7621_wdt_remove(struct platform_device *pdev) +{ + 
>> watchdog_unregister_device(&mt7621_wdt_dev); + +    return 0; +} 
>> + +static void mt7621_wdt_shutdown(struct platform_device *pdev) 
>> +{ +    mt7621_wdt_stop(&mt7621_wdt_dev); +} + +static const 
>> struct of_device_id mt7621_wdt_match[] = { +    { .compatible = 
>> "mediatek,mt7621-wdt" }, +    {}, +}; +MODULE_DEVICE_TABLE(of, 
>> mt7621_wdt_match); + +static struct platform_driver 
>> mt7621_wdt_driver = { +    .probe        = mt7621_wdt_probe, + 
>> .remove        = mt7621_wdt_remove, +    .shutdown    = 
>> mt7621_wdt_shutdown, +    .driver        = { +        .name =
>> KBUILD_MODNAME, +        .owner        = THIS_MODULE, + 
>> .of_match_table    = mt7621_wdt_match, +    }, +}; + 
>> +module_platform_driver(mt7621_wdt_driver); + 
>> +MODULE_DESCRIPTION("MediaTek MT762x hardware watchdog driver"); 
>> +MODULE_AUTHOR("John Crispin <blogic@openwrt.org"); 
>> +MODULE_LICENSE("GPL v2");
>> 
> 
> 
> 

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

* Re: [PATCH V2] watchdog: add MT7621 watchdog support
  2014-10-16 13:56   ` John Crispin
@ 2014-10-16 15:17     ` Guenter Roeck
  2014-10-16 16:36       ` John Crispin
  0 siblings, 1 reply; 9+ messages in thread
From: Guenter Roeck @ 2014-10-16 15:17 UTC (permalink / raw)
  To: John Crispin; +Cc: Wim Van Sebroeck, linux-watchdog, linux-mips

On Thu, Oct 16, 2014 at 03:56:00PM +0200, John Crispin wrote:
> Hi
> 
> 
> 
> On 16/10/2014 15:48, Guenter Roeck wrote:
> > On 10/16/2014 03:08 AM, John Crispin wrote:
> >> This patch adds support for the watchdog core found on newer 
> >> mediatek/ralink Wifi SoCs.
> >> 
> >> Signed-off-by: John Crispin <blogic@openwrt.org> --- Changes 
> >> since V1
> >> 
> >> * fix the comments identifying the driver * add a comment to the 
> >> code setting the prescaler * use watchdog_init_timeout * use 
> >> devm_reset_control_get * get rid of the miscdev code
> >> 
> >> .../devicetree/bindings/watchdog/mt7621-wdt.txt    |   12 ++ 
> >> drivers/watchdog/Kconfig                           |    7 + 
> >> drivers/watchdog/Makefile                          |    1 + 
> >> drivers/watchdog/mt7621_wdt.c                      |  186 
> >> ++++++++++++++++++++ 4 files changed, 206 insertions(+) create 
> >> mode 100644 
> >> Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt create 
> >> mode 100644 drivers/watchdog/mt7621_wdt.c
> >> 
> >> diff --git 
> >> a/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt 
> >> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt new 
> >> file mode 100644 index 0000000..c15ef0e --- /dev/null +++ 
> >> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt @@ 
> >> -0,0 +1,12 @@ +Ralink Watchdog Timers + +Required properties: +- 
> >> compatible: must be "mediatek,mt7621-wdt" +- reg: physical base 
> >> address of the controller and length of the register range + 
> >> +Example: + +    watchdog@100 { +        compatible = 
> >> "mediatek,mt7621-wdt"; +        reg = <0x100 0x10>; +    }; diff 
> >> --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
> >> index f57312f..9ee0d32 100644 --- a/drivers/watchdog/Kconfig +++ 
> >> b/drivers/watchdog/Kconfig @@ -1186,6 +1186,13 @@ config 
> >> RALINK_WDT help Hardware driver for the Ralink SoC Watchdog 
> >> Timer.
> >> 
> >> +config MT7621_WDT +    tristate "Mediatek SoC watchdog" + select
> >> WATCHDOG_CORE +    depends on SOC_MT7620 || SOC_MT7621
> > 
> > There is no SOC_MT7621 symbol, at least not in the current kernel.
> 
> the answer has not changed since last time. the patches are sitting in
> the linux-mips patchwork.
> 
> 
> 
> > 
> >> +    help +      Hardware driver for the Mediatek/Ralink SoC 
> >> Watchdog Timer. +
> > How about mentioning the supported chips (7620 ? 7621 ? 7628 ?)
> 
> ok
> 
> > 
> >> # PARISC Architecture
> >> 
> >> # POWERPC Architecture diff --git a/drivers/watchdog/Makefile 
> >> b/drivers/watchdog/Makefile index 468c320..5b2031e 100644 --- 
> >> a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ 
> >> -138,6 +138,7 @@ obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o 
> >> octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o 
> >> obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
> >> obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o
> >> +obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
> >> 
> >> # PARISC Architecture
> >> 
> >> diff --git a/drivers/watchdog/mt7621_wdt.c 
> >> b/drivers/watchdog/mt7621_wdt.c new file mode 100644 index 
> >> 0000000..0cb9e0b --- /dev/null +++ 
> >> b/drivers/watchdog/mt7621_wdt.c @@ -0,0 +1,186 @@ +/* + * Ralink 
> >> MT7621/MT7628 built-in hardware watchdog timer + *
> > MT7628 or MT7620 ?
> > 
> 
> MT7621 and MT7628 as it says there. the mt7628 is a subtype of mt7620.
> it is the same core with slightly different peripherals. this is
> covered by the SOC_MT7620. there i a patch for this inside the
> linux-mips patchwork.
> 
> shall i resend a V3 only with the "How about mentioning the supported
> chips (7620 ? 7621 ? 7628 ?)" fixed ?
> 
Yes, that would be great. Also, it might be useful to mention that the 
patch(es) to add support for 7621 are pending in linux-mips. Mention it
after ---, so the information is not added to the commit log.

Question is how to proceed. Are the 7621 patches going into 3.18
or 3.19 ?

Thanks,
Guenter

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

* Re: [PATCH V2] watchdog: add MT7621 watchdog support
  2014-10-16 15:17     ` Guenter Roeck
@ 2014-10-16 16:36       ` John Crispin
  2014-10-16 17:25         ` Guenter Roeck
  0 siblings, 1 reply; 9+ messages in thread
From: John Crispin @ 2014-10-16 16:36 UTC (permalink / raw)
  To: Guenter Roeck; +Cc: Wim Van Sebroeck, linux-watchdog, linux-mips


On 16/10/2014 17:17, Guenter Roeck wrote:
> On Thu, Oct 16, 2014 at 03:56:00PM +0200, John Crispin wrote:
>> Hi
>>
>>
>>
>> On 16/10/2014 15:48, Guenter Roeck wrote:
>>> On 10/16/2014 03:08 AM, John Crispin wrote:
>>>> This patch adds support for the watchdog core found on newer 
>>>> mediatek/ralink Wifi SoCs.
>>>>
>>>> Signed-off-by: John Crispin <blogic@openwrt.org> --- Changes 
>>>> since V1
>>>>
>>>> * fix the comments identifying the driver * add a comment to the 
>>>> code setting the prescaler * use watchdog_init_timeout * use 
>>>> devm_reset_control_get * get rid of the miscdev code
>>>>
>>>> .../devicetree/bindings/watchdog/mt7621-wdt.txt    |   12 ++ 
>>>> drivers/watchdog/Kconfig                           |    7 + 
>>>> drivers/watchdog/Makefile                          |    1 + 
>>>> drivers/watchdog/mt7621_wdt.c                      |  186 
>>>> ++++++++++++++++++++ 4 files changed, 206 insertions(+) create 
>>>> mode 100644 
>>>> Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt create 
>>>> mode 100644 drivers/watchdog/mt7621_wdt.c
>>>>
>>>> diff --git 
>>>> a/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt 
>>>> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt new 
>>>> file mode 100644 index 0000000..c15ef0e --- /dev/null +++ 
>>>> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt @@ 
>>>> -0,0 +1,12 @@ +Ralink Watchdog Timers + +Required properties: +- 
>>>> compatible: must be "mediatek,mt7621-wdt" +- reg: physical base 
>>>> address of the controller and length of the register range + 
>>>> +Example: + +    watchdog@100 { +        compatible = 
>>>> "mediatek,mt7621-wdt"; +        reg = <0x100 0x10>; +    }; diff 
>>>> --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
>>>> index f57312f..9ee0d32 100644 --- a/drivers/watchdog/Kconfig +++ 
>>>> b/drivers/watchdog/Kconfig @@ -1186,6 +1186,13 @@ config 
>>>> RALINK_WDT help Hardware driver for the Ralink SoC Watchdog 
>>>> Timer.
>>>>
>>>> +config MT7621_WDT +    tristate "Mediatek SoC watchdog" + select
>>>> WATCHDOG_CORE +    depends on SOC_MT7620 || SOC_MT7621
>>> There is no SOC_MT7621 symbol, at least not in the current kernel.
>> the answer has not changed since last time. the patches are sitting in
>> the linux-mips patchwork.
>>
>>
>>
>>>> +    help +      Hardware driver for the Mediatek/Ralink SoC 
>>>> Watchdog Timer. +
>>> How about mentioning the supported chips (7620 ? 7621 ? 7628 ?)
>> ok
>>
>>>> # PARISC Architecture
>>>>
>>>> # POWERPC Architecture diff --git a/drivers/watchdog/Makefile 
>>>> b/drivers/watchdog/Makefile index 468c320..5b2031e 100644 --- 
>>>> a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ 
>>>> -138,6 +138,7 @@ obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o 
>>>> octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o 
>>>> obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
>>>> obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o
>>>> +obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
>>>>
>>>> # PARISC Architecture
>>>>
>>>> diff --git a/drivers/watchdog/mt7621_wdt.c 
>>>> b/drivers/watchdog/mt7621_wdt.c new file mode 100644 index 
>>>> 0000000..0cb9e0b --- /dev/null +++ 
>>>> b/drivers/watchdog/mt7621_wdt.c @@ -0,0 +1,186 @@ +/* + * Ralink 
>>>> MT7621/MT7628 built-in hardware watchdog timer + *
>>> MT7628 or MT7620 ?
>>>
>> MT7621 and MT7628 as it says there. the mt7628 is a subtype of mt7620.
>> it is the same core with slightly different peripherals. this is
>> covered by the SOC_MT7620. there i a patch for this inside the
>> linux-mips patchwork.
>>
>> shall i resend a V3 only with the "How about mentioning the supported
>> chips (7620 ? 7621 ? 7628 ?)" fixed ?
>>
> Yes, that would be great. Also, it might be useful to mention that the 
> patch(es) to add support for 7621 are pending in linux-mips. Mention it
> after ---, so the information is not added to the commit log.
>
> Question is how to proceed. Are the 7621 patches going into 3.18
> or 3.19 ?
>
> Thanks,
> Guenter

Hi Guenter,

i a hoping for 3.18. would you mind if we have this patch flow via the
linux-mips tree with the rest of the patches once you added your SoB ?
i will most likely setup a tree for Ralf to pull from. I am already on
55 patches and i have another ~50 to go. might be easier if we resolve
the merge order mess by having the whole MT7621/8 patches flow via 1 tree.

    John

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

* Re: [PATCH V2] watchdog: add MT7621 watchdog support
  2014-10-16 16:36       ` John Crispin
@ 2014-10-16 17:25         ` Guenter Roeck
  2014-10-16 17:39           ` John Crispin
  0 siblings, 1 reply; 9+ messages in thread
From: Guenter Roeck @ 2014-10-16 17:25 UTC (permalink / raw)
  To: John Crispin; +Cc: Wim Van Sebroeck, linux-watchdog, linux-mips

On Thu, Oct 16, 2014 at 06:36:01PM +0200, John Crispin wrote:
> 
> On 16/10/2014 17:17, Guenter Roeck wrote:
> > On Thu, Oct 16, 2014 at 03:56:00PM +0200, John Crispin wrote:
> >> Hi
> >>
> >>
> >>
> >> On 16/10/2014 15:48, Guenter Roeck wrote:
> >>> On 10/16/2014 03:08 AM, John Crispin wrote:
> >>>> This patch adds support for the watchdog core found on newer 
> >>>> mediatek/ralink Wifi SoCs.
> >>>>
> >>>> Signed-off-by: John Crispin <blogic@openwrt.org> --- Changes 
> >>>> since V1
> >>>>
> >>>> * fix the comments identifying the driver * add a comment to the 
> >>>> code setting the prescaler * use watchdog_init_timeout * use 
> >>>> devm_reset_control_get * get rid of the miscdev code
> >>>>
> >>>> .../devicetree/bindings/watchdog/mt7621-wdt.txt    |   12 ++ 
> >>>> drivers/watchdog/Kconfig                           |    7 + 
> >>>> drivers/watchdog/Makefile                          |    1 + 
> >>>> drivers/watchdog/mt7621_wdt.c                      |  186 
> >>>> ++++++++++++++++++++ 4 files changed, 206 insertions(+) create 
> >>>> mode 100644 
> >>>> Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt create 
> >>>> mode 100644 drivers/watchdog/mt7621_wdt.c
> >>>>
> >>>> diff --git 
> >>>> a/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt 
> >>>> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt new 
> >>>> file mode 100644 index 0000000..c15ef0e --- /dev/null +++ 
> >>>> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt @@ 
> >>>> -0,0 +1,12 @@ +Ralink Watchdog Timers + +Required properties: +- 
> >>>> compatible: must be "mediatek,mt7621-wdt" +- reg: physical base 
> >>>> address of the controller and length of the register range + 
> >>>> +Example: + +    watchdog@100 { +        compatible = 
> >>>> "mediatek,mt7621-wdt"; +        reg = <0x100 0x10>; +    }; diff 
> >>>> --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
> >>>> index f57312f..9ee0d32 100644 --- a/drivers/watchdog/Kconfig +++ 
> >>>> b/drivers/watchdog/Kconfig @@ -1186,6 +1186,13 @@ config 
> >>>> RALINK_WDT help Hardware driver for the Ralink SoC Watchdog 
> >>>> Timer.
> >>>>
> >>>> +config MT7621_WDT +    tristate "Mediatek SoC watchdog" + select
> >>>> WATCHDOG_CORE +    depends on SOC_MT7620 || SOC_MT7621
> >>> There is no SOC_MT7621 symbol, at least not in the current kernel.
> >> the answer has not changed since last time. the patches are sitting in
> >> the linux-mips patchwork.
> >>
> >>
> >>
> >>>> +    help +      Hardware driver for the Mediatek/Ralink SoC 
> >>>> Watchdog Timer. +
> >>> How about mentioning the supported chips (7620 ? 7621 ? 7628 ?)
> >> ok
> >>
> >>>> # PARISC Architecture
> >>>>
> >>>> # POWERPC Architecture diff --git a/drivers/watchdog/Makefile 
> >>>> b/drivers/watchdog/Makefile index 468c320..5b2031e 100644 --- 
> >>>> a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ 
> >>>> -138,6 +138,7 @@ obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o 
> >>>> octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o 
> >>>> obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
> >>>> obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o
> >>>> +obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
> >>>>
> >>>> # PARISC Architecture
> >>>>
> >>>> diff --git a/drivers/watchdog/mt7621_wdt.c 
> >>>> b/drivers/watchdog/mt7621_wdt.c new file mode 100644 index 
> >>>> 0000000..0cb9e0b --- /dev/null +++ 
> >>>> b/drivers/watchdog/mt7621_wdt.c @@ -0,0 +1,186 @@ +/* + * Ralink 
> >>>> MT7621/MT7628 built-in hardware watchdog timer + *
> >>> MT7628 or MT7620 ?
> >>>
> >> MT7621 and MT7628 as it says there. the mt7628 is a subtype of mt7620.
> >> it is the same core with slightly different peripherals. this is
> >> covered by the SOC_MT7620. there i a patch for this inside the
> >> linux-mips patchwork.
> >>
> >> shall i resend a V3 only with the "How about mentioning the supported
> >> chips (7620 ? 7621 ? 7628 ?)" fixed ?
> >>
> > Yes, that would be great. Also, it might be useful to mention that the 
> > patch(es) to add support for 7621 are pending in linux-mips. Mention it
> > after ---, so the information is not added to the commit log.
> >
> > Question is how to proceed. Are the 7621 patches going into 3.18
> > or 3.19 ?
> >
> > Thanks,
> > Guenter
> 
> Hi Guenter,
> 
> i a hoping for 3.18. would you mind if we have this patch flow via the
> linux-mips tree with the rest of the patches once you added your SoB ?
> i will most likely setup a tree for Ralf to pull from. I am already on
> 55 patches and i have another ~50 to go. might be easier if we resolve
> the merge order mess by having the whole MT7621/8 patches flow via 1 tree.
> 
I tend to agree, but that will be up to Wim to decide. I am just the guy
who reviews many of the watchdog patches, not the maintainer.

Guenter

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

* Re: [PATCH V2] watchdog: add MT7621 watchdog support
  2014-10-16 17:25         ` Guenter Roeck
@ 2014-10-16 17:39           ` John Crispin
  0 siblings, 0 replies; 9+ messages in thread
From: John Crispin @ 2014-10-16 17:39 UTC (permalink / raw)
  To: Guenter Roeck; +Cc: Wim Van Sebroeck, linux-watchdog, linux-mips


On 16/10/2014 19:25, Guenter Roeck wrote:
> On Thu, Oct 16, 2014 at 06:36:01PM +0200, John Crispin wrote:
>> On 16/10/2014 17:17, Guenter Roeck wrote:
>>> On Thu, Oct 16, 2014 at 03:56:00PM +0200, John Crispin wrote:
>>>> Hi
>>>>
>>>>
>>>>
>>>> On 16/10/2014 15:48, Guenter Roeck wrote:
>>>>> On 10/16/2014 03:08 AM, John Crispin wrote:
>>>>>> This patch adds support for the watchdog core found on newer 
>>>>>> mediatek/ralink Wifi SoCs.
>>>>>>
>>>>>> Signed-off-by: John Crispin <blogic@openwrt.org> --- Changes 
>>>>>> since V1
>>>>>>
>>>>>> * fix the comments identifying the driver * add a comment to the 
>>>>>> code setting the prescaler * use watchdog_init_timeout * use 
>>>>>> devm_reset_control_get * get rid of the miscdev code
>>>>>>
>>>>>> .../devicetree/bindings/watchdog/mt7621-wdt.txt    |   12 ++ 
>>>>>> drivers/watchdog/Kconfig                           |    7 + 
>>>>>> drivers/watchdog/Makefile                          |    1 + 
>>>>>> drivers/watchdog/mt7621_wdt.c                      |  186 
>>>>>> ++++++++++++++++++++ 4 files changed, 206 insertions(+) create 
>>>>>> mode 100644 
>>>>>> Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt create 
>>>>>> mode 100644 drivers/watchdog/mt7621_wdt.c
>>>>>>
>>>>>> diff --git 
>>>>>> a/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt 
>>>>>> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt new 
>>>>>> file mode 100644 index 0000000..c15ef0e --- /dev/null +++ 
>>>>>> b/Documentation/devicetree/bindings/watchdog/mt7621-wdt.txt @@ 
>>>>>> -0,0 +1,12 @@ +Ralink Watchdog Timers + +Required properties: +- 
>>>>>> compatible: must be "mediatek,mt7621-wdt" +- reg: physical base 
>>>>>> address of the controller and length of the register range + 
>>>>>> +Example: + +    watchdog@100 { +        compatible = 
>>>>>> "mediatek,mt7621-wdt"; +        reg = <0x100 0x10>; +    }; diff 
>>>>>> --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
>>>>>> index f57312f..9ee0d32 100644 --- a/drivers/watchdog/Kconfig +++ 
>>>>>> b/drivers/watchdog/Kconfig @@ -1186,6 +1186,13 @@ config 
>>>>>> RALINK_WDT help Hardware driver for the Ralink SoC Watchdog 
>>>>>> Timer.
>>>>>>
>>>>>> +config MT7621_WDT +    tristate "Mediatek SoC watchdog" + select
>>>>>> WATCHDOG_CORE +    depends on SOC_MT7620 || SOC_MT7621
>>>>> There is no SOC_MT7621 symbol, at least not in the current kernel.
>>>> the answer has not changed since last time. the patches are sitting in
>>>> the linux-mips patchwork.
>>>>
>>>>
>>>>
>>>>>> +    help +      Hardware driver for the Mediatek/Ralink SoC 
>>>>>> Watchdog Timer. +
>>>>> How about mentioning the supported chips (7620 ? 7621 ? 7628 ?)
>>>> ok
>>>>
>>>>>> # PARISC Architecture
>>>>>>
>>>>>> # POWERPC Architecture diff --git a/drivers/watchdog/Makefile 
>>>>>> b/drivers/watchdog/Makefile index 468c320..5b2031e 100644 --- 
>>>>>> a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ 
>>>>>> -138,6 +138,7 @@ obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o 
>>>>>> octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o 
>>>>>> obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
>>>>>> obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o
>>>>>> +obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
>>>>>>
>>>>>> # PARISC Architecture
>>>>>>
>>>>>> diff --git a/drivers/watchdog/mt7621_wdt.c 
>>>>>> b/drivers/watchdog/mt7621_wdt.c new file mode 100644 index 
>>>>>> 0000000..0cb9e0b --- /dev/null +++ 
>>>>>> b/drivers/watchdog/mt7621_wdt.c @@ -0,0 +1,186 @@ +/* + * Ralink 
>>>>>> MT7621/MT7628 built-in hardware watchdog timer + *
>>>>> MT7628 or MT7620 ?
>>>>>
>>>> MT7621 and MT7628 as it says there. the mt7628 is a subtype of mt7620.
>>>> it is the same core with slightly different peripherals. this is
>>>> covered by the SOC_MT7620. there i a patch for this inside the
>>>> linux-mips patchwork.
>>>>
>>>> shall i resend a V3 only with the "How about mentioning the supported
>>>> chips (7620 ? 7621 ? 7628 ?)" fixed ?
>>>>
>>> Yes, that would be great. Also, it might be useful to mention that the 
>>> patch(es) to add support for 7621 are pending in linux-mips. Mention it
>>> after ---, so the information is not added to the commit log.
>>>
>>> Question is how to proceed. Are the 7621 patches going into 3.18
>>> or 3.19 ?
>>>
>>> Thanks,
>>> Guenter
>> Hi Guenter,
>>
>> i a hoping for 3.18. would you mind if we have this patch flow via the
>> linux-mips tree with the rest of the patches once you added your SoB ?
>> i will most likely setup a tree for Ralf to pull from. I am already on
>> 55 patches and i have another ~50 to go. might be easier if we resolve
>> the merge order mess by having the whole MT7621/8 patches flow via 1 tree.
>>
> I tend to agree, but that will be up to Wim to decide. I am just the guy
> who reviews many of the watchdog patches, not the maintainer.
>
> Guenter


Ok, i will add a note below the tearline.

Thanks for the review !
    John

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

end of thread, other threads:[~2014-10-16 17:39 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-16 10:08 [PATCH V2] watchdog: add MT7621 watchdog support John Crispin
2014-10-16 10:10 ` John Crispin
2014-10-16 13:48 ` Guenter Roeck
2014-10-16 13:56   ` John Crispin
2014-10-16 15:17     ` Guenter Roeck
2014-10-16 16:36       ` John Crispin
2014-10-16 17:25         ` Guenter Roeck
2014-10-16 17:39           ` John Crispin
  -- strict thread matches above, loose matches on Subject: below --
2014-10-13 12:15 John Crispin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox