linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] add ux500_wdt support
@ 2013-01-18 11:40 Fabio Baltieri
  2013-01-18 11:40 ` [PATCH 1/4] mfd: dbx500-prcmu: add watchdog ID definitions Fabio Baltieri
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Fabio Baltieri @ 2013-01-18 11:40 UTC (permalink / raw)
  To: linux-watchdog, Samuel Ortiz, Wim Van Sebroeck
  Cc: linux-arm-kernel, linux-kernel, Linus Walleij, Lee Jones,
	Srinidhi Kasagar, Fabio Baltieri

Hi all,

this set adds support for the ux500_wdt timer, implemented in the PRCMU
unit of ST-Ericsson ux500 architecture.

The first two patches add the necessary definitions and function export
to the PRCMU driver currently in mainline, while the third an fourth
patches add the actual watchdog driver and mfd_cell definition to make
it probe when PRCMU is compiled in.

As the patches touches files in both mfd and watchdog subsystems, what do
you think is the best way to handle this set?

Thanks,
Fabio


Fabio Baltieri (4):
  mfd: dbx500-prcmu: add watchdog ID definitions
  mfd: dbx500-prcmu: export a9wdog functions
  watchdog: add support for ux500_wdt watchdog
  mfd: db8500-prcmu: add ux500_wdt mfd_cell

 drivers/mfd/db8500-prcmu.c              |  17 ++++
 drivers/watchdog/Kconfig                |  12 +++
 drivers/watchdog/Makefile               |   1 +
 drivers/watchdog/ux500_wdt.c            | 171 ++++++++++++++++++++++++++++++++
 include/linux/mfd/dbx500-prcmu.h        |  12 +++
 include/linux/platform_data/ux500_wdt.h |  19 ++++
 6 files changed, 232 insertions(+)
 create mode 100644 drivers/watchdog/ux500_wdt.c
 create mode 100644 include/linux/platform_data/ux500_wdt.h

-- 
1.7.12.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/4] mfd: dbx500-prcmu: add watchdog ID definitions
  2013-01-18 11:40 [PATCH 0/4] add ux500_wdt support Fabio Baltieri
@ 2013-01-18 11:40 ` Fabio Baltieri
  2013-01-18 11:40 ` [PATCH 2/4] mfd: dbx500-prcmu: export a9wdog functions Fabio Baltieri
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Fabio Baltieri @ 2013-01-18 11:40 UTC (permalink / raw)
  To: linux-watchdog, Samuel Ortiz, Wim Van Sebroeck
  Cc: linux-arm-kernel, linux-kernel, Linus Walleij, Lee Jones,
	Srinidhi Kasagar, Fabio Baltieri

Add definition of watchdog IDs to be used by ux500_wdt driver.

Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
---
 include/linux/mfd/dbx500-prcmu.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/linux/mfd/dbx500-prcmu.h b/include/linux/mfd/dbx500-prcmu.h
index c202d6c..c6e0608 100644
--- a/include/linux/mfd/dbx500-prcmu.h
+++ b/include/linux/mfd/dbx500-prcmu.h
@@ -147,6 +147,18 @@ enum prcmu_clock {
 };
 
 /**
+ * enum prcmu_wdog_id - PRCMU watchdog IDs
+ * @PRCMU_WDOG_ALL: use all timers
+ * @PRCMU_WDOG_CPU1: use first CPU timer only
+ * @PRCMU_WDOG_CPU2: use second CPU timer conly
+ */
+enum prcmu_wdog_id {
+	PRCMU_WDOG_ALL = 0x00,
+	PRCMU_WDOG_CPU1 = 0x01,
+	PRCMU_WDOG_CPU2 = 0x02,
+};
+
+/**
  * enum ape_opp - APE OPP states definition
  * @APE_OPP_INIT:
  * @APE_NO_CHANGE: The APE operating point is unchanged
-- 
1.7.12.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/4] mfd: dbx500-prcmu: export a9wdog functions
  2013-01-18 11:40 [PATCH 0/4] add ux500_wdt support Fabio Baltieri
  2013-01-18 11:40 ` [PATCH 1/4] mfd: dbx500-prcmu: add watchdog ID definitions Fabio Baltieri
@ 2013-01-18 11:40 ` Fabio Baltieri
  2013-01-18 11:40 ` [PATCH 3/4] watchdog: add support for ux500_wdt watchdog Fabio Baltieri
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Fabio Baltieri @ 2013-01-18 11:40 UTC (permalink / raw)
  To: linux-watchdog, Samuel Ortiz, Wim Van Sebroeck
  Cc: linux-arm-kernel, linux-kernel, Linus Walleij, Lee Jones,
	Srinidhi Kasagar, Fabio Baltieri

Add EXPORT_SYMBOL to db500_prcmu_*_a9wdog functions to allow usage from
module.

Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
---
 drivers/mfd/db8500-prcmu.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
index 268f45d..7a63fa8 100644
--- a/drivers/mfd/db8500-prcmu.c
+++ b/drivers/mfd/db8500-prcmu.c
@@ -2212,21 +2212,25 @@ int db8500_prcmu_config_a9wdog(u8 num, bool sleep_auto_off)
 			    sleep_auto_off ? A9WDOG_AUTO_OFF_EN :
 			    A9WDOG_AUTO_OFF_DIS);
 }
