linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] ARM: davinici: move watchdog restart from mach to drivers
@ 2017-12-11 17:21 David Lechner
  2017-12-11 17:21 ` [PATCH 1/2] watchdog: davinci_wdt: add restart function David Lechner
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: David Lechner @ 2017-12-11 17:21 UTC (permalink / raw)
  To: linux-arm-kernel, linux-watchdog
  Cc: David Lechner, Sekhar Nori, Kevin Hilman, Wim Van Sebroeck,
	Guenter Roeck, linux-kernel

This series moves the watchdog restart code from arch/arm/mach-davinci
to drivers/watchdog.

Tested working on LEGO MINDSTORMS EV3 (TI AM1808 processor).

David Lechner (2):
  watchdog: davinci_wdt: add restart function
  ARM: davinci: remove watchdog reset

 arch/arm/mach-davinci/board-da830-evm.c     |  1 -
 arch/arm/mach-davinci/board-da850-evm.c     |  1 -
 arch/arm/mach-davinci/board-dm355-evm.c     |  1 -
 arch/arm/mach-davinci/board-dm355-leopard.c |  1 -
 arch/arm/mach-davinci/board-dm365-evm.c     |  1 -
 arch/arm/mach-davinci/board-dm644x-evm.c    |  1 -
 arch/arm/mach-davinci/board-dm646x-evm.c    |  2 -
 arch/arm/mach-davinci/board-mityomapl138.c  |  1 -
 arch/arm/mach-davinci/board-neuros-osd2.c   |  1 -
 arch/arm/mach-davinci/board-omapl138-hawk.c |  1 -
 arch/arm/mach-davinci/board-sffsdr.c        |  1 -
 arch/arm/mach-davinci/clock.h               |  3 --
 arch/arm/mach-davinci/da8xx-dt.c            |  1 -
 arch/arm/mach-davinci/devices-da8xx.c       | 13 -------
 arch/arm/mach-davinci/devices.c             |  7 +---
 arch/arm/mach-davinci/include/mach/common.h |  1 -
 arch/arm/mach-davinci/include/mach/da8xx.h  |  1 -
 arch/arm/mach-davinci/time.c                | 57 -----------------------------
 drivers/watchdog/davinci_wdt.c              | 38 +++++++++++++++++++
 19 files changed, 39 insertions(+), 94 deletions(-)

-- 
2.7.4

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

* [PATCH 1/2] watchdog: davinci_wdt: add restart function
  2017-12-11 17:21 [PATCH 0/2] ARM: davinici: move watchdog restart from mach to drivers David Lechner
@ 2017-12-11 17:21 ` David Lechner
  2017-12-11 23:15   ` Guenter Roeck
  2017-12-11 17:21 ` [PATCH 2/2] ARM: davinci: remove watchdog reset David Lechner
  2017-12-19 10:44 ` [PATCH 0/2] ARM: davinici: move watchdog restart from mach to drivers Sekhar Nori
  2 siblings, 1 reply; 6+ messages in thread
From: David Lechner @ 2017-12-11 17:21 UTC (permalink / raw)
  To: linux-arm-kernel, linux-watchdog
  Cc: David Lechner, Sekhar Nori, Kevin Hilman, Wim Van Sebroeck,
	Guenter Roeck, linux-kernel

This adds a restart function to the davinci watchdog timer driver.

This is copied from arch/arm/mach-davinci/time.c and will allow us to
remove the code from there.

Signed-off-by: David Lechner <david@lechnology.com>
---
 drivers/watchdog/davinci_wdt.c | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/drivers/watchdog/davinci_wdt.c b/drivers/watchdog/davinci_wdt.c
index 2f46487..3e4c592 100644
--- a/drivers/watchdog/davinci_wdt.c
+++ b/drivers/watchdog/davinci_wdt.c
@@ -140,6 +140,42 @@ static unsigned int davinci_wdt_get_timeleft(struct watchdog_device *wdd)
 	return wdd->timeout - timer_counter;
 }
 
+static int davinci_wdt_restart(struct watchdog_device *wdd,
+			       unsigned long action, void *data)
+{
+	struct davinci_wdt_device *davinci_wdt = watchdog_get_drvdata(wdd);
+	u32 tgcr, wdtcr;
+
+	/* disable, internal clock source */
+	iowrite32(0, davinci_wdt->base + TCR);
+
+	/* reset timer, set mode to 64-bit watchdog, and unreset */
+	tgcr = 0;
+	iowrite32(tgcr, davinci_wdt->base + TGCR);
+	tgcr = TIMMODE_64BIT_WDOG | TIM12RS_UNRESET | TIM34RS_UNRESET;
+	iowrite32(tgcr, davinci_wdt->base + TGCR);
+
+	/* clear counter and period regs */
+	iowrite32(0, davinci_wdt->base + TIM12);
+	iowrite32(0, davinci_wdt->base + TIM34);
+	iowrite32(0, davinci_wdt->base + PRD12);
+	iowrite32(0, davinci_wdt->base + PRD34);
+
+	/* put watchdog in pre-active state */
+	wdtcr = WDKEY_SEQ0 | WDEN;
+	iowrite32(wdtcr, davinci_wdt->base + WDTCR);
+
+	/* put watchdog in active state */
+	wdtcr = WDKEY_SEQ1 | WDEN;
+	iowrite32(wdtcr, davinci_wdt->base + WDTCR);
+
+	/* write an invalid value to the WDKEY field to trigger a restart */
+	wdtcr = 0x00004000;
+	iowrite32(wdtcr, davinci_wdt->base + WDTCR);
+
+	return 0;
+}
+
 static const struct watchdog_info davinci_wdt_info = {
 	.options = WDIOF_KEEPALIVEPING,
 	.identity = "DaVinci/Keystone Watchdog",
@@ -151,6 +187,7 @@ static const struct watchdog_ops davinci_wdt_ops = {
 	.stop		= davinci_wdt_ping,
 	.ping		= davinci_wdt_ping,
 	.get_timeleft	= davinci_wdt_get_timeleft,
+	.restart	= davinci_wdt_restart,
 };
 
 static int davinci_wdt_probe(struct platform_device *pdev)
@@ -195,6 +232,7 @@ static int davinci_wdt_probe(struct platform_device *pdev)
 
 	watchdog_set_drvdata(wdd, davinci_wdt);
 	watchdog_set_nowayout(wdd, 1);
+	watchdog_set_restart_priority(wdd, 128);
 
 	wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	davinci_wdt->base = devm_ioremap_resource(dev, wdt_mem);
-- 
2.7.4

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

* [PATCH 2/2] ARM: davinci: remove watchdog reset
  2017-12-11 17:21 [PATCH 0/2] ARM: davinici: move watchdog restart from mach to drivers David Lechner
  2017-12-11 17:21 ` [PATCH 1/2] watchdog: davinci_wdt: add restart function David Lechner
