watchdog: dt: add support for the timeout-sec dt property
Subsystems (7)
v5 cover watchdog: dt: add support for the timeout-sec dt property
Hi all,
this patchset add the timeout-sec property to the watchdog core, to the at91sam9_wdt driver and on all framework enabled watchdog driver with dt support.
This patchset depends on the patchset already sent:
"[PATCH v9 0/3 RESEND] watchdog: at91sam9_wdt: add device tree support"
The at91sam9_wdt is tested on evk-pr3,
the other drivers are compile tested only.
changes:
v5:
- fix codestyle for compilance ti checkpatch.pl about "ERROR: do not initialise statics to 0 or NULL"
for s3c2410_wdt.c:56 and at91sam9_wdt.c:63
v4:
- add of_get_timeout_sec
- add s3c2410_wdt driver
- split driver patch
- fixed watchdog_init_timeout handling of min_timeout and max_timeout
v3:
- rename watchdog_probe_dt_timeout -> watchdog_init_timeout
- move the watchdog_init_timeout function from inline to watchdog_core.c
- add timeout parameter handling code to watchdog_init_timeout
- add timeout-sec property to the pnx4008-wdt driver
- add two small commit for fixup and cleanup
v2:
- change "timeout" to "timeout-sec" as asked by Jean-Christophe
- at91sam9_wdt: use the new helper function
- at91sam9_wdt: add bounds checking
- watchdog.h: add bounds checking
Fabio Porcedda (8):
dt: add helper inline for retrieving timeout-sec property
watchdog: core: dt: add support for the timeout-sec dt property
watchdog: orion_wdt: add timeout-sec property binding
watchdog: pnx4008: add timeout-sec property binding
watchdog: s3c2410_wdt: add timeout-sec property binding
watchdog: at91sam9_wdt: add timeout-sec property binding
watchdog: orion_wdt: move the min_timeout initialization
watchdog: WatchDog Timer Driver Core - fix comment
.../devicetree/bindings/watchdog/atmel-wdt.txt | 4 +++ .../devicetree/bindings/watchdog/marvel.txt | 5 +++ .../devicetree/bindings/watchdog/pnx4008-wdt.txt | 4 +++ .../devicetree/bindings/watchdog/samsung-wdt.txt | 3 ++ Documentation/watchdog/watchdog-kernel-api.txt | 10 ++++++ drivers/watchdog/Kconfig | 1 + drivers/watchdog/at91sam9_wdt.c | 16 ++++++++-- drivers/watchdog/orion_wdt.c | 10 +++--- drivers/watchdog/pnx4008_wdt.c | 7 ++-- drivers/watchdog/s3c2410_wdt.c | 6 ++-- drivers/watchdog/watchdog_core.c | 37 ++++++++++++++++++++++ include/linux/of.h | 11 +++++++ include/linux/watchdog.h | 5 ++- 13 files changed, 103 insertions(+), 16 deletions(-)
Signature · 1 line
1.8.0
PATCH v5 1/8 dt: add helper inline for retrieving timeout-sec property
The first user of this function is the watchdog framework.
--- include/linux/of.h | 11 +++++++++++ 1 file changed, 11 insertions(+)
include/linux/of.h +11 -0
@@ -477,4 +477,15 @@ static inline int of_property_read_u32(const struct device_node *np, return of_property_read_u32_array(np, propname, out_value, 1); } +/** +* of_get_timeout_sec() - Helper to read the timeout_sec property +* @np: device node from which the property value is to be read. +* @timeout: adress of the output value +*/ +static inline int of_get_timeout_sec (const struct device_node *np, +u32 *timeout) +{ +return of_property_read_u32 (np,"timeout-sec" , timeout); +} +#endif /* _LINUX_OF_H */
Signature · 1 line
1.8.0
PATCH v5 1/8 dt: add helper inline for retrieving timeout-sec property
Quoted 1 line · Fabio Porcedda
The first user of this function is the watchdog framework.
I still have issues with this. In addition to questionable usefulness outside the watchdog framework, I'm not even sure this is right for watchdog framework. Watchdog timeout is not a description of h/w, but user configuration. I think the existing mechanisms of module param or kernel cmdline is the right way to handle this.
Rob
Quoted 28 lines
Signed-off-by Fabio Porcedda <[email protected]>Cc Grant Likely <[email protected]>Cc Rob Herring <[email protected]>--- include/linux/of.h | 11 +++++++++++ 1 file changed, 11 insertions(+)include/linux/of.h +11
-0@@ -477,4 +477,15 @@ static inline int of_property_read_u32(const struct device_node *np, return of_property_read_u32_array(np, propname, out_value, 1); } +/** +* of_get_timeout_sec() - Helper to read the timeout_sec property +* @np: device node from which the property value is to be read. +* @timeout: adress of the output value +*/ +static inline int of_get_timeout_sec (const struct device_node *np, +u32 *timeout) +{ +return of_property_read_u32 (np,"timeout-sec" , timeout); +} +#endif /* _LINUX_OF_H */
PATCH v5 1/8 dt: add helper inline for retrieving timeout-sec property
Quoted 8 lines · Rob Herring
Quoted 1 line · Fabio Porcedda
The first user of this function is the watchdog framework.
I still have issues with this. In addition to questionable usefulness outside the watchdog framework, I'm not even sure this is right for watchdog framework. Watchdog timeout is not a description of h/w, but user configuration. I think the existing mechanisms of module param or kernel cmdline is the right way to handle this.
Hi Rob,
thanks for the review.
If it's fine I will send a v6 version without the of_get_timeout_sec function, I hope it's fine for Jean-Christophe too, he asked me to add that function.
About the right way to handle this parameter,
obviously I was thinking that was a good idea to add this binding, Even some maintainers have suggested that was a good idea.
Regards
Quoted 18 lines
Rob
Quoted 15 lines
Signed-off-by Fabio Porcedda <[email protected]>Cc Grant Likely <[email protected]>Cc Rob Herring <[email protected]>--- include/linux/of.h | 11 +++++++++++ 1 file changed, 11 insertions(+)include/linux/of.h +0
-0@@ -477,4 +477,15 @@ static inline int of_property_read_u32(const struct device_node *np,return of_property_read_u32_array (np, propname, out_value,1 ); }
Quoted 14 lines
include/linux/of.h static inline int of_property_read_u32(const struct device_node *np, · line 491
Quoted 13 lines
include/linux/of.h +11
-0+/** +* of_get_timeout_sec() - Helper to read the timeout_sec property +* @np: device node from which the property value is to be read. +* @timeout: adress of the output value +*/ +static inline int of_get_timeout_sec (const struct device_node *np, +u32 *timeout) +{ +return of_property_read_u32 (np,"timeout-sec" , timeout); +} +#endif /* _LINUX_OF_H */
--
Fabio Porcedda
Software Developer - R&D Cagliari
Telit Communications S.p.A.
PATCH v5 2/8 watchdog: core: dt: add support for the timeout-sec dt property
In reply to Fabio Porcedda--- Documentation/watchdog/watchdog-kernel-api.txt | 10 +++++++ drivers/watchdog/watchdog_core.c | 37 ++++++++++++++++++++++++++ include/linux/watchdog.h | 3 +++ 3 files changed, 50 insertions(+)
Documentation/watchdog/watchdog-kernel-api.txt +10 -0
@@ -212,3 +212,13 @@ driver specific data to and a pointer to the data itself. The watchdog_get_drvdata function allows you to retrieve driver specific data. The argument of this function is the watchdog device where you want to retrieve data from. The function returns the pointer to the driver specific data. + +To initialize the timeout field use the following function: + +extern void watchdog_init_timeout(struct watchdog_device *wdd, + unsigned int parm_timeout, + struct device_node *node); + +The watchdog_init_timeout function allows you to initialize the timeout field +using the module timeout parameter or retrieving the timeout-sec property from +the device tree.
drivers/watchdog/watchdog_core.c +37 -0
@@ -36,12 +36,49 @@#include <linux/init.h> /* For __init/__exit/... */ #include <linux/idr.h> /* For ida_* macros */ #include <linux/err.h> /* For IS_ERR macros */ +#include <linux/of.h> /* For of_get_timeout_sec */ #include "watchdog_core.h" /* For watchdog_dev_register/... */ static DEFINE_IDA (watchdog_ida);static struct class *watchdog_class; +static bool watchdog_is_valid_timeout (struct watchdog_device *wdd, +unsigned int t) + +{ +if (wdd->min_timeout < wdd->max_timeout) +return (wdd->min_timeout <= t) && (t <= wdd->max_timeout); +else +return (t >0 ); +} + +/** +* watchdog_init_timeout() - initialize the timeout field +* @parm: timeout module parameter, it takes precedence over the +* timeout-sec property. +* @node: Retrieve the timeout-sec property only if the parm_timeout +* is out of bounds. +*/ +void watchdog_init_timeout (struct watchdog_device *wdd,unsigned int parm, +struct device_node *node) +{ +unsigned int t =0 ; + +if (watchdog_is_valid_timeout (wdd, parm)) { + wdd->timeout = parm; +return ; + } + +/* try to get the timeout_sec property */ +if (!node) +return ; +of_get_timeout_sec (node, &t); +if (watchdog_is_valid_timeout (wdd, t)) + wdd->timeout = t; +} +EXPORT_SYMBOL_GPL (watchdog_init_timeout); +/** * watchdog_register_device() - register a watchdog device * @wdd: watchdog device
include/linux/watchdog.h +3 -0
@@ -130,6 +130,9 @@ static inline void *watchdog_get_drvdata(struct watchdog_device *wdd) }/* drivers/watchdog/core/watchdog_core.c */ +extern void watchdog_init_timeout (struct watchdog_device *wdd, +unsigned int parm_timeout, +struct device_node *node);extern int watchdog_register_device (struct watchdog_device *);extern void watchdog_unregister_device (struct watchdog_device *);
Signature · 1 line
1.8.0
PATCH v5 3/8 watchdog: orion_wdt: add timeout-sec property binding
In reply to Fabio PorceddaOnly compile tested.
--- Documentation/devicetree/bindings/watchdog/marvel.txt | 5 +++++ drivers/watchdog/orion_wdt.c | 8 +++----- 2 files changed, 8 insertions(+), 5 deletions(-)
Documentation/devicetree/bindings/watchdog/marvel.txt +5 -0
@@ -5,10 +5,15 @@ Required Properties: - Compatibility : "marvell,orion-wdt" - reg : Address of the timer registers +Optional properties: + +- timeout-sec : Contains the watchdog timeout in seconds + Example: wdt at 20300 { compatible = "marvell,orion-wdt"; reg = <0x20300 0x28>; + timeout-sec = <10>; status = "okay"; };
drivers/watchdog/orion_wdt.c +3 -5
@@ -162,12 +162,10 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev) wdt_max_duration =WDT_MAX_CYCLE_COUNT / wdt_tclk; -if ((heartbeat <1 ) || (heartbeat > wdt_max_duration)) - heartbeat = wdt_max_duration; - - orion_wdt.timeout = heartbeat; orion_wdt.min_timeout =1 ; + orion_wdt.timeout = wdt_max_duration; orion_wdt.max_timeout = wdt_max_duration; +watchdog_init_timeout (&orion_wdt, heartbeat, pdev->dev.of_node);watchdog_set_nowayout (&orion_wdt, nowayout); ret =watchdog_register_device (&orion_wdt);
@@ -177,7 +175,7 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev) }pr_info ("Initial timeout %d sec%s\n" , - heartbeat, nowayout ?", nowayout" :"" ); + orion_wdt.timeout, nowayout ?", nowayout" :"" );return 0 ; }
Signature · 1 line
1.8.0
PATCH v5 3/8 watchdog: orion_wdt: add timeout-sec property binding
Quoted 36 lines · Fabio Porcedda
Only compile tested.
Signed-off-by Fabio Porcedda <[email protected]>Cc Jason Cooper <[email protected]>Cc Andrew Lunn <[email protected]>--- Documentation/devicetree/bindings/watchdog/marvel.txt | 5 +++++ drivers/watchdog/orion_wdt.c | 8 +++----- 2 files changed, 8 insertions(+), 5 deletions(-)Documentation/devicetree/bindings/watchdog/marvel.txt +5
-0@@ -5,10 +5,15 @@ Required Properties: - Compatibility : "marvell,orion-wdt" - reg : Address of the timer registers +Optional properties: + +- timeout-sec : Contains the watchdog timeout in seconds + Example: wdt at 20300 { compatible = "marvell,orion-wdt"; reg = <0x20300 0x28>; + timeout-sec = <10>; status = "okay"; };drivers/watchdog/orion_wdt.c +0
-0@@ -162,12 +162,10 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev)
drivers/watchdog/orion_wdt.c static int __devinit orion_wdt_probe(struct platform_device *pdev) · line 168
Quoted 10 lines
drivers/watchdog/orion_wdt.c +2
-4wdt_max_duration =WDT_MAX_CYCLE_COUNT / wdt_tclk; -if ((heartbeat <1 ) || (heartbeat > wdt_max_duration)) - heartbeat = wdt_max_duration; - - orion_wdt.timeout = heartbeat; orion_wdt.min_timeout =1 ; + orion_wdt.timeout = wdt_max_duration; orion_wdt.max_timeout = wdt_max_duration; +watchdog_init_timeout (&orion_wdt, heartbeat, pdev->dev.of_node);
Hi Fabio,
There are many boards using pdata, !CONFIG_OF. Have you compile-tested this without CONFIG_OF?
thx,
Jason.
Quoted 20 lines
drivers/watchdog/orion_wdt.c +1
-1watchdog_set_nowayout (&orion_wdt, nowayout); ret =watchdog_register_device (&orion_wdt);@@ -177,7 +175,7 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev) }pr_info ("Initial timeout %d sec%s\n" , - heartbeat, nowayout ?", nowayout" :"" ); + orion_wdt.timeout, nowayout ?", nowayout" :"" );return 0 ; }Signature · 7 lines
1.8.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel at lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
A message that is not in the archive (sent off-list or not yet received): 20121119160643.GI22106-u4khhh1J0LxI1Ri9qeTfzeTW4wlIGRCZ@public.gmane.org
Re: [PATCH v5 3/8] watchdog: orion_wdt: add timeout-sec property binding
Quoted 50 lines · Jason Cooper
Review
Quoted 11 lines · Fabio Porcedda
Only compile tested.
Signed-off-by Fabio Porcedda <[email protected]>Cc Jason Cooper <[email protected]>Cc Andrew Lunn <[email protected]>--- Documentation/devicetree/bindings/watchdog/marvel.txt | 5 +++++ drivers/watchdog/orion_wdt.c | 8 +++----- 2 files changed, 8 insertions(+), 5 deletions(-)(quoted diff) +0
-0
b/Documentation/devicetree/bindings/watchdog/marvel.txtdrivers/watchdog/orion_wdt.c static int __devinit orion_wdt_probe(struct
Quoted 24 lines
index 0b2503a..5dc8d30 100644
Documentation/devicetree/bindings/watchdog/marvel.txt +5
-0@@ -5,10 +5,15 @@ Required Properties: - Compatibility : "marvell,orion-wdt" - reg : Address of the timer registers +Optional properties: + +- timeout-sec : Contains the watchdog timeout in seconds + Example: wdt@20300 { compatible = "marvell,orion-wdt"; reg = <0x20300 0x28>; + timeout-sec = <10>; status = "okay"; };drivers/watchdog/orion_wdt.c +0
-0@@ -162,12 +162,10 @@ static int __devinit orion_wdt_probe(struct
platform_device*pdev)drivers/watchdog/orion_wdt.c static int __devinit orion_wdt_probe(struct platform_device *pdev) · line 168
Quoted 11 lines
drivers/watchdog/orion_wdt.c +2
-4wdt_max_duration =WDT_MAX_CYCLE_COUNT / wdt_tclk; -if ((heartbeat <1 ) || (heartbeat > wdt_max_duration)) - heartbeat = wdt_max_duration; - - orion_wdt.timeout = heartbeat; orion_wdt.min_timeout =1 ; + orion_wdt.timeout = wdt_max_duration; orion_wdt.max_timeout = wdt_max_duration; +watchdog_init_timeout (&orion_wdt, heartbeat, pdev->dev.of_node);
Quoted 5 lines
Hi Fabio,
There are many boards using pdata, !CONFIG_OF. Have you compile-tested this without
CONFIG_OF?
Hi Jason,
Quoted 26 lines
thx,
Jason.
drivers/watchdog/orion_wdt.c static int __devinit orion_wdt_probe(struct
Quoted 4 lines
drivers/watchdog/orion_wdt.c +0
-0watchdog_set_nowayout (&orion_wdt, nowayout); ret =watchdog_register_device (&orion_wdt);@@ -177,7 +175,7 @@ static int __devinit orion_wdt_probe(struct
platform_device*pdev)Quoted 16 lines
drivers/watchdog/orion_wdt.c +1
-2}pr_info ("Initial timeout %d sec%s\n" , - heartbeat, nowayout ?", nowayout" :"" ); + orion_wdt.timeout, nowayout ?", nowayout" :"" );return 0 ; } --1.8.0
_______________________________________________
linux-arm-kernel mailing list linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
I've tested with and without the CONFIG_OF define.
The first time I’ve used the kirkwood_defconfig without modifications, the second time I’ve enabled only the CONFIG_MACH_SHEEVAPLUG and disabled USE_OF.
In both cases the orion_wdt driver compile without any warning.
Thanks for the review.
Best regards
Signature · 1 line
Fabio Porcedda
_______________________________________________
devicetree-discuss mailing list devicetree-discuss-uLR06cmDAlY/[email protected]
https://lists.ozlabs.org/listinfo/devicetree-discuss
PATCH v5 3/8 watchdog: orion_wdt: add timeout-sec property binding
In reply to Jason CooperQuoted 50 lines · Jason Cooper
Quoted 36 lines · Fabio Porcedda
Only compile tested.
Signed-off-by Fabio Porcedda <[email protected]>Cc Jason Cooper <[email protected]>Cc Andrew Lunn <[email protected]>--- Documentation/devicetree/bindings/watchdog/marvel.txt | 5 +++++ drivers/watchdog/orion_wdt.c | 8 +++----- 2 files changed, 8 insertions(+), 5 deletions(-)Documentation/devicetree/bindings/watchdog/marvel.txt +5
-0@@ -5,10 +5,15 @@ Required Properties: - Compatibility : "marvell,orion-wdt" - reg : Address of the timer registers +Optional properties: + +- timeout-sec : Contains the watchdog timeout in seconds + Example: wdt at 20300 { compatible = "marvell,orion-wdt"; reg = <0x20300 0x28>; + timeout-sec = <10>; status = "okay"; };drivers/watchdog/orion_wdt.c +0
-0@@ -162,12 +162,10 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev)drivers/watchdog/orion_wdt.c static int __devinit orion_wdt_probe(struct platform_device *pdev) · line 168
Quoted 10 lines
drivers/watchdog/orion_wdt.c +2
-4wdt_max_duration =WDT_MAX_CYCLE_COUNT / wdt_tclk; -if ((heartbeat <1 ) || (heartbeat > wdt_max_duration)) - heartbeat = wdt_max_duration; - - orion_wdt.timeout = heartbeat; orion_wdt.min_timeout =1 ; + orion_wdt.timeout = wdt_max_duration; orion_wdt.max_timeout = wdt_max_duration; +watchdog_init_timeout (&orion_wdt, heartbeat, pdev->dev.of_node);Hi Fabio,
Quoted 2 lines
There are many boards using pdata, !CONFIG_OF. Have you compile-tested this without
CONFIG_OF?
Hi Jason,
I've tested with and without the CONFIG_OF define.
The first time I?ve used the kirkwood_defconfig without modifications, the second time I?ve enabled only the CONFIG_MACH_SHEEVAPLUG and disabled USE_OF.
In both cases the orion_wdt driver compile without any warning.
Thanks for the review.
Best regards
Quoted 16 lines
thx,
Jason.
Quoted 12 lines
drivers/watchdog/orion_wdt.c +1
-1watchdog_set_nowayout (&orion_wdt, nowayout); ret =watchdog_register_device (&orion_wdt);@@ -177,7 +175,7 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev) }pr_info ("Initial timeout %d sec%s\n" , - heartbeat, nowayout ?", nowayout" :"" ); + orion_wdt.timeout, nowayout ?", nowayout" :"" );return 0 ; }
Quoted 8 lines
Quoted 8 lines
--
1.8.0_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
--
Fabio Porcedda
PATCH v5 3/8 watchdog: orion_wdt: add timeout-sec property binding
Quoted 58 lines · Fabio Porcedda
Quoted 50 lines · Jason Cooper
Quoted 36 lines · Fabio Porcedda
Only compile tested.
Signed-off-by Fabio Porcedda <[email protected]>Cc Jason Cooper <[email protected]>Cc Andrew Lunn <[email protected]>--- Documentation/devicetree/bindings/watchdog/marvel.txt | 5 +++++ drivers/watchdog/orion_wdt.c | 8 +++----- 2 files changed, 8 insertions(+), 5 deletions(-)Documentation/devicetree/bindings/watchdog/marvel.txt +5
-0@@ -5,10 +5,15 @@ Required Properties: - Compatibility : "marvell,orion-wdt" - reg : Address of the timer registers +Optional properties: + +- timeout-sec : Contains the watchdog timeout in seconds + Example: wdt at 20300 { compatible = "marvell,orion-wdt"; reg = <0x20300 0x28>; + timeout-sec = <10>; status = "okay"; };drivers/watchdog/orion_wdt.c +0
-0@@ -162,12 +162,10 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev)drivers/watchdog/orion_wdt.c static int __devinit orion_wdt_probe(struct platform_device *pdev) · line 168
Quoted 10 lines
drivers/watchdog/orion_wdt.c +2
-4wdt_max_duration =WDT_MAX_CYCLE_COUNT / wdt_tclk; -if ((heartbeat <1 ) || (heartbeat > wdt_max_duration)) - heartbeat = wdt_max_duration; - - orion_wdt.timeout = heartbeat; orion_wdt.min_timeout =1 ; + orion_wdt.timeout = wdt_max_duration; orion_wdt.max_timeout = wdt_max_duration; +watchdog_init_timeout (&orion_wdt, heartbeat, pdev->dev.of_node);Hi Fabio,
Quoted 2 lines
There are many boards using pdata, !CONFIG_OF. Have you compile-tested this without
CONFIG_OF?Hi Jason,
I've tested with and without the
CONFIG_OFdefine.
Quoted 7 lines
The first time I?ve used the
kirkwood_defconfigwithout modifications, the second time I?ve enabled only theCONFIG_MACH_SHEEVAPLUGand disabledUSE_OF.In both cases the
orion_wdtdriver compile without any warning.Thanks for the review.
for the orion_wdt bits.
thx,
Jason.
PATCH v5 4/8 watchdog: pnx4008: add timeout-sec property binding
In reply to Fabio PorceddaOnly compile tested.
--- Documentation/devicetree/bindings/watchdog/pnx4008-wdt.txt | 4 ++++ drivers/watchdog/pnx4008_wdt.c | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-)
Documentation/devicetree/bindings/watchdog/pnx4008-wdt.txt +4 -0
@@ -5,9 +5,13 @@ Required properties: - reg: physical base address of the controller and length of memory mapped region. +Optional properties: +- timeout-sec: contains the watchdog timeout in seconds. + Example: watchdog at 4003C000 { compatible = "nxp,pnx4008-wdt"; reg = <0x4003C000 0x1000>; + timeout-sec = <10>; };
drivers/watchdog/pnx4008_wdt.c +3 -4
@@ -142,6 +142,7 @@ static const struct watchdog_ops pnx4008_wdt_ops = {static struct watchdog_device pnx4008_wdd = { .info = &pnx4008_wdt_ident, .ops = &pnx4008_wdt_ops, + .timeout =DEFAULT_HEARTBEAT , .min_timeout =1 , .max_timeout =MAX_HEARTBEAT , };
@@ -151,8 +152,7 @@ static int __devinit pnx4008_wdt_probe(struct platform_device *pdev)struct resource *r;int ret =0 ; -if (heartbeat <1 || heartbeat >MAX_HEARTBEAT ) - heartbeat =DEFAULT_HEARTBEAT ; +watchdog_init_timeout (&pnx4008_wdd, heartbeat, pdev->dev.of_node); r =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); wdt_base =devm_request_and_ioremap (&pdev->dev, r);
@@ -167,7 +167,6 @@ static int __devinit pnx4008_wdt_probe(struct platform_device *pdev)if (ret) goto out; - pnx4008_wdd.timeout = heartbeat; pnx4008_wdd.bootstatus = (readl (WDTIM_RES (wdt_base)) &WDOG_RESET ) ?WDIOF_CARDRESET :0 ;watchdog_set_nowayout (&pnx4008_wdd, nowayout);
@@ -181,7 +180,7 @@ static int __devinit pnx4008_wdt_probe(struct platform_device *pdev) }dev_info (&pdev->dev,"PNX4008 Watchdog Timer: heartbeat %d sec\n" , - heartbeat); + pnx4008_wdd.timeout);return 0 ;
Signature · 1 line
1.8.0
PATCH v5 5/8 watchdog: s3c2410_wdt: add timeout-sec property binding
In reply to Fabio PorceddaOnly compile tested.
--- Documentation/devicetree/bindings/watchdog/samsung-wdt.txt | 3 +++ drivers/watchdog/s3c2410_wdt.c | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-)
Documentation/devicetree/bindings/watchdog/samsung-wdt.txt +3 -0
@@ -9,3 +9,6 @@ Required properties: - reg : base physical address of the controller and length of memory mapped region. - interrupts : interrupt number to the cpu. + +Optional properties: +- timeout-sec : contains the watchdog timeout in seconds.
drivers/watchdog/s3c2410_wdt.c +4 -2
@@ -53,7 +53,7 @@#define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME (15)static bool nowayout =WATCHDOG_NOWAYOUT ; -static int tmr_margin =CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME ; +static int tmr_margin;static int tmr_atboot =CONFIG_S3C2410_WATCHDOG_ATBOOT ;static int soft_noboot;static int debug;
@@ -226,6 +226,7 @@ static struct watchdog_ops s3c2410wdt_ops = {static struct watchdog_device s3c2410_wdd = { .info = &s3c2410_wdt_ident, .ops = &s3c2410wdt_ops, + .timeout =CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME , };/* interrupt handler code */
@@ -365,7 +366,8 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev)/* see if we can actually set the requested timer margin, and if * not, try the default value */ -if (s3c2410wdt_set_heartbeat (&s3c2410_wdd, tmr_margin)) { +watchdog_init_timeout (&s3c2410_wdd, tmr_margin, pdev->dev.of_node); +if (s3c2410wdt_set_heartbeat (&s3c2410_wdd, s3c2410_wdd.timeout)) { started =s3c2410wdt_set_heartbeat (&s3c2410_wdd,CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME );
Signature · 1 line
1.8.0
PATCH v5 6/8 watchdog: at91sam9_wdt: add timeout-sec property binding
In reply to Fabio PorceddaTested on at91sam9260 board (evk-pro3).
--- Documentation/devicetree/bindings/watchdog/atmel-wdt.txt | 4 ++++ drivers/watchdog/Kconfig | 1 + drivers/watchdog/at91sam9_wdt.c | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-)
Documentation/devicetree/bindings/watchdog/atmel-wdt.txt +4 -0
@@ -7,9 +7,13 @@ Required properties: - reg: physical base address of the controller and length of memory mapped region. +Optional properties: +- timeout-sec: contains the watchdog timeout in seconds. + Example: watchdog at fffffd40 { compatible = "atmel,at91sam9260-wdt"; reg = <0xfffffd40 0x10>; + timeout-sec = <10>; };
drivers/watchdog/Kconfig +1 -0
@@ -114,6 +114,7 @@ config AT91RM9200_WATCHDOG config AT91SAM9X_WATCHDOG tristate "AT91SAM9X / AT91CAP9 watchdog" depends on ARCH_AT91 && !ARCH_AT91RM9200 + select WATCHDOG_CORE help Watchdog timer embedded into AT91SAM9X and AT91CAP9 chips. This will reboot your system when the timeout is reached.
drivers/watchdog/at91sam9_wdt.c +13 -3
@@ -57,8 +57,10 @@#define WDT_TIMEOUT (HZ/2)/* User land timeout */ +#define MIN_HEARTBEAT 1 +#define MAX_HEARTBEAT 16#define WDT_HEARTBEAT 15 -static int heartbeat =WDT_HEARTBEAT ; +static int heartbeat;module_param (heartbeat, int,0 ); MODULE_PARM_DESC(heartbeat, "Watchdog heartbeats in seconds. " "(default = " __MODULE_STRING(WDT_HEARTBEAT) ")");
@@ -255,6 +257,12 @@ static struct miscdevice at91wdt_miscdev = { .fops = &at91wdt_fops, }; +static struct watchdog_device at91wdt_wdd__initdata = { + .timeout =WDT_HEARTBEAT , + .min_timeout =MIN_HEARTBEAT , + .max_timeout =MAX_HEARTBEAT , +}; +static int __init at91wdt_probe (struct platform_device *pdev) {struct resource *r;
@@ -273,6 +281,8 @@ static int __init at91wdt_probe(struct platform_device *pdev)return -ENOMEM ; } +watchdog_init_timeout (&at91wdt_wdd, heartbeat, pdev->dev.of_node); +/* Set watchdog */ res =at91_wdt_settimeout (ms_to_ticks (WDT_HW_TIMEOUT *1000 ));if (res)
@@ -282,12 +292,12 @@ static int __init at91wdt_probe(struct platform_device *pdev)if (res)return res; - at91wdt_private.next_heartbeat = jiffies + heartbeat *HZ ; + at91wdt_private.next_heartbeat = jiffies + at91wdt_wdd.timeout *HZ ;setup_timer (&at91wdt_private.timer, at91_ping,0 );mod_timer (&at91wdt_private.timer, jiffies +WDT_TIMEOUT );pr_info ("enabled (heartbeat=%d sec, nowayout=%d)\n" , - heartbeat, nowayout); + at91wdt_wdd.timeout, nowayout);return 0 ; }
Signature · 1 line
1.8.0
PATCH v5 6/8 watchdog: at91sam9_wdt: add timeout-sec property binding
On 11/19/2012 03:10 PM, Fabio Porcedda :
Quoted 5 lines
Tested on at91sam9260 board (evk-pro3).
Signed-off-by Fabio Porcedda <[email protected]>Cc Andrew Victor <[email protected]>Cc Nicolas Ferre <[email protected]>
Seems good:
Quoted 91 lines
Cc Jean-Christophe PLAGNIOL-VILLARD <[email protected]>--- Documentation/devicetree/bindings/watchdog/atmel-wdt.txt | 4 ++++ drivers/watchdog/Kconfig | 1 + drivers/watchdog/at91sam9_wdt.c | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-)Documentation/devicetree/bindings/watchdog/atmel-wdt.txt +4
-0@@ -7,9 +7,13 @@ Required properties: - reg: physical base address of the controller and length of memory mapped region. +Optional properties: +- timeout-sec: contains the watchdog timeout in seconds. + Example: watchdog at fffffd40 { compatible = "atmel,at91sam9260-wdt"; reg = <0xfffffd40 0x10>; + timeout-sec = <10>; };drivers/watchdog/Kconfig +1
-0@@ -114,6 +114,7 @@ config AT91RM9200_WATCHDOG config AT91SAM9X_WATCHDOG tristate "AT91SAM9X / AT91CAP9 watchdog" depends on ARCH_AT91 && !ARCH_AT91RM9200 + select WATCHDOG_CORE help Watchdog timer embedded into AT91SAM9X and AT91CAP9 chips. This will reboot your system when the timeout is reached.drivers/watchdog/at91sam9_wdt.c +13
-3@@ -57,8 +57,10 @@#define WDT_TIMEOUT (HZ/2)/* User land timeout */ +#define MIN_HEARTBEAT 1 +#define MAX_HEARTBEAT 16#define WDT_HEARTBEAT 15 -static int heartbeat =WDT_HEARTBEAT ; +static int heartbeat;module_param (heartbeat, int,0 ); MODULE_PARM_DESC(heartbeat, "Watchdog heartbeats in seconds. " "(default = " __MODULE_STRING(WDT_HEARTBEAT) ")");@@ -255,6 +257,12 @@ static struct miscdevice at91wdt_miscdev = { .fops = &at91wdt_fops, }; +static struct watchdog_device at91wdt_wdd__initdata = { + .timeout =WDT_HEARTBEAT , + .min_timeout =MIN_HEARTBEAT , + .max_timeout =MAX_HEARTBEAT , +}; +static int __init at91wdt_probe (struct platform_device *pdev) {struct resource *r;@@ -273,6 +281,8 @@ static int __init at91wdt_probe(struct platform_device *pdev)return -ENOMEM ; } +watchdog_init_timeout (&at91wdt_wdd, heartbeat, pdev->dev.of_node); +/* Set watchdog */ res =at91_wdt_settimeout (ms_to_ticks (WDT_HW_TIMEOUT *1000 ));if (res)@@ -282,12 +292,12 @@ static int __init at91wdt_probe(struct platform_device *pdev)if (res)return res; - at91wdt_private.next_heartbeat = jiffies + heartbeat *HZ ; + at91wdt_private.next_heartbeat = jiffies + at91wdt_wdd.timeout *HZ ;setup_timer (&at91wdt_private.timer, at91_ping,0 );mod_timer (&at91wdt_private.timer, jiffies +WDT_TIMEOUT );pr_info ("enabled (heartbeat=%d sec, nowayout=%d)\n" , - heartbeat, nowayout); + at91wdt_wdd.timeout, nowayout);return 0 ; }
Signature · 1 line
Nicolas Ferre
PATCH v5 7/8 watchdog: orion_wdt: move the min_timeout initialization
In reply to Fabio PorceddaMove the min_timeout initialization inside the orion_wdt definition.
Only compile tested.
--- drivers/watchdog/orion_wdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/orion_wdt.c +1 -1
@@ -140,6 +140,7 @@ static const struct watchdog_ops orion_wdt_ops = {static struct watchdog_device orion_wdt = { .info = &orion_wdt_info, .ops = &orion_wdt_ops, + .min_timeout =1 , };static int __devinit orion_wdt_probe (struct platform_device *pdev)
@@ -162,7 +163,6 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev) wdt_max_duration =WDT_MAX_CYCLE_COUNT / wdt_tclk; - orion_wdt.min_timeout =1 ; orion_wdt.timeout = wdt_max_duration; orion_wdt.max_timeout = wdt_max_duration;watchdog_init_timeout (&orion_wdt, heartbeat, pdev->dev.of_node);
Signature · 1 line
1.8.0
PATCH v5 7/8 watchdog: orion_wdt: move the min_timeout initialization
Quoted 7 lines · Fabio Porcedda
Move the
min_timeoutinitialization inside theorion_wdtdefinition.Only compile tested.
Signed-off-by Fabio Porcedda <[email protected]>Cc Jason Cooper <[email protected]>Cc Andrew Lunn <[email protected]>
thx,
Jason.
Quoted 32 lines
--- drivers/watchdog/orion_wdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/watchdog/orion_wdt.c +1
-1@@ -140,6 +140,7 @@ static const struct watchdog_ops orion_wdt_ops = {static struct watchdog_device orion_wdt = { .info = &orion_wdt_info, .ops = &orion_wdt_ops, + .min_timeout =1 , };static int __devinit orion_wdt_probe (struct platform_device *pdev)@@ -162,7 +163,6 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev) wdt_max_duration =WDT_MAX_CYCLE_COUNT / wdt_tclk; - orion_wdt.min_timeout =1 ; orion_wdt.timeout = wdt_max_duration; orion_wdt.max_timeout = wdt_max_duration;watchdog_init_timeout (&orion_wdt, heartbeat, pdev->dev.of_node);Signature · 7 lines
1.8.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel at lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH v5 8/8 watchdog: WatchDog Timer Driver Core - fix comment
In reply to Fabio Porcedda--- include/linux/watchdog.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/watchdog.h +1 -1
@@ -129,7 +129,7 @@ static inline void *watchdog_get_drvdata(struct watchdog_device *wdd)return wdd->driver_data; } -/* drivers/watchdog/core/watchdog_core.c */ +/* drivers/watchdog/watchdog_core.c */ extern void watchdog_init_timeout (struct watchdog_device *wdd,unsigned int parm_timeout,struct device_node *node);
Signature · 1 line
1.8.0