watchdog: add timeout-sec property binding
this patchset add the timeout-sec property to the following drivers: orion_wdt, pnx4008_wdt, s3c2410_wdt and at91sam9_wdt. The at91sam9_wdt is tested on evk-pr3, the other drivers are compile tested only. Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com> Cc: Andrew Lunn <andrew@lunn.ch> Cc: Jason Cooper <jason@lakedaemon.net> Cc: Wolfram Sang <w.sang@pengutronix.de> Cc: Masanari Iida <standby24x7@gmail.com> Cc: Ben Dooks <ben-linux@fluff.org> Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: Andrew Victor <linux@maxim.org.za> Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Cc: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
This commit is contained in:
parent
490ac7af8b
commit
c1fd5f6402
@ -7,9 +7,13 @@ Required properties:
|
|||||||
- reg: physical base address of the controller and length of memory mapped
|
- reg: physical base address of the controller and length of memory mapped
|
||||||
region.
|
region.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- timeout-sec: contains the watchdog timeout in seconds.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
watchdog@fffffd40 {
|
watchdog@fffffd40 {
|
||||||
compatible = "atmel,at91sam9260-wdt";
|
compatible = "atmel,at91sam9260-wdt";
|
||||||
reg = <0xfffffd40 0x10>;
|
reg = <0xfffffd40 0x10>;
|
||||||
|
timeout-sec = <10>;
|
||||||
};
|
};
|
||||||
|
@ -5,10 +5,15 @@ Required Properties:
|
|||||||
- Compatibility : "marvell,orion-wdt"
|
- Compatibility : "marvell,orion-wdt"
|
||||||
- reg : Address of the timer registers
|
- reg : Address of the timer registers
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
|
||||||
|
- timeout-sec : Contains the watchdog timeout in seconds
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
wdt@20300 {
|
wdt@20300 {
|
||||||
compatible = "marvell,orion-wdt";
|
compatible = "marvell,orion-wdt";
|
||||||
reg = <0x20300 0x28>;
|
reg = <0x20300 0x28>;
|
||||||
|
timeout-sec = <10>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
@ -5,9 +5,13 @@ Required properties:
|
|||||||
- reg: physical base address of the controller and length of memory mapped
|
- reg: physical base address of the controller and length of memory mapped
|
||||||
region.
|
region.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- timeout-sec: contains the watchdog timeout in seconds.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
watchdog@4003C000 {
|
watchdog@4003C000 {
|
||||||
compatible = "nxp,pnx4008-wdt";
|
compatible = "nxp,pnx4008-wdt";
|
||||||
reg = <0x4003C000 0x1000>;
|
reg = <0x4003C000 0x1000>;
|
||||||
|
timeout-sec = <10>;
|
||||||
};
|
};
|
||||||
|
@ -9,3 +9,6 @@ Required properties:
|
|||||||
- reg : base physical address of the controller and length of memory mapped
|
- reg : base physical address of the controller and length of memory mapped
|
||||||
region.
|
region.
|
||||||
- interrupts : interrupt number to the cpu.
|
- interrupts : interrupt number to the cpu.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- timeout-sec : contains the watchdog timeout in seconds.
|
||||||
|
@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
/* User land timeout */
|
/* User land timeout */
|
||||||
#define WDT_HEARTBEAT 15
|
#define WDT_HEARTBEAT 15
|
||||||
static int heartbeat = WDT_HEARTBEAT;
|
static int heartbeat;
|
||||||
module_param(heartbeat, int, 0);
|
module_param(heartbeat, int, 0);
|
||||||
MODULE_PARM_DESC(heartbeat, "Watchdog heartbeats in seconds. "
|
MODULE_PARM_DESC(heartbeat, "Watchdog heartbeats in seconds. "
|
||||||
"(default = " __MODULE_STRING(WDT_HEARTBEAT) ")");
|
"(default = " __MODULE_STRING(WDT_HEARTBEAT) ")");
|
||||||
@ -176,6 +176,7 @@ static const struct watchdog_ops at91_wdt_ops = {
|
|||||||
static struct watchdog_device at91_wdt_dev = {
|
static struct watchdog_device at91_wdt_dev = {
|
||||||
.info = &at91_wdt_info,
|
.info = &at91_wdt_info,
|
||||||
.ops = &at91_wdt_ops,
|
.ops = &at91_wdt_ops,
|
||||||
|
.timeout = WDT_HEARTBEAT,
|
||||||
.min_timeout = 1,
|
.min_timeout = 1,
|
||||||
.max_timeout = 0xFFFF,
|
.max_timeout = 0xFFFF,
|
||||||
};
|
};
|
||||||
@ -194,8 +195,8 @@ static int __init at91wdt_probe(struct platform_device *pdev)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
at91_wdt_dev.timeout = heartbeat;
|
|
||||||
at91_wdt_dev.parent = &pdev->dev;
|
at91_wdt_dev.parent = &pdev->dev;
|
||||||
|
watchdog_init_timeout(&at91_wdt_dev, heartbeat, &pdev->dev);
|
||||||
watchdog_set_nowayout(&at91_wdt_dev, nowayout);
|
watchdog_set_nowayout(&at91_wdt_dev, nowayout);
|
||||||
|
|
||||||
/* Set watchdog */
|
/* Set watchdog */
|
||||||
@ -212,7 +213,7 @@ static int __init at91wdt_probe(struct platform_device *pdev)
|
|||||||
mod_timer(&at91wdt_private.timer, jiffies + WDT_TIMEOUT);
|
mod_timer(&at91wdt_private.timer, jiffies + WDT_TIMEOUT);
|
||||||
|
|
||||||
pr_info("enabled (heartbeat=%d sec, nowayout=%d)\n",
|
pr_info("enabled (heartbeat=%d sec, nowayout=%d)\n",
|
||||||
heartbeat, nowayout);
|
at91_wdt_dev.timeout, nowayout);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -140,6 +140,7 @@ static const struct watchdog_ops orion_wdt_ops = {
|
|||||||
static struct watchdog_device orion_wdt = {
|
static struct watchdog_device orion_wdt = {
|
||||||
.info = &orion_wdt_info,
|
.info = &orion_wdt_info,
|
||||||
.ops = &orion_wdt_ops,
|
.ops = &orion_wdt_ops,
|
||||||
|
.min_timeout = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int orion_wdt_probe(struct platform_device *pdev)
|
static int orion_wdt_probe(struct platform_device *pdev)
|
||||||
@ -164,12 +165,9 @@ static int orion_wdt_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
wdt_max_duration = WDT_MAX_CYCLE_COUNT / wdt_tclk;
|
wdt_max_duration = WDT_MAX_CYCLE_COUNT / wdt_tclk;
|
||||||
|
|
||||||
if ((heartbeat < 1) || (heartbeat > wdt_max_duration))
|
orion_wdt.timeout = wdt_max_duration;
|
||||||
heartbeat = wdt_max_duration;
|
|
||||||
|
|
||||||
orion_wdt.timeout = heartbeat;
|
|
||||||
orion_wdt.min_timeout = 1;
|
|
||||||
orion_wdt.max_timeout = wdt_max_duration;
|
orion_wdt.max_timeout = wdt_max_duration;
|
||||||
|
watchdog_init_timeout(&orion_wdt, heartbeat, &pdev->dev);
|
||||||
|
|
||||||
watchdog_set_nowayout(&orion_wdt, nowayout);
|
watchdog_set_nowayout(&orion_wdt, nowayout);
|
||||||
ret = watchdog_register_device(&orion_wdt);
|
ret = watchdog_register_device(&orion_wdt);
|
||||||
@ -179,7 +177,7 @@ static int orion_wdt_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pr_info("Initial timeout %d sec%s\n",
|
pr_info("Initial timeout %d sec%s\n",
|
||||||
heartbeat, nowayout ? ", nowayout" : "");
|
orion_wdt.timeout, nowayout ? ", nowayout" : "");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,6 +142,7 @@ static const struct watchdog_ops pnx4008_wdt_ops = {
|
|||||||
static struct watchdog_device pnx4008_wdd = {
|
static struct watchdog_device pnx4008_wdd = {
|
||||||
.info = &pnx4008_wdt_ident,
|
.info = &pnx4008_wdt_ident,
|
||||||
.ops = &pnx4008_wdt_ops,
|
.ops = &pnx4008_wdt_ops,
|
||||||
|
.timeout = DEFAULT_HEARTBEAT,
|
||||||
.min_timeout = 1,
|
.min_timeout = 1,
|
||||||
.max_timeout = MAX_HEARTBEAT,
|
.max_timeout = MAX_HEARTBEAT,
|
||||||
};
|
};
|
||||||
@ -151,8 +152,7 @@ static int pnx4008_wdt_probe(struct platform_device *pdev)
|
|||||||
struct resource *r;
|
struct resource *r;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (heartbeat < 1 || heartbeat > MAX_HEARTBEAT)
|
watchdog_init_timeout(&pnx4008_wdd, heartbeat, &pdev->dev);
|
||||||
heartbeat = DEFAULT_HEARTBEAT;
|
|
||||||
|
|
||||||
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
wdt_base = devm_ioremap_resource(&pdev->dev, r);
|
wdt_base = devm_ioremap_resource(&pdev->dev, r);
|
||||||
@ -167,7 +167,6 @@ static int pnx4008_wdt_probe(struct platform_device *pdev)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
pnx4008_wdd.timeout = heartbeat;
|
|
||||||
pnx4008_wdd.bootstatus = (readl(WDTIM_RES(wdt_base)) & WDOG_RESET) ?
|
pnx4008_wdd.bootstatus = (readl(WDTIM_RES(wdt_base)) & WDOG_RESET) ?
|
||||||
WDIOF_CARDRESET : 0;
|
WDIOF_CARDRESET : 0;
|
||||||
watchdog_set_nowayout(&pnx4008_wdd, nowayout);
|
watchdog_set_nowayout(&pnx4008_wdd, nowayout);
|
||||||
@ -181,7 +180,7 @@ static int pnx4008_wdt_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
dev_info(&pdev->dev, "PNX4008 Watchdog Timer: heartbeat %d sec\n",
|
dev_info(&pdev->dev, "PNX4008 Watchdog Timer: heartbeat %d sec\n",
|
||||||
heartbeat);
|
pnx4008_wdd.timeout);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
#define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME (15)
|
#define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME (15)
|
||||||
|
|
||||||
static bool nowayout = WATCHDOG_NOWAYOUT;
|
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 tmr_atboot = CONFIG_S3C2410_WATCHDOG_ATBOOT;
|
||||||
static int soft_noboot;
|
static int soft_noboot;
|
||||||
static int debug;
|
static int debug;
|
||||||
@ -226,6 +226,7 @@ static struct watchdog_ops s3c2410wdt_ops = {
|
|||||||
static struct watchdog_device s3c2410_wdd = {
|
static struct watchdog_device s3c2410_wdd = {
|
||||||
.info = &s3c2410_wdt_ident,
|
.info = &s3c2410_wdt_ident,
|
||||||
.ops = &s3c2410wdt_ops,
|
.ops = &s3c2410wdt_ops,
|
||||||
|
.timeout = CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* interrupt handler code */
|
/* interrupt handler code */
|
||||||
@ -356,7 +357,8 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
|
|||||||
/* see if we can actually set the requested timer margin, and if
|
/* see if we can actually set the requested timer margin, and if
|
||||||
* not, try the default value */
|
* not, try the default value */
|
||||||
|
|
||||||
if (s3c2410wdt_set_heartbeat(&s3c2410_wdd, tmr_margin)) {
|
watchdog_init_timeout(&s3c2410_wdd, tmr_margin, &pdev->dev);
|
||||||
|
if (s3c2410wdt_set_heartbeat(&s3c2410_wdd, s3c2410_wdd.timeout)) {
|
||||||
started = s3c2410wdt_set_heartbeat(&s3c2410_wdd,
|
started = s3c2410wdt_set_heartbeat(&s3c2410_wdd,
|
||||||
CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME);
|
CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user