+EXPORT_SYMBOL(db8500_prcmu_config_a9wdog);
 
 int db8500_prcmu_enable_a9wdog(u8 id)
 {
 	return prcmu_a9wdog(MB4H_A9WDOG_EN, id, 0, 0, 0);
 }
+EXPORT_SYMBOL(db8500_prcmu_enable_a9wdog);
 
 int db8500_prcmu_disable_a9wdog(u8 id)
 {
 	return prcmu_a9wdog(MB4H_A9WDOG_DIS, id, 0, 0, 0);
 }
+EXPORT_SYMBOL(db8500_prcmu_disable_a9wdog);
 
 int db8500_prcmu_kick_a9wdog(u8 id)
 {
 	return prcmu_a9wdog(MB4H_A9WDOG_KICK, id, 0, 0, 0);
 }
+EXPORT_SYMBOL(db8500_prcmu_kick_a9wdog);
 
 /*
  * timeout is 28 bit, in ms.
@@ -2244,6 +2248,7 @@ int db8500_prcmu_load_a9wdog(u8 id, u32 timeout)
 			    (u8)((timeout >> 12) & 0xff),
 			    (u8)((timeout >> 20) & 0xff));
 }
+EXPORT_SYMBOL(db8500_prcmu_load_a9wdog);
 
 /**
  * prcmu_abb_read() - Read register value(s) from the ABB.
-- 
1.7.12.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 3/4] watchdog: add support for ux500_wdt watchdog
  2013-01-18 11:40 [PATCH 0/4] add ux500_wdt support Fabio Baltieri
  2013-01-18 11:40 ` [PATCH 1/4] mfd: dbx500-prcmu: add watchdog ID definitions Fabio Baltieri
  2013-01-18 11:40 ` [PATCH 2/4] mfd: dbx500-prcmu: export a9wdog functions Fabio Baltieri
@ 2013-01-18 11:40 ` Fabio Baltieri
  2013-01-22  3:27   ` Samuel Ortiz
  2013-01-28 21:12   ` Wim Van Sebroeck
  2013-01-18 11:40 ` [PATCH 4/4] mfd: db8500-prcmu: add ux500_wdt mfd_cell Fabio Baltieri
                   ` (2 subsequent siblings)
  5 siblings, 2 replies; 13+ messages in thread
From: Fabio Baltieri @ 2013-01-18 11:40 UTC (permalink / raw)
  To: linux-watchdog, Samuel Ortiz, Wim Van Sebroeck
  Cc: linux-arm-kernel, linux-kernel, Linus Walleij, Lee Jones,
	Srinidhi Kasagar, Fabio Baltieri

This patch adds support for the ux500_wdt watchdog that is found in
ST-Ericsson Ux500 platform.  The driver is based on PRCMU APIs.

Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
---
 drivers/watchdog/Kconfig                |  12 +++
 drivers/watchdog/Makefile               |   1 +
 drivers/watchdog/ux500_wdt.c            | 171 ++++++++++++++++++++++++++++++++
 include/linux/platform_data/ux500_wdt.h |  19 ++++
 4 files changed, 203 insertions(+)
 create mode 100644 drivers/watchdog/ux500_wdt.c
 create mode 100644 include/linux/platform_data/ux500_wdt.h

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 7f809fd..26e1fdb 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -364,6 +364,18 @@ config IMX2_WDT
 	  To compile this driver as a module, choose M here: the
 	  module will be called imx2_wdt.
 
+config UX500_WATCHDOG
+	tristate "ST-Ericsson Ux500 watchdog"
+	depends on MFD_DB8500_PRCMU
+	select WATCHDOG_CORE
+	default y
+	help
+	  Say Y here to include Watchdog timer support for the watchdog
+	  existing in the prcmu of ST-Ericsson Ux500 series platforms.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called ux500_wdt.
+
 # AVR32 Architecture
 
 config AT32AP700X_WDT
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index 97bbdb3a..bec86ee 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -52,6 +52,7 @@ obj-$(CONFIG_STMP3XXX_WATCHDOG) += stmp3xxx_wdt.o
 obj-$(CONFIG_NUC900_WATCHDOG) += nuc900_wdt.o
 obj-$(CONFIG_TS72XX_WATCHDOG) += ts72xx_wdt.o
 obj-$(CONFIG_IMX2_WDT) += imx2_wdt.o
+obj-$(CONFIG_UX500_WATCHDOG) += ux500_wdt.o
 
 # AVR32 Architecture
 obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o
diff --git a/drivers/watchdog/ux500_wdt.c b/drivers/watchdog/ux500_wdt.c
new file mode 100644
index 0000000..dd608db
--- /dev/null
+++ b/drivers/watchdog/ux500_wdt.c
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2011-2013
+ *
+ * License Terms: GNU General Public License v2
+ *
+ * Author: Mathieu Poirier <mathieu.poirier@linaro.org> for ST-Ericsson
+ * Author: Jonas Aaberg <jonas.aberg@stericsson.com> for ST-Ericsson
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/moduleparam.h>
+#include <linux/miscdevice.h>
+#include <linux/err.h>
+#include <linux/uaccess.h>
+#include <linux/watchdog.h>
+#include <linux/platform_device.h>
+#include <linux/platform_data/ux500_wdt.h>
+
+#include <linux/mfd/dbx500-prcmu.h>
+
+#define WATCHDOG_TIMEOUT 600 /* 10 minutes */
+
+#define WATCHDOG_MIN	0
+#define WATCHDOG_MAX28	268435  /* 28 bit resolution in ms == 268435.455 s */
+#define WATCHDOG_MAX32	4294967 /* 32 bit resolution in ms == 4294967.295 s */
+
+static int timeout = WATCHDOG_TIMEOUT;
+module_param(timeout, int, 0);
+MODULE_PARM_DESC(timeout,
+	"Watchdog timeout in seconds. default="
+				__MODULE_STRING(WATCHDOG_TIMEOUT) ".");
+
+static int nowayout = WATCHDOG_NOWAYOUT;
+module_param(nowayout, int, 0);
+MODULE_PARM_DESC(nowayout,
+	"Watchdog cannot be stopped once started (default="
+				__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
+
+static int ux500_wdt_start(struct watchdog_device *wdd)
+{
+	return prcmu_enable_a9wdog(PRCMU_WDOG_ALL);
+}
+
+static int ux500_wdt_stop(struct watchdog_device *wdd)
+{
+	return prcmu_disable_a9wdog(PRCMU_WDOG_ALL);
+}
+
+static int ux500_wdt_keepalive(struct watchdog_device *wdd)
+{
+	return prcmu_kick_a9wdog(PRCMU_WDOG_ALL);
+}
+
+static int ux500_wdt_set_timeout(struct watchdog_device *wdd,
+				 unsigned int timeout)
+{
+	ux500_wdt_stop(wdd);
+	prcmu_load_a9wdog(PRCMU_WDOG_ALL, timeout * 1000);
+	ux500_wdt_start(wdd);
+
+	return 0;
+}
+
+static const struct watchdog_info ux500_wdt_info = {
+	.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
+	.identity = "Ux500 WDT",
+	.firmware_version = 1,
+};
+
+static const struct watchdog_ops ux500_wdt_ops = {
+	.owner = THIS_MODULE,
+	.start = ux500_wdt_start,
+	.stop  = ux500_wdt_stop,
+	.ping  = ux500_wdt_keepalive,
+	.set_timeout = ux500_wdt_set_timeout,
+};
+
+static struct watchdog_device ux500_wdt = {
+	.info = &ux500_wdt_info,
+	.ops = &ux500_wdt_ops,
+	.min_timeout = WATCHDOG_MIN,
+	.max_timeout = WATCHDOG_MAX32,
+};
+
+static int ux500_wdt_probe(struct platform_device *pdev)
+{
+	int ret;
+	struct ux500_wdt_data *pdata = pdev->dev.platform_data;
+
+	if (pdata) {
+		if (pdata->timeout > 0)
+			timeout = pdata->timeout;
+		if (pdata->has_28_bits_resolution)
+			ux500_wdt.max_timeout = WATCHDOG_MAX28;
+	}
+
+	watchdog_set_nowayout(&ux500_wdt, nowayout);
+
+	/* disable auto off on sleep */
+	prcmu_config_a9wdog(PRCMU_WDOG_CPU1, false);
+
+	/* set HW initial value */
+	prcmu_load_a9wdog(PRCMU_WDOG_ALL, timeout * 1000);
+
+	ret = watchdog_register_device(&ux500_wdt);
+	if (ret)
+		return ret;
+
+	dev_info(&pdev->dev, "initialized\n");
+
+	return 0;
+}
+
+static int ux500_wdt_remove(struct platform_device *dev)
+{
+	watchdog_unregister_device(&ux500_wdt);
+
+	return 0;
+}
+
+#ifdef CONFIG_PM
+static int ux500_wdt_suspend(struct platform_device *pdev,
+			     pm_message_t state)
+{
+	if (watchdog_active(&ux500_wdt)) {
+		ux500_wdt_stop(&ux500_wdt);
+		prcmu_config_a9wdog(PRCMU_WDOG_CPU1, true);
+
+		prcmu_load_a9wdog(PRCMU_WDOG_ALL, timeout * 1000);
+		ux500_wdt_start(&ux500_wdt);
+	}
+	return 0;
+}
+
+static int ux500_wdt_resume(struct platform_device *pdev)
+{
+	if (watchdog_active(&ux500_wdt)) {
+		ux500_wdt_stop(&ux500_wdt);
+		prcmu_config_a9wdog(PRCMU_WDOG_CPU1, false);
+
+		prcmu_load_a9wdog(PRCMU_WDOG_ALL, timeout * 1000);
+		ux500_wdt_start(&ux500_wdt);
+	}
+	return 0;
+}
+#else
+#define ux500_wdt_suspend NULL
+#define ux500_wdt_resume NULL
+#endif
+
+static struct platform_driver ux500_wdt_driver = {
+	.probe		= ux500_wdt_probe,
+	.remove		= ux500_wdt_remove,
+	.suspend	= ux500_wdt_suspend,
+	.resume		= ux500_wdt_resume,
+	.driver		= {
+		.owner	= THIS_MODULE,
+		.name	= "ux500_wdt",
+	},
+};
+
+module_platform_driver(ux500_wdt_driver);
+
+MODULE_AUTHOR("Jonas Aaberg <jonas.aberg@stericsson.com>");
+MODULE_DESCRIPTION("Ux500 Watchdog Driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
+MODULE_ALIAS("platform:ux500_wdt");
diff --git a/include/linux/platform_data/ux500_wdt.h b/include/linux/platform_data/ux500_wdt.h
new file mode 100644
index 0000000..aa2dfe7
--- /dev/null
+++ b/include/linux/platform_data/ux500_wdt.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) ST Ericsson SA 2011
+ *
+ * License Terms: GNU General Public License v2
+ *
+ * STE Ux500 Watchdog platform data
+ */
+#ifndef __UX500_WDT_H
+#define __UX500_WDT_H
+
+/**
+ * struct ux500_wdt_data
+ */
+struct ux500_wdt_data {
+	int timeout;
+	bool has_28_bits_resolution;
+};
+
+#endif /* __UX500_WDT_H */
-- 
1.7.12.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 4/4] mfd: db8500-prcmu: add ux500_wdt mfd_cell
  2013-01-18 11:40 [PATCH 0/4] add ux500_wdt support Fabio Baltieri
                   ` (2 preceding siblings ...)
  2013-01-18 11:40 ` [PATCH 3/4] watchdog: add support for ux500_wdt watchdog Fabio Baltieri