@ 2017-12-11 17:21 ` David Lechner
  2017-12-14 14:35   ` [2/2] " Guenter Roeck
  2017-12-19 10:44 ` [PATCH 0/2] ARM: davinici: move watchdog restart from mach to drivers Sekhar Nori
  2 siblings, 1 reply; 6+ messages in thread
From: David Lechner @ 2017-12-11 17:21 UTC (permalink / raw)
  To: linux-arm-kernel, linux-watchdog
  Cc: David Lechner, Sekhar Nori, Kevin Hilman, Wim Van Sebroeck,
	Guenter Roeck, linux-kernel

This removes the watchdog reset code. The reset has been moved to
drivers/watchdog/davinci_wdt.c. The watchdog driver registers the reset
with the kernel so defining a reset for each machine is no longer needed.

Signed-off-by: David Lechner <david@lechnology.com>
---
 arch/arm/mach-davinci/board-da830-evm.c     |  1 -
 arch/arm/mach-davinci/board-da850-evm.c     |  1 -
 arch/arm/mach-davinci/board-dm355-evm.c     |  1 -
 arch/arm/mach-davinci/board-dm355-leopard.c |  1 -
 arch/arm/mach-davinci/board-dm365-evm.c     |  1 -
 arch/arm/mach-davinci/board-dm644x-evm.c    |  1 -
 arch/arm/mach-davinci/board-dm646x-evm.c    |  2 -
 arch/arm/mach-davinci/board-mityomapl138.c  |  1 -
 arch/arm/mach-davinci/board-neuros-osd2.c   |  1 -
 arch/arm/mach-davinci/board-omapl138-hawk.c |  1 -
 arch/arm/mach-davinci/board-sffsdr.c        |  1 -
 arch/arm/mach-davinci/clock.h               |  3 --
 arch/arm/mach-davinci/da8xx-dt.c            |  1 -
 arch/arm/mach-davinci/devices-da8xx.c       | 13 -------
 arch/arm/mach-davinci/devices.c             |  7 +---
 arch/arm/mach-davinci/include/mach/common.h |  1 -
 arch/arm/mach-davinci/include/mach/da8xx.h  |  1 -
 arch/arm/mach-davinci/time.c                | 57 -----------------------------
 18 files changed, 1 insertion(+), 94 deletions(-)

diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c
index 2cc5426..7adf009 100644
--- a/arch/arm/mach-davinci/board-da830-evm.c
+++ b/arch/arm/mach-davinci/board-da830-evm.c
@@ -642,5 +642,4 @@ MACHINE_START(DAVINCI_DA830_EVM, "DaVinci DA830/OMAP-L137/AM17x EVM")
 	.init_machine	= da830_evm_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= da8xx_restart,
 MACHINE_END
diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
index 458f26d..8602d0d 100644
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -1485,6 +1485,5 @@ MACHINE_START(DAVINCI_DA850_EVM, "DaVinci DA850/OMAP-L138/AM18x EVM")
 	.init_machine	= da850_evm_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= da8xx_restart,
 	.reserve	= da8xx_rproc_reserve_cma,
 MACHINE_END
diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c
index 2b4d553..3c15cb7 100644
--- a/arch/arm/mach-davinci/board-dm355-evm.c
+++ b/arch/arm/mach-davinci/board-dm355-evm.c
@@ -420,5 +420,4 @@ MACHINE_START(DAVINCI_DM355_EVM, "DaVinci DM355 EVM")
 	.init_machine = dm355_evm_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= davinci_restart,
 MACHINE_END
diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c b/arch/arm/mach-davinci/board-dm355-leopard.c
index 69399d7..3ebc89d 100644
--- a/arch/arm/mach-davinci/board-dm355-leopard.c
+++ b/arch/arm/mach-davinci/board-dm355-leopard.c
@@ -275,5 +275,4 @@ MACHINE_START(DM355_LEOPARD, "DaVinci DM355 leopard")
 	.init_machine = dm355_leopard_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= davinci_restart,
 MACHINE_END
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c
index e414cb9..3daeac7 100644
--- a/arch/arm/mach-davinci/board-dm365-evm.c
+++ b/arch/arm/mach-davinci/board-dm365-evm.c
@@ -778,6 +778,5 @@ MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")
 	.init_machine	= dm365_evm_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= davinci_restart,
 MACHINE_END
 
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
index 6b26786..8d8c4ab 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -821,5 +821,4 @@ MACHINE_START(DAVINCI_EVM, "DaVinci DM644x EVM")
 	.init_machine = davinci_evm_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= davinci_restart,
 MACHINE_END
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c
index b3b81a8..dafc852 100644
--- a/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -804,7 +804,6 @@ MACHINE_START(DAVINCI_DM6467_EVM, "DaVinci DM646x EVM")
 	.init_machine = evm_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= davinci_restart,
 MACHINE_END
 
 MACHINE_START(DAVINCI_DM6467TEVM, "DaVinci DM6467T EVM")
@@ -815,6 +814,5 @@ MACHINE_START(DAVINCI_DM6467TEVM, "DaVinci DM6467T EVM")
 	.init_machine = evm_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= davinci_restart,
 MACHINE_END
 
diff --git a/arch/arm/mach-davinci/board-mityomapl138.c b/arch/arm/mach-davinci/board-mityomapl138.c
index c930c31..f9a725a 100644
--- a/arch/arm/mach-davinci/board-mityomapl138.c
+++ b/arch/arm/mach-davinci/board-mityomapl138.c
@@ -574,5 +574,4 @@ MACHINE_START(MITYOMAPL138, "MityDSP-L138/MityARM-1808")
 	.init_machine	= mityomapl138_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= da8xx_restart,
 MACHINE_END
diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c
index 925ada1..ff871a0 100644
--- a/arch/arm/mach-davinci/board-neuros-osd2.c
+++ b/arch/arm/mach-davinci/board-neuros-osd2.c
@@ -231,5 +231,4 @@ MACHINE_START(NEUROS_OSD2, "Neuros OSD2")
 	.init_machine = davinci_ntosd2_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= davinci_restart,
 MACHINE_END
diff --git a/arch/arm/mach-davinci/board-omapl138-hawk.c b/arch/arm/mach-davinci/board-omapl138-hawk.c
index c1277b3..bc8a747 100644
--- a/arch/arm/mach-davinci/board-omapl138-hawk.c
+++ b/arch/arm/mach-davinci/board-omapl138-hawk.c
@@ -338,6 +338,5 @@ MACHINE_START(OMAPL138_HAWKBOARD, "AM18x/OMAP-L138 Hawkboard")
 	.init_machine	= omapl138_hawk_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= da8xx_restart,
 	.reserve	= da8xx_rproc_reserve_cma,
 MACHINE_END
diff --git a/arch/arm/mach-davinci/board-sffsdr.c b/arch/arm/mach-davinci/board-sffsdr.c
index 4038de8..2922da9 100644
--- a/arch/arm/mach-davinci/board-sffsdr.c
+++ b/arch/arm/mach-davinci/board-sffsdr.c
@@ -154,5 +154,4 @@ MACHINE_START(SFFSDR, "Lyrtech SFFSDR")
 	.init_machine = davinci_sffsdr_init,
 	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
-	.restart	= davinci_restart,
 MACHINE_END
diff --git a/arch/arm/mach-davinci/clock.h b/arch/arm/mach-davinci/clock.h
index aea4f14..a0b559e 100644
--- a/arch/arm/mach-davinci/clock.h
+++ b/arch/arm/mach-davinci/clock.h
@@ -131,9 +131,6 @@ void davinci_clk_enable(struct davinci_clk *clk);
 void davinci_clk_disable(struct davinci_clk *clk);
 int davinci_clk_register(struct davinci_clk *clk);
 
-extern struct platform_device davinci_wdt_device;
-extern void davinci_watchdog_reset(struct platform_device *);
-
 static inline struct davinci_clk *to_davinci_clk(struct clk_hw *hw)
 {
 	if (IS_ERR_OR_NULL(hw))
diff --git a/arch/arm/mach-davinci/da8xx-dt.c b/arch/arm/mach-davinci/da8xx-dt.c
index 3630f0a..ab199f4 100644
--- a/arch/arm/mach-davinci/da8xx-dt.c
+++ b/arch/arm/mach-davinci/da8xx-dt.c
@@ -100,7 +100,6 @@ DT_MACHINE_START(DA850_DT, "Generic DA850/OMAP-L138/AM18x")
 	.init_machine	= da850_init_machine,
 	.dt_compat	= da850_boards_compat,
 	.init_late	= davinci_init_late,
-	.restart	= da8xx_restart,
 MACHINE_END
 
 #endif
diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index 6724a8d..272e12e 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -371,19 +371,6 @@ static struct platform_device da8xx_wdt_device = {
 	.resource	= da8xx_watchdog_resources,
 };
 
-void da8xx_restart(enum reboot_mode mode, const char *cmd)
-{
-	struct device *dev;
-
-	dev = bus_find_device_by_name(&platform_bus_type, NULL, "davinci-wdt");
-	if (!dev) {
-		pr_err("%s: failed to find watchdog device\n", __func__);
-		return;
-	}
-
-	davinci_watchdog_reset(to_platform_device(dev));
-}
-
 int __init da8xx_register_watchdog(void)
 {
 	return platform_device_register(&da8xx_wdt_device);
diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c
index 3ae70f2..0edda40 100644
--- a/arch/arm/mach-davinci/devices.c
+++ b/arch/arm/mach-davinci/devices.c
@@ -282,18 +282,13 @@ static struct resource wdt_resources[] = {
 	},
 };
 
-struct platform_device davinci_wdt_device = {
+static struct platform_device davinci_wdt_device = {
 	.name		= "davinci-wdt",
 	.id		= -1,
 	.num_resources	= ARRAY_SIZE(wdt_resources),
 	.resource	= wdt_resources,
 };
 
-void davinci_restart(enum reboot_mode mode, const char *cmd)
-{
-	davinci_watchdog_reset(&davinci_wdt_device);
-}
-
 int davinci_init_wdt(void)
 {
 	return platform_device_register(&davinci_wdt_device);
diff --git a/arch/arm/mach-davinci/include/mach/common.h b/arch/arm/mach-davinci/include/mach/common.h
index 69a0ad9..f0d5e858 100644
--- a/arch/arm/mach-davinci/include/mach/common.h
+++ b/arch/arm/mach-davinci/include/mach/common.h
@@ -80,7 +80,6 @@ extern struct davinci_soc_info davinci_soc_info;
 
 extern void davinci_common_init(const struct davinci_soc_info *soc_info);
 extern void davinci_init_ide(void);
-void davinci_restart(enum reboot_mode mode, const char *cmd);
 void davinci_init_late(void);
 
 #ifdef CONFIG_DAVINCI_RESET_CLOCKS
diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
index dd12e39..3481a0d 100644
--- a/arch/arm/mach-davinci/include/mach/da8xx.h
+++ b/arch/arm/mach-davinci/include/mach/da8xx.h
@@ -121,7 +121,6 @@ int da850_register_vpif_display
 			(struct vpif_display_config *display_config);
 int da850_register_vpif_capture
 			(struct vpif_capture_config *capture_config);
-void da8xx_restart(enum reboot_mode mode, const char *cmd);
 void da8xx_rproc_reserve_cma(void);
 int da8xx_register_rproc(void);
 int da850_register_gpio(void);
diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
index 034f865..1bb991a 100644
--- a/arch/arm/mach-davinci/time.c
+++ b/arch/arm/mach-davinci/time.c
@@ -80,13 +80,6 @@ enum {
 #define TGCR_UNRESET                 0x1
 #define TGCR_RESET_MASK              0x3
 
-#define WDTCR_WDEN_SHIFT             14
-#define WDTCR_WDEN_DISABLE           0x0
-#define WDTCR_WDEN_ENABLE            0x1
-#define WDTCR_WDKEY_SHIFT            16
-#define WDTCR_WDKEY_SEQ0             0xa5c6
-#define WDTCR_WDKEY_SEQ1             0xda7e
-
 struct timer_s {
 	char *name;
 	unsigned int id;
@@ -409,53 +402,3 @@ void __init davinci_timer_init(void)
 	for (i=0; i< ARRAY_SIZE(timers); i++)
 		timer32_config(&timers[i]);
 }
-
-/* reset board using watchdog timer */
-void davinci_watchdog_reset(struct platform_device *pdev)
-{
-	u32 tgcr, wdtcr;
-	void __iomem *base;
-	struct clk *wd_clk;
-
-	base = ioremap(pdev->resource[0].start, SZ_4K);
-	if (WARN_ON(!base))
-		return;
-
-	wd_clk = clk_get(&pdev->dev, NULL);
-	if (WARN_ON(IS_ERR(wd_clk)))
-		return;
-	clk_prepare_enable(wd_clk);
-
-	/* disable, internal clock source */
-	__raw_writel(0, base + TCR);
-
-	/* reset timer, set mode to 64-bit watchdog, and unreset */
-	tgcr = 0;
-	__raw_writel(tgcr, base + TGCR);
-	tgcr = TGCR_TIMMODE_64BIT_WDOG << TGCR_TIMMODE_SHIFT;
-	tgcr |= (TGCR_UNRESET << TGCR_TIM12RS_SHIFT) |
-		(TGCR_UNRESET << TGCR_TIM34RS_SHIFT);
-	__raw_writel(tgcr, base + TGCR);
-
-	/* clear counter and period regs */
-	__raw_writel(0, base + TIM12);
-	__raw_writel(0, base + TIM34);
-	__raw_writel(0, base + PRD12);
-	__raw_writel(0, base + PRD34);
-
-	/* put watchdog in pre-active state */
-	wdtcr = __raw_readl(base + WDTCR);
-	wdtcr = (WDTCR_WDKEY_SEQ0 << WDTCR_WDKEY_SHIFT) |
-		(WDTCR_WDEN_ENABLE << WDTCR_WDEN_SHIFT);
-	__raw_writel(wdtcr, base + WDTCR);
-
-	/* put watchdog in active state */
-	wdtcr = (WDTCR_WDKEY_SEQ1 << WDTCR_WDKEY_SHIFT) |
-		(WDTCR_WDEN_ENABLE << WDTCR_WDEN_SHIFT);
-	__raw_writel(wdtcr, base + WDTCR);
-
-	/* write an invalid value to the WDKEY field to trigger
-	 * a watchdog reset */
-	wdtcr = 0x00004000;
-	__raw_writel(wdtcr, base + WDTCR);
-}
-- 
2.7.4

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

* Re: [PATCH 1/2] watchdog: davinci_wdt: add restart function
  2017-12-11 17:21 ` [PATCH 1/2] watchdog: davinci_wdt: add restart function David Lechner
