* [RFC PATCH v2 0/2] watchdog: core: dt: add support for the timeout-sec dt property
@ 2012-10-04 8:26 Fabio Porcedda
2012-10-04 8:26 ` [RFC PATCH v2 1/2] " Fabio Porcedda
2012-10-04 8:26 ` [RFC PATCH v2 2/2] watchdog: add timeout-sec property binding to some drivers Fabio Porcedda
0 siblings, 2 replies; 3+ messages in thread
From: Fabio Porcedda @ 2012-10-04 8:26 UTC (permalink / raw)
To: linux-arm-kernel
Hi all,
this patchset add the timeout-sec property to the watchdog core,
in the next revision i will add the pnx4008 and s3c2410 driver.
changes:
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 (2):
watchdog: core: dt: add support for the timeout-sec dt property
watchdog: add timeout-sec property binding to some drivers
.../devicetree/bindings/watchdog/atmel-wdt.txt | 4 ++++
.../devicetree/bindings/watchdog/marvel.txt | 5 +++++
Documentation/watchdog/watchdog-kernel-api.txt | 3 +++
drivers/watchdog/at91sam9_wdt.c | 23 ++++++++++++++++------
drivers/watchdog/orion_wdt.c | 13 ++++++------
include/linux/watchdog.h | 15 ++++++++++++++
6 files changed, 51 insertions(+), 12 deletions(-)
--
1.7.11.3
^ permalink raw reply [flat|nested] 3+ messages in thread
* [RFC PATCH v2 1/2] watchdog: core: dt: add support for the timeout-sec dt property
2012-10-04 8:26 [RFC PATCH v2 0/2] watchdog: core: dt: add support for the timeout-sec dt property Fabio Porcedda
@ 2012-10-04 8:26 ` Fabio Porcedda
2012-10-04 8:26 ` [RFC PATCH v2 2/2] watchdog: add timeout-sec property binding to some drivers Fabio Porcedda
1 sibling, 0 replies; 3+ messages in thread
From: Fabio Porcedda @ 2012-10-04 8:26 UTC (permalink / raw)
To: linux-arm-kernel
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
---
Documentation/watchdog/watchdog-kernel-api.txt | 3 +++
include/linux/watchdog.h | 15 +++++++++++++++
2 files changed, 18 insertions(+)
diff --git a/Documentation/watchdog/watchdog-kernel-api.txt b/Documentation/watchdog/watchdog-kernel-api.txt
index 086638f..35057b2 100644
--- a/Documentation/watchdog/watchdog-kernel-api.txt
+++ b/Documentation/watchdog/watchdog-kernel-api.txt
@@ -212,3 +212,6 @@ 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.
+
+The watchdog_probe_dt_timeout function allows you to retrieve the timeout-sec
+property from the device tree.
diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h
index da70f0f..18af39f 100644
--- a/include/linux/watchdog.h
+++ b/include/linux/watchdog.h
@@ -11,6 +11,7 @@
#include <linux/ioctl.h>
#include <linux/types.h>
+#include <linux/of.h>
#define WATCHDOG_IOCTL_BASE 'W'
@@ -174,6 +175,20 @@ static inline void *watchdog_get_drvdata(struct watchdog_device *wdd)
return wdd->driver_data;
}
+/* Use the following function to retrieve the timeout-sec property from dt */
+static inline void watchdog_probe_dt_timeout(struct watchdog_device *wdd,
+ struct device_node *node)
+{
+ unsigned int t = 0;
+
+ if (!node)
+ return;
+
+ of_property_read_u32(node, "timeout-sec", &t);
+ if ((t >= wdd->min_timeout) && (t <= wdd->max_timeout))
+ wdd->timeout = t;
+}
+
/* drivers/watchdog/core/watchdog_core.c */
extern int watchdog_register_device(struct watchdog_device *);
extern void watchdog_unregister_device(struct watchdog_device *);
--
1.7.11.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [RFC PATCH v2 2/2] watchdog: add timeout-sec property binding to some drivers
2012-10-04 8:26 [RFC PATCH v2 0/2] watchdog: core: dt: add support for the timeout-sec dt property Fabio Porcedda
2012-10-04 8:26 ` [RFC PATCH v2 1/2] " Fabio Porcedda
@ 2012-10-04 8:26 ` Fabio Porcedda
1 sibling, 0 replies; 3+ messages in thread
From: Fabio Porcedda @ 2012-10-04 8:26 UTC (permalink / raw)
To: linux-arm-kernel
The binding is provided by the watchdog core.
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
f2
---
.../devicetree/bindings/watchdog/atmel-wdt.txt | 4 ++++
.../devicetree/bindings/watchdog/marvel.txt | 5 +++++
drivers/watchdog/at91sam9_wdt.c | 23 ++++++++++++++++------
drivers/watchdog/orion_wdt.c | 13 ++++++------
4 files changed, 33 insertions(+), 12 deletions(-)
diff --git a/Documentation/devicetree/bindings/watchdog/atmel-wdt.txt b/Documentation/devicetree/bindings/watchdog/atmel-wdt.txt
index 2957ebb..ad4cc0a 100644
--- a/Documentation/devicetree/bindings/watchdog/atmel-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/atmel-wdt.txt
@@ -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>;
};
diff --git a/Documentation/devicetree/bindings/watchdog/marvel.txt b/Documentation/devicetree/bindings/watchdog/marvel.txt
index 0b2503a..5dc8d30 100644
--- a/Documentation/devicetree/bindings/watchdog/marvel.txt
+++ b/Documentation/devicetree/bindings/watchdog/marvel.txt
@@ -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";
};
diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c
index dc42e44..3f66193 100644
--- a/drivers/watchdog/at91sam9_wdt.c
+++ b/drivers/watchdog/at91sam9_wdt.c
@@ -32,7 +32,6 @@
#include <linux/timer.h>
#include <linux/bitops.h>
#include <linux/uaccess.h>
-#include <linux/of.h>
#include "at91sam9_wdt.h"
@@ -57,11 +56,13 @@
#define WDT_TIMEOUT (HZ/2)
/* User land timeout */
-#define WDT_HEARTBEAT 15
-static int heartbeat = WDT_HEARTBEAT;
+#define MIN_HEARTBEAT 1
+#define MAX_HEARTBEAT 16
+#define DEF_HEARTBEAT 15
+static int heartbeat = 0;
module_param(heartbeat, int, 0);
MODULE_PARM_DESC(heartbeat, "Watchdog heartbeats in seconds. "
- "(default = " __MODULE_STRING(WDT_HEARTBEAT) ")");
+ "(default = " __MODULE_STRING(DEF_HEARTBEAT) ")");
static bool nowayout = WATCHDOG_NOWAYOUT;
module_param(nowayout, bool, 0);
@@ -255,6 +256,11 @@ static struct miscdevice at91wdt_miscdev = {
.fops = &at91wdt_fops,
};
+static struct watchdog_device at91wdt_wdd __initdata = {
+ .min_timeout = MIN_HEARTBEAT,
+ .max_timeout = MAX_HEARTBEAT,
+};
+
static int __init at91wdt_probe(struct platform_device *pdev)
{
struct resource *r;
@@ -273,6 +279,11 @@ static int __init at91wdt_probe(struct platform_device *pdev)
return -ENOMEM;
}
+ if ((heartbeat < MIN_HEARTBEAT) || (heartbeat > MAX_HEARTBEAT)) {
+ at91wdt_wdd.timeout = DEF_HEARTBEAT;
+ watchdog_probe_dt_timeout(&at91wdt_wdd, pdev->dev.of_node);
+ }
+
/* Set watchdog */
res = at91_wdt_settimeout(ms_to_ticks(WDT_HW_TIMEOUT * 1000));
if (res)
@@ -282,12 +293,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;
}
diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index c20f96b..14406e6 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -24,7 +24,6 @@
#include <linux/spinlock.h>
#include <linux/clk.h>
#include <linux/err.h>
-#include <linux/of.h>
#include <mach/bridge-regs.h>
/*
@@ -162,12 +161,14 @@ 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.max_timeout = wdt_max_duration;
+ if ((heartbeat >= 1) && (heartbeat <= wdt_max_duration)) {
+ orion_wdt.timeout = heartbeat;
+ } else {
+ orion_wdt.timeout = wdt_max_duration;
+ watchdog_probe_dt_timeout(&orion_wdt, pdev->dev.of_node);
+ }
watchdog_set_nowayout(&orion_wdt, nowayout);
ret = watchdog_register_device(&orion_wdt);
@@ -177,7 +178,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;
}
--
1.7.11.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-10-04 8:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-04 8:26 [RFC PATCH v2 0/2] watchdog: core: dt: add support for the timeout-sec dt property Fabio Porcedda
2012-10-04 8:26 ` [RFC PATCH v2 1/2] " Fabio Porcedda
2012-10-04 8:26 ` [RFC PATCH v2 2/2] watchdog: add timeout-sec property binding to some drivers Fabio Porcedda
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).