@ 2013-01-18 11:40 ` Fabio Baltieri
  2013-01-21 14:50 ` [PATCH 0/4] add ux500_wdt support Linus Walleij
  2013-02-03 17:07 ` Samuel Ortiz
  5 siblings, 0 replies; 13+ messages in thread
From: Fabio Baltieri @ 2013-01-18 11:40 UTC (permalink / raw)
  To: linux-watchdog, Samuel Ortiz, Wim Van Sebroeck
  Cc: linux-arm-kernel, linux-kernel, Linus Walleij, Lee Jones,
	Srinidhi Kasagar, Fabio Baltieri

This patch adds the necessary structures to use the watchdog
functionality of PRCMU.

The watchdog driver is named ux500_wdt.

Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
---
 drivers/mfd/db8500-prcmu.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
index 7a63fa8..e42a417 100644
--- a/drivers/mfd/db8500-prcmu.c
+++ b/drivers/mfd/db8500-prcmu.c
@@ -32,6 +32,7 @@
 #include <linux/regulator/db8500-prcmu.h>
 #include <linux/regulator/machine.h>
 #include <linux/cpufreq.h>
+#include <linux/platform_data/ux500_wdt.h>
 #include <asm/hardware/gic.h>
 #include <mach/hardware.h>
 #include <mach/irqs.h>
@@ -3074,6 +3075,11 @@ static struct resource ab8500_resources[] = {
 	}
 };
 
+static struct ux500_wdt_data db8500_wdt_pdata = {
+	.timeout = 600, /* 10 minutes */
+	.has_28_bits_resolution = true,
+};
+
 static struct mfd_cell db8500_prcmu_devs[] = {
 	{
 		.name = "db8500-prcmu-regulators",
@@ -3088,6 +3094,12 @@ static struct mfd_cell db8500_prcmu_devs[] = {
 		.pdata_size = sizeof(db8500_cpufreq_table),
 	},
 	{
+		.name = "ux500_wdt",
+		.platform_data = &db8500_wdt_pdata,
+		.pdata_size = sizeof(db8500_wdt_pdata),
+		.id = -1,
+	},
+	{
 		.name = "ab8500-core",
 		.of_compatible = "stericsson,ab8500",
 		.num_resources = ARRAY_SIZE(ab8500_resources),
-- 
1.7.12.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] add ux500_wdt support
  2013-01-18 11:40 [PATCH 0/4] add ux500_wdt support Fabio Baltieri
                   ` (3 preceding siblings ...)
  2013-01-18 11:40 ` [PATCH 4/4] mfd: db8500-prcmu: add ux500_wdt mfd_cell Fabio Baltieri
@ 2013-01-21 14:50 ` Linus Walleij
  2013-02-03 17:07 ` Samuel Ortiz
  5 siblings, 0 replies; 13+ messages in thread
From: Linus Walleij @ 2013-01-21 14:50 UTC (permalink / raw)
  To: Fabio Baltieri, Wim Van Sebroeck
  Cc: linux-watchdog, Samuel Ortiz, linux-arm-kernel, linux-kernel,
	Lee Jones, Srinidhi Kasagar

On Fri, Jan 18, 2013 at 12:40 PM, Fabio Baltieri
<fabio.baltieri@linaro.org> wrote:

> this set adds support for the ux500_wdt timer, implemented in the PRCMU
> unit of ST-Ericsson ux500 architecture.
>
> The first two patches add the necessary definitions and function export
> to the PRCMU driver currently in mainline, while the third an fourth
> patches add the actual watchdog driver and mfd_cell definition to make
> it probe when PRCMU is compiled in.
>
> As the patches touches files in both mfd and watchdog subsystems, what do
> you think is the best way to handle this set?

Acked-by: Linus Walleij <linus.walleij@linaro.org>

As the majority touch the MFD parts, can Wim ack this so Sam can
take it through the MFD tree?

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/4] watchdog: add support for ux500_wdt watchdog
  2013-01-18 11:40 ` [PATCH 3/4] watchdog: add support for ux500_wdt watchdog Fabio Baltieri