@ 2017-12-11 23:15   ` Guenter Roeck
  0 siblings, 0 replies; 6+ messages in thread
From: Guenter Roeck @ 2017-12-11 23:15 UTC (permalink / raw)
  To: David Lechner
  Cc: linux-arm-kernel, linux-watchdog, Sekhar Nori, Kevin Hilman,
	Wim Van Sebroeck, linux-kernel

On Mon, Dec 11, 2017 at 11:21:08AM -0600, David Lechner wrote:
> This adds a restart function to the davinci watchdog timer driver.
> 
> This is copied from arch/arm/mach-davinci/time.c and will allow us to
> remove the code from there.
> 
> Signed-off-by: David Lechner <david@lechnology.com>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
>  drivers/watchdog/davinci_wdt.c | 38 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
> 
> diff --git a/drivers/watchdog/davinci_wdt.c b/drivers/watchdog/davinci_wdt.c
> index 2f46487..3e4c592 100644
> --- a/drivers/watchdog/davinci_wdt.c
> +++ b/drivers/watchdog/davinci_wdt.c
> @@ -140,6 +140,42 @@ static unsigned int davinci_wdt_get_timeleft(struct watchdog_device *wdd)
>  	return wdd->timeout - timer_counter;
>  }
>  
> +static int davinci_wdt_restart(struct watchdog_device *wdd,
> +			       unsigned long action, void *data)
> +{
> +	struct davinci_wdt_device *davinci_wdt = watchdog_get_drvdata(wdd);
> +	u32 tgcr, wdtcr;
> +
> +	/* disable, internal clock source */
> +	iowrite32(0, davinci_wdt->base + TCR);
> +
> +	/* reset timer, set mode to 64-bit watchdog, and unreset */
> +	tgcr = 0;
> +	iowrite32(tgcr, davinci_wdt->base + TGCR);
> +	tgcr = TIMMODE_64BIT_WDOG | TIM12RS_UNRESET | TIM34RS_UNRESET;
> +	iowrite32(tgcr, davinci_wdt->base + TGCR);
> +
> +	/* clear counter and period regs */
> +	iowrite32(0, davinci_wdt->base + TIM12);
> +	iowrite32(0, davinci_wdt->base + TIM34);
> +	iowrite32(0, davinci_wdt->base + PRD12);
> +	iowrite32(0, davinci_wdt->base + PRD34);
> +
> +	/* put watchdog in pre-active state */
> +	wdtcr = WDKEY_SEQ0 | WDEN;
> +	iowrite32(wdtcr, davinci_wdt->base + WDTCR);
> +
> +	/* put watchdog in active state */
> +	wdtcr = WDKEY_SEQ1 | WDEN;
> +	iowrite32(wdtcr, davinci_wdt->base + WDTCR);
> +
> +	/* write an invalid value to the WDKEY field to trigger a restart */
> +	wdtcr = 0x00004000;
> +	iowrite32(wdtcr, davinci_wdt->base + WDTCR);
> +
> +	return 0;
> +}
> +
>  static const struct watchdog_info davinci_wdt_info = {
>  	.options = WDIOF_KEEPALIVEPING,
>  	.identity = "DaVinci/Keystone Watchdog",
> @@ -151,6 +187,7 @@ static const struct watchdog_ops davinci_wdt_ops = {
>  	.stop		= davinci_wdt_ping,
>  	.ping		= davinci_wdt_ping,
>  	.get_timeleft	= davinci_wdt_get_timeleft,
> +	.restart	= davinci_wdt_restart,
>  };
>  
>  static int davinci_wdt_probe(struct platform_device *pdev)
> @@ -195,6 +232,7 @@ static int davinci_wdt_probe(struct platform_device *pdev)
>  
>  	watchdog_set_drvdata(wdd, davinci_wdt);
>  	watchdog_set_nowayout(wdd, 1);
> +	watchdog_set_restart_priority(wdd, 128);
>  
>  	wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  	davinci_wdt->base = devm_ioremap_resource(dev, wdt_mem);
> -- 
> 2.7.4
> 

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

* Re: [2/2] ARM: davinci: remove watchdog reset
  2017-12-11 17:21 ` [PATCH 2/2] ARM: davinci: remove watchdog reset David Lechner
