* [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).