@ 2013-01-22  3:27   ` Samuel Ortiz
  2013-01-22  9:43     ` Wim Van Sebroeck
  2013-01-28 21:12   ` Wim Van Sebroeck
  1 sibling, 1 reply; 13+ messages in thread
From: Samuel Ortiz @ 2013-01-22  3:27 UTC (permalink / raw)
  To: Fabio Baltieri
  Cc: linux-watchdog, Wim Van Sebroeck, linux-arm-kernel, linux-kernel,
	Linus Walleij, Lee Jones, Srinidhi Kasagar

Hi Fabio, Wim,

On Fri, Jan 18, 2013 at 12:40:13PM +0100, Fabio Baltieri wrote:
> This patch adds support for the ux500_wdt watchdog that is found in
> ST-Ericsson Ux500 platform.  The driver is based on PRCMU APIs.
> 
> Acked-by: Lee Jones <lee.jones@linaro.org>
> Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
> ---
>  drivers/watchdog/Kconfig                |  12 +++
>  drivers/watchdog/Makefile               |   1 +
>  drivers/watchdog/ux500_wdt.c            | 171 ++++++++++++++++++++++++++++++++
>  include/linux/platform_data/ux500_wdt.h |  19 ++++
>  4 files changed, 203 insertions(+)
>  create mode 100644 drivers/watchdog/ux500_wdt.c
>  create mode 100644 include/linux/platform_data/ux500_wdt.h
There is a dependency between this one an the first patch.
Wim, would you like me to carry this patch through the MFD tree ?

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/4] watchdog: add support for ux500_wdt watchdog
  2013-01-22  3:27   ` Samuel Ortiz