@ 2017-12-14 14:35   ` Guenter Roeck
  0 siblings, 0 replies; 6+ messages in thread
From: Guenter Roeck @ 2017-12-14 14:35 UTC (permalink / raw)
  To: David Lechner
  Cc: linux-arm-kernel, linux-watchdog, Sekhar Nori, Kevin Hilman,
	Wim Van Sebroeck, linux-kernel

On Mon, Dec 11, 2017 at 11:21:09AM -0600, David Lechner wrote:
> This removes the watchdog reset code. The reset has been moved to
> drivers/watchdog/davinci_wdt.c. The watchdog driver registers the reset
> with the kernel so defining a reset for each machine is no longer needed.
> 
> Signed-off-by: David Lechner <david@lechnology.com>

Acked-by: Guenter Roeck <linux@roeck-us.net>

> ---
>  arch/arm/mach-davinci/board-da830-evm.c     |  1 -
>  arch/arm/mach-davinci/board-da850-evm.c     |  1 -
>  arch/arm/mach-davinci/board-dm355-evm.c     |  1 -
>  arch/arm/mach-davinci/board-dm355-leopard.c |  1 -
>  arch/arm/mach-davinci/board-dm365-evm.c     |  1 -
>  arch/arm/mach-davinci/board-dm644x-evm.c    |  1 -
>  arch/arm/mach-davinci/board-dm646x-evm.c    |  2 -
>  arch/arm/mach-davinci/board-mityomapl138.c  |  1 -
>  arch/arm/mach-davinci/board-neuros-osd2.c   |  1 -
>  arch/arm/mach-davinci/board-omapl138-hawk.c |  1 -
>  arch/arm/mach-davinci/board-sffsdr.c        |  1 -
>  arch/arm/mach-davinci/clock.h               |  3 --
>  arch/arm/mach-davinci/da8xx-dt.c            |  1 -
>  arch/arm/mach-davinci/devices-da8xx.c       | 13 -------
>  arch/arm/mach-davinci/devices.c             |  7 +---
>  arch/arm/mach-davinci/include/mach/common.h |  1 -
>  arch/arm/mach-davinci/include/mach/da8xx.h  |  1 -
>  arch/arm/mach-davinci/time.c                | 57 -----------------------------
>  18 files changed, 1 insertion(+), 94 deletions(-)
> 
> diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c
> index 2cc5426..7adf009 100644
> --- a/arch/arm/mach-davinci/board-da830-evm.c
> +++ b/arch/arm/mach-davinci/board-da830-evm.c
> @@ -642,5 +642,4 @@ MACHINE_START(DAVINCI_DA830_EVM, "DaVinci DA830/OMAP-L137/AM17x EVM")
>  	.init_machine	= da830_evm_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= da8xx_restart,
>  MACHINE_END
> diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
> index 458f26d..8602d0d 100644
> --- a/arch/arm/mach-davinci/board-da850-evm.c
> +++ b/arch/arm/mach-davinci/board-da850-evm.c
> @@ -1485,6 +1485,5 @@ MACHINE_START(DAVINCI_DA850_EVM, "DaVinci DA850/OMAP-L138/AM18x EVM")
>  	.init_machine	= da850_evm_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= da8xx_restart,
>  	.reserve	= da8xx_rproc_reserve_cma,
>  MACHINE_END
> diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c
> index 2b4d553..3c15cb7 100644
> --- a/arch/arm/mach-davinci/board-dm355-evm.c
> +++ b/arch/arm/mach-davinci/board-dm355-evm.c
> @@ -420,5 +420,4 @@ MACHINE_START(DAVINCI_DM355_EVM, "DaVinci DM355 EVM")
>  	.init_machine = dm355_evm_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= davinci_restart,
>  MACHINE_END
> diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c b/arch/arm/mach-davinci/board-dm355-leopard.c
> index 69399d7..3ebc89d 100644
> --- a/arch/arm/mach-davinci/board-dm355-leopard.c
> +++ b/arch/arm/mach-davinci/board-dm355-leopard.c
> @@ -275,5 +275,4 @@ MACHINE_START(DM355_LEOPARD, "DaVinci DM355 leopard")
>  	.init_machine = dm355_leopard_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= davinci_restart,
>  MACHINE_END
> diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c
> index e414cb9..3daeac7 100644
> --- a/arch/arm/mach-davinci/board-dm365-evm.c
> +++ b/arch/arm/mach-davinci/board-dm365-evm.c
> @@ -778,6 +778,5 @@ MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")
>  	.init_machine	= dm365_evm_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= davinci_restart,
>  MACHINE_END
>  
> diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
> index 6b26786..8d8c4ab 100644
> --- a/arch/arm/mach-davinci/board-dm644x-evm.c
> +++ b/arch/arm/mach-davinci/board-dm644x-evm.c
> @@ -821,5 +821,4 @@ MACHINE_START(DAVINCI_EVM, "DaVinci DM644x EVM")
>  	.init_machine = davinci_evm_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= davinci_restart,
>  MACHINE_END
> diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c
> index b3b81a8..dafc852 100644
> --- a/arch/arm/mach-davinci/board-dm646x-evm.c
> +++ b/arch/arm/mach-davinci/board-dm646x-evm.c
> @@ -804,7 +804,6 @@ MACHINE_START(DAVINCI_DM6467_EVM, "DaVinci DM646x EVM")
>  	.init_machine = evm_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= davinci_restart,
>  MACHINE_END
>  
>  MACHINE_START(DAVINCI_DM6467TEVM, "DaVinci DM6467T EVM")
> @@ -815,6 +814,5 @@ MACHINE_START(DAVINCI_DM6467TEVM, "DaVinci DM6467T EVM")
>  	.init_machine = evm_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= davinci_restart,
>  MACHINE_END
>  
> diff --git a/arch/arm/mach-davinci/board-mityomapl138.c b/arch/arm/mach-davinci/board-mityomapl138.c
> index c930c31..f9a725a 100644
> --- a/arch/arm/mach-davinci/board-mityomapl138.c
> +++ b/arch/arm/mach-davinci/board-mityomapl138.c
> @@ -574,5 +574,4 @@ MACHINE_START(MITYOMAPL138, "MityDSP-L138/MityARM-1808")
>  	.init_machine	= mityomapl138_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= da8xx_restart,
>  MACHINE_END
> diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c
> index 925ada1..ff871a0 100644
> --- a/arch/arm/mach-davinci/board-neuros-osd2.c
> +++ b/arch/arm/mach-davinci/board-neuros-osd2.c
> @@ -231,5 +231,4 @@ MACHINE_START(NEUROS_OSD2, "Neuros OSD2")
>  	.init_machine = davinci_ntosd2_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= davinci_restart,
>  MACHINE_END
> diff --git a/arch/arm/mach-davinci/board-omapl138-hawk.c b/arch/arm/mach-davinci/board-omapl138-hawk.c
> index c1277b3..bc8a747 100644
> --- a/arch/arm/mach-davinci/board-omapl138-hawk.c
> +++ b/arch/arm/mach-davinci/board-omapl138-hawk.c
> @@ -338,6 +338,5 @@ MACHINE_START(OMAPL138_HAWKBOARD, "AM18x/OMAP-L138 Hawkboard")
>  	.init_machine	= omapl138_hawk_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= da8xx_restart,
>  	.reserve	= da8xx_rproc_reserve_cma,
>  MACHINE_END
> diff --git a/arch/arm/mach-davinci/board-sffsdr.c b/arch/arm/mach-davinci/board-sffsdr.c
> index 4038de8..2922da9 100644
> --- a/arch/arm/mach-davinci/board-sffsdr.c
> +++ b/arch/arm/mach-davinci/board-sffsdr.c
> @@ -154,5 +154,4 @@ MACHINE_START(SFFSDR, "Lyrtech SFFSDR")
>  	.init_machine = davinci_sffsdr_init,
>  	.init_late	= davinci_init_late,
>  	.dma_zone_size	= SZ_128M,
> -	.restart	= davinci_restart,
>  MACHINE_END
> diff --git a/arch/arm/mach-davinci/clock.h b/arch/arm/mach-davinci/clock.h
> index aea4f14..a0b559e 100644
> --- a/arch/arm/mach-davinci/clock.h
> +++ b/arch/arm/mach-davinci/clock.h
> @@ -131,9 +131,6 @@ void davinci_clk_enable(struct davinci_clk *clk);
>  void davinci_clk_disable(struct davinci_clk *clk);
>  int davinci_clk_register(struct davinci_clk *clk);
>  
> -extern struct platform_device davinci_wdt_device;
> -extern void davinci_watchdog_reset(struct platform_device *);
> -
>  static inline struct davinci_clk *to_davinci_clk(struct clk_hw *hw)
>  {
>  	if (IS_ERR_OR_NULL(hw))
> diff --git a/arch/arm/mach-davinci/da8xx-dt.c b/arch/arm/mach-davinci/da8xx-dt.c
> index 3630f0a..ab199f4 100644
> --- a/arch/arm/mach-davinci/da8xx-dt.c
> +++ b/arch/arm/mach-davinci/da8xx-dt.c
> @@ -100,7 +100,6 @@ DT_MACHINE_START(DA850_DT, "Generic DA850/OMAP-L138/AM18x")
>  	.init_machine	= da850_init_machine,
>  	.dt_compat	= da850_boards_compat,
>  	.init_late	= davinci_init_late,
> -	.restart	= da8xx_restart,
>  MACHINE_END
>  
>  #endif
> diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
> index 6724a8d..272e12e 100644
> --- a/arch/arm/mach-davinci/devices-da8xx.c
> +++ b/arch/arm/mach-davinci/devices-da8xx.c
> @@ -371,19 +371,6 @@ static struct platform_device da8xx_wdt_device = {
>  	.resource	= da8xx_watchdog_resources,
>  };
>  
> -void da8xx_restart(enum reboot_mode mode, const char *cmd)
> -{
> -	struct device *dev;
> -
> -	dev = bus_find_device_by_name(&platform_bus_type, NULL, "davinci-wdt");
> -	if (!dev) {
> -		pr_err("%s: failed to find watchdog device\n", __func__);
> -		return;
> -	}
> -
> -	davinci_watchdog_reset(to_platform_device(dev));
> -}
> -
>  int __init da8xx_register_watchdog(void)
>  {
>  	return platform_device_register(&da8xx_wdt_device);
> diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c
> index 3ae70f2..0edda40 100644
> --- a/arch/arm/mach-davinci/devices.c
> +++ b/arch/arm/mach-davinci/devices.c
> @@ -282,18 +282,13 @@ static struct resource wdt_resources[] = {
>  	},
>  };
>  
> -struct platform_device davinci_wdt_device = {
> +static struct platform_device davinci_wdt_device = {
>  	.name		= "davinci-wdt",
>  	.id		= -1,
>  	.num_resources	= ARRAY_SIZE(wdt_resources),
>  	.resource	= wdt_resources,
>  };
>  
> -void davinci_restart(enum reboot_mode mode, const char *cmd)
> -{
> -	davinci_watchdog_reset(&davinci_wdt_device);
> -}
> -
>  int davinci_init_wdt(void)
>  {
>  	return platform_device_register(&davinci_wdt_device);
> diff --git a/arch/arm/mach-davinci/include/mach/common.h b/arch/arm/mach-davinci/include/mach/common.h
> index 69a0ad9..f0d5e858 100644
> --- a/arch/arm/mach-davinci/include/mach/common.h
> +++ b/arch/arm/mach-davinci/include/mach/common.h
> @@ -80,7 +80,6 @@ extern struct davinci_soc_info davinci_soc_info;
>  
>  extern void davinci_common_init(const struct davinci_soc_info *soc_info);
>  extern void davinci_init_ide(void);
> -void davinci_restart(enum reboot_mode mode, const char *cmd);
>  void davinci_init_late(void);
>  
>  #ifdef CONFIG_DAVINCI_RESET_CLOCKS
> diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
> index dd12e39..3481a0d 100644
> --- a/arch/arm/mach-davinci/include/mach/da8xx.h
> +++ b/arch/arm/mach-davinci/include/mach/da8xx.h
> @@ -121,7 +121,6 @@ int da850_register_vpif_display
>  			(struct vpif_display_config *display_config);
>  int da850_register_vpif_capture
>  			(struct vpif_capture_config *capture_config);
> -void da8xx_restart(enum reboot_mode mode, const char *cmd);
>  void da8xx_rproc_reserve_cma(void);
>  int da8xx_register_rproc(void);
>  int da850_register_gpio(void);
> diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
> index 034f865..1bb991a 100644
> --- a/arch/arm/mach-davinci/time.c
> +++ b/arch/arm/mach-davinci/time.c
> @@ -80,13 +80,6 @@ enum {
>  #define TGCR_UNRESET                 0x1
>  #define TGCR_RESET_MASK              0x3
>  
> -#define WDTCR_WDEN_SHIFT             14
> -#define WDTCR_WDEN_DISABLE           0x0
> -#define WDTCR_WDEN_ENABLE            0x1
> -#define WDTCR_WDKEY_SHIFT            16
> -#define WDTCR_WDKEY_SEQ0             0xa5c6
> -#define WDTCR_WDKEY_SEQ1             0xda7e
> -
>  struct timer_s {
>  	char *name;
>  	unsigned int id;
> @@ -409,53 +402,3 @@ void __init davinci_timer_init(void)
>  	for (i=0; i< ARRAY_SIZE(timers); i++)
>  		timer32_config(&timers[i]);
>  }
> -
> -/* reset board using watchdog timer */
> -void davinci_watchdog_reset(struct platform_device *pdev)
> -{
> -	u32 tgcr, wdtcr;
> -	void __iomem *base;
> -	struct clk *wd_clk;
> -
> -	base = ioremap(pdev->resource[0].start, SZ_4K);
> -	if (WARN_ON(!base))
> -		return;
> -
> -	wd_clk = clk_get(&pdev->dev, NULL);
> -	if (WARN_ON(IS_ERR(wd_clk)))
> -		return;
> -	clk_prepare_enable(wd_clk);
> -
> -	/* disable, internal clock source */
> -	__raw_writel(0, base + TCR);
> -
> -	/* reset timer, set mode to 64-bit watchdog, and unreset */
> -	tgcr = 0;
> -	__raw_writel(tgcr, base + TGCR);
> -	tgcr = TGCR_TIMMODE_64BIT_WDOG << TGCR_TIMMODE_SHIFT;
> -	tgcr |= (TGCR_UNRESET << TGCR_TIM12RS_SHIFT) |
> -		(TGCR_UNRESET << TGCR_TIM34RS_SHIFT);
> -	__raw_writel(tgcr, base + TGCR);
> -
> -	/* clear counter and period regs */
> -	__raw_writel(0, base + TIM12);
> -	__raw_writel(0, base + TIM34);
> -	__raw_writel(0, base + PRD12);
> -	__raw_writel(0, base + PRD34);
> -
> -	/* put watchdog in pre-active state */
> -	wdtcr = __raw_readl(base + WDTCR);
> -	wdtcr = (WDTCR_WDKEY_SEQ0 << WDTCR_WDKEY_SHIFT) |
> -		(WDTCR_WDEN_ENABLE << WDTCR_WDEN_SHIFT);
> -	__raw_writel(wdtcr, base + WDTCR);
> -
> -	/* put watchdog in active state */
> -	wdtcr = (WDTCR_WDKEY_SEQ1 << WDTCR_WDKEY_SHIFT) |
> -		(WDTCR_WDEN_ENABLE << WDTCR_WDEN_SHIFT);
> -	__raw_writel(wdtcr, base + WDTCR);
> -
> -	/* write an invalid value to the WDKEY field to trigger
> -	 * a watchdog reset */
> -	wdtcr = 0x00004000;
> -	__raw_writel(wdtcr, base + WDTCR);
> -}

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

* Re: [PATCH 0/2] ARM: davinici: move watchdog restart from mach to drivers
  2017-12-11 17:21 [PATCH 0/2] ARM: davinici: move watchdog restart from mach to drivers David Lechner
  2017-12-11 17:21 ` [PATCH 1/2] watchdog: davinci_wdt: add restart function David Lechner
  2017-12-11 17:21 ` [PATCH 2/2] ARM: davinci: remove watchdog reset David Lechner
@ 2017-12-19 10:44 ` Sekhar Nori
  2 siblings, 0 replies; 6+ messages in thread
