* [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
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 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 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: linux-arm-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
* [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 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
* [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: linux-arm-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
* [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: linux-arm-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:44 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).