@ 2013-01-22  9:43     ` Wim Van Sebroeck
  0 siblings, 0 replies; 13+ messages in thread
From: Wim Van Sebroeck @ 2013-01-22  9:43 UTC (permalink / raw)
  To: Samuel Ortiz
  Cc: Fabio Baltieri, linux-watchdog, linux-arm-kernel, linux-kernel,
	Linus Walleij, Lee Jones, Srinidhi Kasagar

Hi Samuel,

> On Fri, Jan 18, 2013 at 12:40:13PM +0100, Fabio Baltieri wrote:
> > This patch adds support for the ux500_wdt watchdog that is found in
> > ST-Ericsson Ux500 platform.  The driver is based on PRCMU APIs.
> > 
> > Acked-by: Lee Jones <lee.jones@linaro.org>
> > Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
> > ---
> >  drivers/watchdog/Kconfig                |  12 +++
> >  drivers/watchdog/Makefile               |   1 +
> >  drivers/watchdog/ux500_wdt.c            | 171 ++++++++++++++++++++++++++++++++
> >  include/linux/platform_data/ux500_wdt.h |  19 ++++
> >  4 files changed, 203 insertions(+)
> >  create mode 100644 drivers/watchdog/ux500_wdt.c
> >  create mode 100644 include/linux/platform_data/ux500_wdt.h
> There is a dependency between this one an the first patch.
> Wim, would you like me to carry this patch through the MFD tree ?

Seen the dependancy's -> best way would be to take this via the MFD tree.
I allready looked at the patches and it looks OK at the first glans.
I'll review them and lett you know if they have my Acked-by :-).

Kind regards,
Wim.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/4] watchdog: add support for ux500_wdt watchdog
  2013-01-18 11:40 ` [PATCH 3/4] watchdog: add support for ux500_wdt watchdog Fabio Baltieri
  2013-01-22  3:27   ` Samuel Ortiz
@ 2013-01-28 21:12   ` Wim Van Sebroeck
  2013-01-29  8:43     ` Fabio Baltieri
  2013-01-29  8:57     ` [PATCH v2 " Fabio Baltieri
  1 sibling, 2 replies; 13+ messages in thread
From: Wim Van Sebroeck @ 2013-01-28 21:12 UTC (permalink / raw)
  To: Fabio Baltieri
  Cc: linux-watchdog, Samuel Ortiz, linux-arm-kernel, linux-kernel,
	Linus Walleij, Lee Jones, Srinidhi Kasagar

Hi Fabio,

> This patch adds support for the ux500_wdt watchdog that is found in
> ST-Ericsson Ux500 platform.  The driver is based on PRCMU APIs.
> 
> Acked-by: Lee Jones <lee.jones@linaro.org>
> Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>

> +static int timeout = WATCHDOG_TIMEOUT;
> +module_param(timeout, int, 0);
> +MODULE_PARM_DESC(timeout,
> +	"Watchdog timeout in seconds. default="
> +				__MODULE_STRING(WATCHDOG_TIMEOUT) ".");

We should go for unsigned int timeout values...

> +static int nowayout = WATCHDOG_NOWAYOUT;
> +module_param(nowayout, int, 0);
> +MODULE_PARM_DESC(nowayout,
> +	"Watchdog cannot be stopped once started (default="
> +				__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");

nowayout is a boolean value so please change this to
static bool nowayout = WATCHDOG_NOWAYOUT;

The rest is OK by me. So if bowayout get's fixed then you have my acked-by.

Kind regards,
Wim.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/4] watchdog: add support for ux500_wdt watchdog
  2013-01-28 21:12   ` Wim Van Sebroeck
@ 2013-01-29  8:43     ` Fabio Baltieri
  2013-01-29  8:57     ` [PATCH v2 " Fabio Baltieri
  1 sibling, 0 replies; 13+ messages in thread
From: Fabio Baltieri @ 2013-01-29  8:43 UTC (permalink / raw)
  To: Wim Van Sebroeck
  Cc: linux-watchdog, Samuel Ortiz, linux-arm-kernel, linux-kernel,
	Linus Walleij, Lee Jones, Srinidhi Kasagar

Hello Wim,

thanks for the review!

On Mon, Jan 28, 2013 at 10:12:22PM +0100, Wim Van Sebroeck wrote:
> > +static int timeout = WATCHDOG_TIMEOUT;
> > +module_param(timeout, int, 0);
> > +MODULE_PARM_DESC(timeout,
> > +	"Watchdog timeout in seconds. default="
> > +				__MODULE_STRING(WATCHDOG_TIMEOUT) ".");
> 
> We should go for unsigned int timeout values...

You're right!  This ends up in an unsigned on the rest of the code
anyway and I see other drivers using it as unsigned so I'll change it in
v2 (here and in ux500_wdt_data).

> 
> > +static int nowayout = WATCHDOG_NOWAYOUT;
> > +module_param(nowayout, int, 0);
> > +MODULE_PARM_DESC(nowayout,
> > +	"Watchdog cannot be stopped once started (default="
> > +				__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
> 
> nowayout is a boolean value so please change this to
> static bool nowayout = WATCHDOG_NOWAYOUT;

Right.

> The rest is OK by me. So if bowayout get's fixed then you have my acked-by.

Ok, I'll send a v2 of this patch soon with both parameters fixed for you
to ack.

Thanks!
Fabio

-- 
Fabio Baltieri

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 3/4] watchdog: add support for ux500_wdt watchdog
  2013-01-28 21:12   ` Wim Van Sebroeck
  2013-01-29  8:43     ` Fabio Baltieri
@ 2013-01-29  8:57     ` Fabio Baltieri
  2013-01-29  9:20       ` Wim Van Sebroeck
  1 sibling, 1 reply; 13+ messages in thread
From: Fabio Baltieri @ 2013-01-29  8:57 UTC (permalink / raw)
  To: Wim Van Sebroeck, Samuel Ortiz, linux-watchdog
  Cc: linux-arm-kernel, linux-kernel, Linus Walleij, Lee Jones,
	Srinidhi Kasagar, Fabio Baltieri

This patch adds support for the ux500_wdt watchdog that is found in
ST-Ericsson Ux500 platform.  The driver is based on PRCMU APIs.

Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
---

Changes from v1:
- changed timeout as unsigned in both module parameter and pdata
- changed nowayout to bool
- added Linus Walleij's Ack

 drivers/watchdog/Kconfig                |  12 +++
 drivers/watchdog/Makefile               |   1 +
 drivers/watchdog/ux500_wdt.c            | 171 ++++++++++++++++++++++++++++++++
 include/linux/platform_data/ux500_wdt.h |  19 ++++
 4 files changed, 203 insertions(+)
 create mode 100644 drivers/watchdog/ux500_wdt.c
 create mode 100644 include/linux/platform_data/ux500_wdt.h

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 7f809fd..26e1fdb 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -364,6 +364,18 @@ config IMX2_WDT
 	  To compile this driver as a module, choose M here: the
 	  module will be called imx2_wdt.
 
+config UX500_WATCHDOG
+	tristate "ST-Ericsson Ux500 watchdog"
+	depends on MFD_DB8500_PRCMU
+	select WATCHDOG_CORE
+	default y
+	help
+	  Say Y here to include Watchdog timer support for the watchdog
+	  existing in the prcmu of ST-Ericsson Ux500 series platforms.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called ux500_wdt.
+
 # AVR32 Architecture
 
 config AT32AP700X_WDT
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index 97bbdb3a..bec86ee 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -52,6 +52,7 @@ obj-$(CONFIG_STMP3XXX_WATCHDOG) += stmp3xxx_wdt.o
 obj-$(CONFIG_NUC900_WATCHDOG) += nuc900_wdt.o
 obj-$(CONFIG_TS72XX_WATCHDOG) += ts72xx_wdt.o
 obj-$(CONFIG_IMX2_WDT) += imx2_wdt.o
+obj-$(CONFIG_UX500_WATCHDOG) += ux500_wdt.o
 
 # AVR32 Architecture
 obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o
diff --git a/drivers/watchdog/ux500_wdt.c b/drivers/watchdog/ux500_wdt.c
new file mode 100644
index 0000000..a614d84
--- /dev/null
+++ b/drivers/watchdog/ux500_wdt.c
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2011-2013
+ *
+ * License Terms: GNU General Public License v2
+ *
+ * Author: Mathieu Poirier <mathieu.poirier@linaro.org> for ST-Ericsson
+ * Author: Jonas Aaberg <jonas.aberg@stericsson.com> for ST-Ericsson
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/moduleparam.h>
+#include <linux/miscdevice.h>
+#include <linux/err.h>
+#include <linux/uaccess.h>
+#include <linux/watchdog.h>
+#include <linux/platform_device.h>
+#include <linux/platform_data/ux500_wdt.h>
+
+#include <linux/mfd/dbx500-prcmu.h>
+
+#define WATCHDOG_TIMEOUT 600 /* 10 minutes */
+
+#define WATCHDOG_MIN	0
+#define WATCHDOG_MAX28	268435  /* 28 bit resolution in ms == 268435.455 s */
+#define WATCHDOG_MAX32	4294967 /* 32 bit resolution in ms == 4294967.295 s */
+
+static unsigned int timeout = WATCHDOG_TIMEOUT;
+module_param(timeout, uint, 0);
+MODULE_PARM_DESC(timeout,
+	"Watchdog timeout in seconds. default="
+				__MODULE_STRING(WATCHDOG_TIMEOUT) ".");
+
+static bool nowayout = WATCHDOG_NOWAYOUT;
+module_param(nowayout, bool, 0);
+MODULE_PARM_DESC(nowayout,
+	"Watchdog cannot be stopped once started (default="
+				__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
+
+static int ux500_wdt_start(struct watchdog_device *wdd)
+{
+	return prcmu_enable_a9wdog(PRCMU_WDOG_ALL);
+}
+
+static int ux500_wdt_stop(struct watchdog_device *wdd)
+{
+	return prcmu_disable_a9wdog(PRCMU_WDOG_ALL);
+}
+
+static int ux500_wdt_keepalive(struct watchdog_device *wdd)
+{
+	return prcmu_kick_a9wdog(PRCMU_WDOG_ALL);
+}
+
+static int ux500_wdt_set_timeout(struct watchdog_device *wdd,
+				 unsigned int timeout)
+{
+	ux500_wdt_stop(wdd);
+	prcmu_load_a9wdog(PRCMU_WDOG_ALL, timeout * 1000);
+	ux500_wdt_start(wdd);
+
+	return 0;
+}
+
+static const struct watchdog_info ux500_wdt_info = {
+	.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
+	.identity = "Ux500 WDT",
+	.firmware_version = 1,
+};
+
+static const struct watchdog_ops ux500_wdt_ops = {
+	.owner = THIS_MODULE,
+	.start = ux500_wdt_start,
+	.stop  = ux500_wdt_stop,
+	.ping  = ux500_wdt_keepalive,
+	.set_timeout = ux500_wdt_set_timeout,
+};
+
+static struct watchdog_device ux500_wdt = {
+	.info = &ux500_wdt_info,
+	.ops = &ux500_wdt_ops,
+	.min_timeout = WATCHDOG_MIN,
+	.max_timeout = WATCHDOG_MAX32,
+};
+
+static int ux500_wdt_probe(struct platform_device *pdev)
+{
+	int ret;
+	struct ux500_wdt_data *pdata = pdev->dev.platform_data;
+
+	if (pdata) {
+		if (pdata->timeout > 0)
+			timeout = pdata->timeout;
+		if (pdata->has_28_bits_resolution)
+			ux500_wdt.max_timeout = WATCHDOG_MAX28;
+	}
+
+	watchdog_set_nowayout(&ux500_wdt, nowayout);
+
+	/* disable auto off on sleep */
+	prcmu_config_a9wdog(PRCMU_WDOG_CPU1, false);
+
+	/* set HW initial value */
+	prcmu_load_a9wdog(PRCMU_WDOG_ALL, timeout * 1000);
+
+	ret = watchdog_register_device(&ux500_wdt);
+	if (ret)
+		return ret;
+
+	dev_info(&pdev->dev, "initialized\n");
+
+	return 0;
+}
+
+static int ux500_wdt_remove(struct platform_device *dev)
+{
+	watchdog_unregister_device(&ux500_wdt);
+
+	return 0;
+}
+
+#ifdef CONFIG_PM
+static int ux500_wdt_suspend(struct platform_device *pdev,
+			     pm_message_t state)
+{
+	if (watchdog_active(&ux500_wdt)) {
+		ux500_wdt_stop(&ux500_wdt);
+		prcmu_config_a9wdog(PRCMU_WDOG_CPU1, true);
+
+		prcmu_load_a9wdog(PRCMU_WDOG_ALL, timeout * 1000);
+		ux500_wdt_start(&ux500_wdt);
+	}
+	return 0;
+}
+
+static int ux500_wdt_resume(struct platform_device *pdev)
+{
+	if (watchdog_active(&ux500_wdt)) {
+		ux500_wdt_stop(&ux500_wdt);
+		prcmu_config_a9wdog(PRCMU_WDOG_CPU1, false);
+
+		prcmu_load_a9wdog(PRCMU_WDOG_ALL, timeout * 1000);
+		ux500_wdt_start(&ux500_wdt);
+	}
+	return 0;
+}
+#else
+#define ux500_wdt_suspend NULL
+#define ux500_wdt_resume NULL
+#endif
+
+static struct platform_driver ux500_wdt_driver = {
+	.probe		= ux500_wdt_probe,
+	.remove		= ux500_wdt_remove,
+	.suspend	= ux500_wdt_suspend,
+	.resume		= ux500_wdt_resume,
+	.driver		= {
+		.owner	= THIS_MODULE,
+		.name	= "ux500_wdt",
+	},
+};
+
+module_platform_driver(ux500_wdt_driver);
+
+MODULE_AUTHOR("Jonas Aaberg <jonas.aberg@stericsson.com>");
+MODULE_DESCRIPTION("Ux500 Watchdog Driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
+MODULE_ALIAS("platform:ux500_wdt");
diff --git a/include/linux/platform_data/ux500_wdt.h b/include/linux/platform_data/ux500_wdt.h
new file mode 100644
index 0000000..1689ff4
--- /dev/null
+++ b/include/linux/platform_data/ux500_wdt.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) ST Ericsson SA 2011
+ *
+ * License Terms: GNU General Public License v2
+ *
+ * STE Ux500 Watchdog platform data
+ */
+#ifndef __UX500_WDT_H
+#define __UX500_WDT_H
+
+/**
+ * struct ux500_wdt_data
+ */
+struct ux500_wdt_data {
+	unsigned int timeout;
+	bool has_28_bits_resolution;
+};
+
+#endif /* __UX500_WDT_H */
-- 
1.7.12.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 3/4] watchdog: add support for ux500_wdt watchdog
  2013-01-29  8:57     ` [PATCH v2 " Fabio Baltieri
@ 2013-01-29  9:20       ` Wim Van Sebroeck
  0 siblings, 0 replies; 13+ messages in thread
From: Wim Van Sebroeck @ 2013-01-29  9:20 UTC (permalink / raw)
  To: Fabio Baltieri
  Cc: Samuel Ortiz, linux-watchdog, linux-arm-kernel, linux-kernel,
	Linus Walleij, Lee Jones, Srinidhi Kasagar

Hi Fabio, Samuel,

> This patch adds support for the ux500_wdt watchdog that is found in
> ST-Ericsson Ux500 platform.  The driver is based on PRCMU APIs.
> 
> Acked-by: Linus Walleij <linus.walleij@linaro.org>
> Acked-by: Lee Jones <lee.jones@linaro.org>
> Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>

Acked-by: Wim Van Sebroeck <wim@iguana.be>

Kind regards,
Wim.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] add ux500_wdt support
  2013-01-18 11:40 [PATCH 0/4] add ux500_wdt support Fabio Baltieri
                   ` (4 preceding siblings ...)
  2013-01-21 14:50 ` [PATCH 0/4] add ux500_wdt support Linus Walleij
@ 2013-02-03 17:07 ` Samuel Ortiz
  5 siblings, 0 replies; 13+ messages in thread
From: Samuel Ortiz @ 2013-02-03 17:07 UTC (permalink / raw)
  To: Fabio Baltieri
  Cc: linux-watchdog, Wim Van Sebroeck, linux-arm-kernel, linux-kernel,
	Linus Walleij, Lee Jones, Srinidhi Kasagar

Hi Fabio,

On Fri, Jan 18, 2013 at 12:40:10PM +0100, Fabio Baltieri wrote:
> Hi all,
> 
> this set adds support for the ux500_wdt timer, implemented in the PRCMU
> unit of ST-Ericsson ux500 architecture.
> 
> The first two patches add the necessary definitions and function export
> to the PRCMU driver currently in mainline, while the third an fourth
> patches add the actual watchdog driver and mfd_cell definition to make
> it probe when PRCMU is compiled in.
> 
> As the patches touches files in both mfd and watchdog subsystems, what do
> you think is the best way to handle this set?
> 
> Thanks,
> Fabio
> 
> 
> Fabio Baltieri (4):
>   mfd: dbx500-prcmu: add watchdog ID definitions
>   mfd: dbx500-prcmu: export a9wdog functions
>   watchdog: add support for ux500_wdt watchdog
>   mfd: db8500-prcmu: add ux500_wdt mfd_cell
All 4 patches (v2 for #3) applied, many thanks.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2013-02-03 17:07 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-18 11:40 [PATCH 0/4] add ux500_wdt support Fabio Baltieri
2013-01-18 11:40 ` [PATCH 1/4] mfd: dbx500-prcmu: add watchdog ID definitions Fabio Baltieri
2013-01-18 11:40 ` [PATCH 2/4] mfd: dbx500-prcmu: export a9wdog functions Fabio Baltieri
2013-01-18 11:40 ` [PATCH 3/4] watchdog: add support for ux500_wdt watchdog Fabio Baltieri
2013-01-22  3:27   ` Samuel Ortiz
2013-01-22  9:43     ` Wim Van Sebroeck
2013-01-28 21:12   ` Wim Van Sebroeck
2013-01-29  8:43     ` Fabio Baltieri
2013-01-29  8:57     ` [PATCH v2 " Fabio Baltieri
2013-01-29  9:20       ` Wim Van Sebroeck
2013-01-18 11:40 ` [PATCH 4/4] mfd: db8500-prcmu: add ux500_wdt mfd_cell Fabio Baltieri
2013-01-21 14:50 ` [PATCH 0/4] add ux500_wdt support Linus Walleij
2013-02-03 17:07 ` Samuel Ortiz

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