From: Sekhar Nori @ 2017-12-19 10:44 UTC (permalink / raw)
  To: David Lechner, Wim Van Sebroeck
  Cc: linux-arm-kernel, linux-watchdog, Kevin Hilman, Guenter Roeck,
	linux-kernel

Hi David,

On Monday 11 December 2017 10:51 PM, David Lechner wrote:
> This series moves the watchdog restart code from arch/arm/mach-davinci
> to drivers/watchdog.
> 
> Tested working on LEGO MINDSTORMS EV3 (TI AM1808 processor).

The patches look good to me. I also tested them on keystone-k2hk-evm and
da850-lcdk board. Thanks for the much needed clean-up!

Hi Wim,

How do you want to handle this series? Patch 2/2 definitely needs to go
through my tree as it will clash with other code I am queuing.

I can either take 1/2 also through ARM-SoC with your ack (preferred) or
if you give me an immutable commit/tag over v4.15-rc1, I can merge that
to preserve bisect-ability.

Thanks,
Sekhar

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

end of thread, other threads:[~2017-12-19 10:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-11 17:21 [PATCH 0/2] ARM: davinici: move watchdog restart from mach to drivers David Lechner
2017-12-11 17:21 ` [PATCH 1/2] watchdog: davinci_wdt: add restart function David Lechner
2017-12-11 23:15   ` Guenter Roeck
2017-12-11 17:21 ` [PATCH 2/2] ARM: davinci: remove watchdog reset David Lechner
2017-12-14 14:35   ` [2/2] " Guenter Roeck
2017-12-19 10:44 ` [PATCH 0/2] ARM: davinici: move watchdog restart from mach to drivers Sekhar Nori

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).