linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC
@ 2014-04-14 13:23 Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 1/9] watchdog: orion: Move the register ioremap'ing to its own function Ezequiel Garcia
                   ` (9 more replies)
  0 siblings, 10 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

Here's the fourth round of the patchset adding support for watchdog
on Armada 375 and Armada 38x SoCs, rebased on v3.15-rc1 and with
collected Tested-by's.

The new Armada 375/385 SoCs have two registers for the watchdog RSTOUT:

 1. It has a dedicated register (similar to the one in A370/XP)
 2. Also has a bit in a shared RSTOUT register.

Therefore, in order to support this two-folded RSTOUT, we extend the 'reg'
property in the watchdog devicetree and require a new pair of cells to specify
the shared RSTOUT.

On the driver side, we need to implement per-SoC stop() and enabled()
functions. Such somewhat complex infrastructure is needed to ensure the driver
performs proper reset of the watchdog timer, by masking and disabling the
RSTOUT before the interrupt is enabled.

Tested on A375-DB, A385-DB, A370-RD and Dove Cubox. Sebastian did more tests
on Dove, and Jason Gunthorpe on Kirkwood.

Changes from v3:

  * Added orion_wdt_get_regs() to do the ioremap'ing (and region request
    for non-shared regions), as previously suggested by Guenter. The probe()
    function is a bit more readable after this.

Changes from v2:

  * Cleaned-up usage of atomic_io_modify(), using it only when needed.
    For instance, the RSTOUT dedicated register on Armada 370/375/380/XP
    can be safely access without any lock.

  * Use devm_ioremap_resource() for the non-shared registers. The shared
    registers need to use devm_ioremap(), which does not request the
    memory region.

Changes from v1:

  * Reworked entirely!

Ezequiel Garcia (9):
  watchdog: orion: Move the register ioremap'ing to its own function
  watchdog: orion: Introduce a SoC-specific RSTOUT mapping
  watchdog: orion: Remove unneeded atomic access
  watchdog: orion: Introduce per-SoC stop() function
  watchdog: orion: Introduce per-SoC enabled() function
  watchdog: orion: Add Armada 375/380 SoC support
  ARM: mvebu: Enable Armada 375 watchdog in the devicetree
  ARM: mvebu: Enable Armada 380/385 watchdog in the devicetree
  ARM: mvebu: Add A375/A380 watchdog binding documentation

 .../devicetree/bindings/watchdog/marvel.txt        |   7 +
 arch/arm/boot/dts/armada-375.dtsi                  |   6 +
 arch/arm/boot/dts/armada-38x.dtsi                  |   7 +
 drivers/watchdog/orion_wdt.c                       | 213 ++++++++++++++++++---
 4 files changed, 210 insertions(+), 23 deletions(-)

-- 
1.9.1

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

* [RESEND/PATCH v4 1/9] watchdog: orion: Move the register ioremap'ing to its own function
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
@ 2014-04-14 13:23 ` Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 2/9] watchdog: orion: Introduce a SoC-specific RSTOUT mapping Ezequiel Garcia
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

Follow-up patches will extend the registers ioremap and request
to handle SoC-specific quirks on the RSTOUT register. Therefore,
in order to keep the code readable, this commit introduces a special
function for this.

Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 drivers/watchdog/orion_wdt.c | 38 ++++++++++++++++++++++++--------------
 1 file changed, 24 insertions(+), 14 deletions(-)

diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index 9b3c41d..afa3831 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -313,12 +313,32 @@ static const struct of_device_id orion_wdt_of_match_table[] = {
 };
 MODULE_DEVICE_TABLE(of, orion_wdt_of_match_table);
 
+static int orion_wdt_get_regs(struct platform_device *pdev,
+			      struct orion_watchdog *dev)
+{
+	struct resource *res;
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res)
+		return -ENODEV;
+	dev->reg = devm_ioremap(&pdev->dev, res->start,
+				resource_size(res));
+	if (!dev->reg)
+		return -ENOMEM;
+
+	dev->rstout = orion_wdt_ioremap_rstout(pdev, res->start &
+						     INTERNAL_REGS_MASK);
+	if (!dev->rstout)
+		return -ENODEV;
+
+	return 0;
+}
+
 static int orion_wdt_probe(struct platform_device *pdev)
 {
 	struct orion_watchdog *dev;
 	const struct of_device_id *match;
 	unsigned int wdt_max_duration;	/* (seconds) */
-	struct resource *res;
 	int ret, irq;
 
 	dev = devm_kzalloc(&pdev->dev, sizeof(struct orion_watchdog),
@@ -336,19 +356,9 @@ static int orion_wdt_probe(struct platform_device *pdev)
 	dev->wdt.min_timeout = 1;
 	dev->data = match->data;
 
-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	if (!res)
-		return -ENODEV;
-
-	dev->reg = devm_ioremap(&pdev->dev, res->start,
-			       resource_size(res));
-	if (!dev->reg)
-		return -ENOMEM;
-
-	dev->rstout = orion_wdt_ioremap_rstout(pdev, res->start &
-						     INTERNAL_REGS_MASK);
-	if (!dev->rstout)
-		return -ENODEV;
+	ret = orion_wdt_get_regs(pdev, dev);
+	if (ret)
+		return ret;
 
 	ret = dev->data->clock_init(pdev, dev);
 	if (ret) {
-- 
1.9.1

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

* [RESEND/PATCH v4 2/9] watchdog: orion: Introduce a SoC-specific RSTOUT mapping
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 1/9] watchdog: orion: Move the register ioremap'ing to its own function Ezequiel Garcia
@ 2014-04-14 13:23 ` Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 3/9] watchdog: orion: Remove unneeded atomic access Ezequiel Garcia
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

Separate the RSTOUT register mapping for the different compatible strings
supported by the driver. This allows to use devm_ioremap on SoC variants that
share the RSTOUT register, and devm_ioremap_resource (which requests the MMIO
region) on SoCs that have a dedicated RSTOUT register.

Tested-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 drivers/watchdog/orion_wdt.c | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index afa3831..75f623f 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -262,10 +262,6 @@ static void __iomem *orion_wdt_ioremap_rstout(struct platform_device *pdev,
 		return devm_ioremap(&pdev->dev, res->start,
 				    resource_size(res));
 
-	/* This workaround works only for "orion-wdt", DT-enabled */
-	if (!of_device_is_compatible(pdev->dev.of_node, "marvell,orion-wdt"))
-		return NULL;
-
 	rstout = internal_regs + ORION_RSTOUT_MASK_OFFSET;
 
 	WARN(1, FW_BUG "falling back to harcoded RSTOUT reg %pa\n", &rstout);
@@ -316,6 +312,7 @@ MODULE_DEVICE_TABLE(of, orion_wdt_of_match_table);
 static int orion_wdt_get_regs(struct platform_device *pdev,
 			      struct orion_watchdog *dev)
 {
+	struct device_node *node = pdev->dev.of_node;
 	struct resource *res;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -326,10 +323,26 @@ static int orion_wdt_get_regs(struct platform_device *pdev,
 	if (!dev->reg)
 		return -ENOMEM;
 
-	dev->rstout = orion_wdt_ioremap_rstout(pdev, res->start &
-						     INTERNAL_REGS_MASK);
-	if (!dev->rstout)
+	/* Each supported compatible has some RSTOUT register quirk */
+	if (of_device_is_compatible(node, "marvell,orion-wdt")) {
+
+		dev->rstout = orion_wdt_ioremap_rstout(pdev, res->start &
+						       INTERNAL_REGS_MASK);
+		if (!dev->rstout)
+			return -ENODEV;
+
+	} else if (of_device_is_compatible(node, "marvell,armada-370-wdt") ||
+		   of_device_is_compatible(node, "marvell,armada-xp-wdt")) {
+
+		/* Dedicated RSTOUT register, can be requested. */
+		res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+		dev->rstout = devm_ioremap_resource(&pdev->dev, res);
+		if (IS_ERR(dev->rstout))
+			return PTR_ERR(dev->rstout);
+
+	} else {
 		return -ENODEV;
+	}
 
 	return 0;
 }
-- 
1.9.1

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

* [RESEND/PATCH v4 3/9] watchdog: orion: Remove unneeded atomic access
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 1/9] watchdog: orion: Move the register ioremap'ing to its own function Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 2/9] watchdog: orion: Introduce a SoC-specific RSTOUT mapping Ezequiel Garcia
@ 2014-04-14 13:23 ` Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 4/9] watchdog: orion: Introduce per-SoC stop() function Ezequiel Garcia
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

The RSTOUT register on the Armada 370 SoC variant is a dedicated register
(not shared across orthogonal subsystems) and so it's not needed to write
it atomically.

Tested-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 drivers/watchdog/orion_wdt.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index 75f623f..365d6cc 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -145,6 +145,7 @@ static int orion_wdt_ping(struct watchdog_device *wdt_dev)
 static int armada370_start(struct watchdog_device *wdt_dev)
 {
 	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
+	u32 reg;
 
 	/* Set watchdog duration */
 	writel(dev->clk_rate * wdt_dev->timeout,
@@ -157,8 +158,10 @@ static int armada370_start(struct watchdog_device *wdt_dev)
 	atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit,
 						dev->data->wdt_enable_bit);
 
-	atomic_io_modify(dev->rstout, dev->data->rstout_enable_bit,
-				      dev->data->rstout_enable_bit);
+	/* Enable reset on watchdog */
+	reg = readl(dev->rstout);
+	reg |= dev->data->rstout_enable_bit;
+	writel(reg, dev->rstout);
 	return 0;
 }
 
-- 
1.9.1

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

* [RESEND/PATCH v4 4/9] watchdog: orion: Introduce per-SoC stop() function
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
                   ` (2 preceding siblings ...)
  2014-04-14 13:23 ` [RESEND/PATCH v4 3/9] watchdog: orion: Remove unneeded atomic access Ezequiel Garcia
@ 2014-04-14 13:23 ` Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 5/9] watchdog: orion: Introduce per-SoC enabled() function Ezequiel Garcia
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

In order to support other SoCs, it's needed to have a different stop()
implementation for each SoC. This commit adds no functionality, and it
consists of preparation work.

Tested-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 drivers/watchdog/orion_wdt.c | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index 365d6cc..be7c71c 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -58,6 +58,7 @@ struct orion_watchdog_data {
 	int (*clock_init)(struct platform_device *,
 			  struct orion_watchdog *);
 	int (*start)(struct watchdog_device *);
+	int (*stop)(struct watchdog_device *);
 };
 
 struct orion_watchdog {
@@ -192,7 +193,7 @@ static int orion_wdt_start(struct watchdog_device *wdt_dev)
 	return dev->data->start(wdt_dev);
 }
 
-static int orion_wdt_stop(struct watchdog_device *wdt_dev)
+static int orion_stop(struct watchdog_device *wdt_dev)
 {
 	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
 
@@ -205,6 +206,29 @@ static int orion_wdt_stop(struct watchdog_device *wdt_dev)
 	return 0;
 }
 
+static int armada370_stop(struct watchdog_device *wdt_dev)
+{
+	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
+	u32 reg;
+
+	/* Disable reset on watchdog */
+	reg = readl(dev->rstout);
+	reg &= ~dev->data->rstout_enable_bit;
+	writel(reg, dev->rstout);
+
+	/* Disable watchdog timer */
+	atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, 0);
+
+	return 0;
+}
+
+static int orion_wdt_stop(struct watchdog_device *wdt_dev)
+{
+	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
+
+	return dev->data->stop(wdt_dev);
+}
+
 static int orion_wdt_enabled(struct orion_watchdog *dev)
 {
 	bool enabled, running;
@@ -277,6 +301,7 @@ static const struct orion_watchdog_data orion_data = {
 	.wdt_counter_offset = 0x24,
 	.clock_init = orion_wdt_clock_init,
 	.start = orion_start,
+	.stop = orion_stop,
 };
 
 static const struct orion_watchdog_data armada370_data = {
@@ -285,6 +310,7 @@ static const struct orion_watchdog_data armada370_data = {
 	.wdt_counter_offset = 0x34,
 	.clock_init = armada370_wdt_clock_init,
 	.start = armada370_start,
+	.stop = armada370_stop,
 };
 
 static const struct orion_watchdog_data armadaxp_data = {
@@ -293,6 +319,7 @@ static const struct orion_watchdog_data armadaxp_data = {
 	.wdt_counter_offset = 0x34,
 	.clock_init = armadaxp_wdt_clock_init,
 	.start = armada370_start,
+	.stop = armada370_stop,
 };
 
 static const struct of_device_id orion_wdt_of_match_table[] = {
-- 
1.9.1

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

* [RESEND/PATCH v4 5/9] watchdog: orion: Introduce per-SoC enabled() function
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
                   ` (3 preceding siblings ...)
  2014-04-14 13:23 ` [RESEND/PATCH v4 4/9] watchdog: orion: Introduce per-SoC stop() function Ezequiel Garcia
@ 2014-04-14 13:23 ` Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 6/9] watchdog: orion: Add Armada 375/380 SoC support Ezequiel Garcia
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

In order to support other SoCs, it's needed to have a different enabled()
implementation for each SoC. This commit adds no functionality, and it
consists of preparation work.

Tested-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 drivers/watchdog/orion_wdt.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index be7c71c..ba316db 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -57,6 +57,7 @@ struct orion_watchdog_data {
 	int rstout_enable_bit;
 	int (*clock_init)(struct platform_device *,
 			  struct orion_watchdog *);
+	int (*enabled)(struct orion_watchdog *);
 	int (*start)(struct watchdog_device *);
 	int (*stop)(struct watchdog_device *);
 };
@@ -229,7 +230,7 @@ static int orion_wdt_stop(struct watchdog_device *wdt_dev)
 	return dev->data->stop(wdt_dev);
 }
 
-static int orion_wdt_enabled(struct orion_watchdog *dev)
+static int orion_enabled(struct orion_watchdog *dev)
 {
 	bool enabled, running;
 
@@ -239,6 +240,13 @@ static int orion_wdt_enabled(struct orion_watchdog *dev)
 	return enabled && running;
 }
 
+static int orion_wdt_enabled(struct watchdog_device *wdt_dev)
+{
+	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
+
+	return dev->data->enabled(dev);
+}
+
 static unsigned int orion_wdt_get_timeleft(struct watchdog_device *wdt_dev)
 {
 	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
@@ -300,6 +308,7 @@ static const struct orion_watchdog_data orion_data = {
 	.wdt_enable_bit = BIT(4),
 	.wdt_counter_offset = 0x24,
 	.clock_init = orion_wdt_clock_init,
+	.enabled = orion_enabled,
 	.start = orion_start,
 	.stop = orion_stop,
 };
@@ -309,6 +318,7 @@ static const struct orion_watchdog_data armada370_data = {
 	.wdt_enable_bit = BIT(8),
 	.wdt_counter_offset = 0x34,
 	.clock_init = armada370_wdt_clock_init,
+	.enabled = orion_enabled,
 	.start = armada370_start,
 	.stop = armada370_stop,
 };
@@ -318,6 +328,7 @@ static const struct orion_watchdog_data armadaxp_data = {
 	.wdt_enable_bit = BIT(8),
 	.wdt_counter_offset = 0x34,
 	.clock_init = armadaxp_wdt_clock_init,
+	.enabled = orion_enabled,
 	.start = armada370_start,
 	.stop = armada370_stop,
 };
@@ -424,7 +435,7 @@ static int orion_wdt_probe(struct platform_device *pdev)
 	 * removed and re-insterted, or if the bootloader explicitly
 	 * set a running watchdog before booting the kernel.
 	 */
-	if (!orion_wdt_enabled(dev))
+	if (!orion_wdt_enabled(&dev->wdt))
 		orion_wdt_stop(&dev->wdt);
 
 	/* Request the IRQ only after the watchdog is disabled */
-- 
1.9.1

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

* [RESEND/PATCH v4 6/9] watchdog: orion: Add Armada 375/380 SoC support
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
                   ` (4 preceding siblings ...)
  2014-04-14 13:23 ` [RESEND/PATCH v4 5/9] watchdog: orion: Introduce per-SoC enabled() function Ezequiel Garcia
@ 2014-04-14 13:23 ` Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 7/9] ARM: mvebu: Enable Armada 375 watchdog in the devicetree Ezequiel Garcia
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

This commit adds support for the Armada 375 and Armada 380 SoCs.

This SoC variant has a second RSTOUT register, in addition to the already
existent, which is shared with the system-controller. To handle this RSTOUT,
we introduce a new MMIO register 'rstout_mask' to be required on
'armada-{375,380}-watchdog' new compatible string.

Tested-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 drivers/watchdog/orion_wdt.c | 103 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 103 insertions(+)

diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index ba316db..00d0741 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -55,6 +55,7 @@ struct orion_watchdog_data {
 	int wdt_counter_offset;
 	int wdt_enable_bit;
 	int rstout_enable_bit;
+	int rstout_mask_bit;
 	int (*clock_init)(struct platform_device *,
 			  struct orion_watchdog *);
 	int (*enabled)(struct orion_watchdog *);
@@ -66,6 +67,7 @@ struct orion_watchdog {
 	struct watchdog_device wdt;
 	void __iomem *reg;
 	void __iomem *rstout;
+	void __iomem *rstout_mask;
 	unsigned long clk_rate;
 	struct clk *clk;
 	const struct orion_watchdog_data *data;
@@ -144,6 +146,31 @@ static int orion_wdt_ping(struct watchdog_device *wdt_dev)
 	return 0;
 }
 
+static int armada375_start(struct watchdog_device *wdt_dev)
+{
+	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
+	u32 reg;
+
+	/* Set watchdog duration */
+	writel(dev->clk_rate * wdt_dev->timeout,
+	       dev->reg + dev->data->wdt_counter_offset);
+
+	/* Clear the watchdog expiration bit */
+	atomic_io_modify(dev->reg + TIMER_A370_STATUS, WDT_A370_EXPIRED, 0);
+
+	/* Enable watchdog timer */
+	atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit,
+						dev->data->wdt_enable_bit);
+
+	/* Enable reset on watchdog */
+	reg = readl(dev->rstout);
+	reg |= dev->data->rstout_enable_bit;
+	writel(reg, dev->rstout);
+
+	atomic_io_modify(dev->rstout_mask, dev->data->rstout_mask_bit, 0);
+	return 0;
+}
+
 static int armada370_start(struct watchdog_device *wdt_dev)
 {
 	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
@@ -207,6 +234,24 @@ static int orion_stop(struct watchdog_device *wdt_dev)
 	return 0;
 }
 
+static int armada375_stop(struct watchdog_device *wdt_dev)
+{
+	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
+	u32 reg;
+
+	/* Disable reset on watchdog */
+	atomic_io_modify(dev->rstout_mask, dev->data->rstout_mask_bit,
+					   dev->data->rstout_mask_bit);
+	reg = readl(dev->rstout);
+	reg &= ~dev->data->rstout_enable_bit;
+	writel(reg, dev->rstout);
+
+	/* Disable watchdog timer */
+	atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, 0);
+
+	return 0;
+}
+
 static int armada370_stop(struct watchdog_device *wdt_dev)
 {
 	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
@@ -240,6 +285,17 @@ static int orion_enabled(struct orion_watchdog *dev)
 	return enabled && running;
 }
 
+static int armada375_enabled(struct orion_watchdog *dev)
+{
+	bool masked, enabled, running;
+
+	masked = readl(dev->rstout_mask) & dev->data->rstout_mask_bit;
+	enabled = readl(dev->rstout) & dev->data->rstout_enable_bit;
+	running = readl(dev->reg + TIMER_CTRL) & dev->data->wdt_enable_bit;
+
+	return !masked && enabled && running;
+}
+
 static int orion_wdt_enabled(struct watchdog_device *wdt_dev)
 {
 	struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev);
@@ -333,6 +389,28 @@ static const struct orion_watchdog_data armadaxp_data = {
 	.stop = armada370_stop,
 };
 
+static const struct orion_watchdog_data armada375_data = {
+	.rstout_enable_bit = BIT(8),
+	.rstout_mask_bit = BIT(10),
+	.wdt_enable_bit = BIT(8),
+	.wdt_counter_offset = 0x34,
+	.clock_init = armada370_wdt_clock_init,
+	.enabled = armada375_enabled,
+	.start = armada375_start,
+	.stop = armada375_stop,
+};
+
+static const struct orion_watchdog_data armada380_data = {
+	.rstout_enable_bit = BIT(8),
+	.rstout_mask_bit = BIT(10),
+	.wdt_enable_bit = BIT(8),
+	.wdt_counter_offset = 0x34,
+	.clock_init = armadaxp_wdt_clock_init,
+	.enabled = armada375_enabled,
+	.start = armada375_start,
+	.stop = armada375_stop,
+};
+
 static const struct of_device_id orion_wdt_of_match_table[] = {
 	{
 		.compatible = "marvell,orion-wdt",
@@ -346,6 +424,14 @@ static const struct of_device_id orion_wdt_of_match_table[] = {
 		.compatible = "marvell,armada-xp-wdt",
 		.data = &armadaxp_data,
 	},
+	{
+		.compatible = "marvell,armada-375-wdt",
+		.data = &armada375_data,
+	},
+	{
+		.compatible = "marvell,armada-380-wdt",
+		.data = &armada380_data,
+	},
 	{},
 };
 MODULE_DEVICE_TABLE(of, orion_wdt_of_match_table);
@@ -381,6 +467,23 @@ static int orion_wdt_get_regs(struct platform_device *pdev,
 		if (IS_ERR(dev->rstout))
 			return PTR_ERR(dev->rstout);
 
+	} else if (of_device_is_compatible(node, "marvell,armada-375-wdt") ||
+		   of_device_is_compatible(node, "marvell,armada-380-wdt")) {
+
+		/* Dedicated RSTOUT register, can be requested. */
+		res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+		dev->rstout = devm_ioremap_resource(&pdev->dev, res);
+		if (IS_ERR(dev->rstout))
+			return PTR_ERR(dev->rstout);
+
+		res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
+		if (!res)
+			return -ENODEV;
+		dev->rstout_mask = devm_ioremap(&pdev->dev, res->start,
+						resource_size(res));
+		if (!dev->rstout_mask)
+			return -ENOMEM;
+
 	} else {
 		return -ENODEV;
 	}
-- 
1.9.1

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

* [RESEND/PATCH v4 7/9] ARM: mvebu: Enable Armada 375 watchdog in the devicetree
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
                   ` (5 preceding siblings ...)
  2014-04-14 13:23 ` [RESEND/PATCH v4 6/9] watchdog: orion: Add Armada 375/380 SoC support Ezequiel Garcia
@ 2014-04-14 13:23 ` Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 8/9] ARM: mvebu: Enable Armada 380/385 " Ezequiel Garcia
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

Add the DT nodes to enable the watchdog support available on
Armada 375 SoC.

Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 arch/arm/boot/dts/armada-375.dtsi | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/arm/boot/dts/armada-375.dtsi b/arch/arm/boot/dts/armada-375.dtsi
index 3877693..0bfa57b 100644
--- a/arch/arm/boot/dts/armada-375.dtsi
+++ b/arch/arm/boot/dts/armada-375.dtsi
@@ -320,6 +320,12 @@
 				clocks = <&coreclk 0>;
 			};
 
+			watchdog at 20300 {
+				compatible = "marvell,armada-375-wdt";
+				reg = <0x20300 0x34>, <0x20704 0x4>, <0x18254 0x4>;
+				clocks = <&coreclk 0>;
+			};
+
 			xor at 60800 {
 				compatible = "marvell,orion-xor";
 				reg = <0x60800 0x100
-- 
1.9.1

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

* [RESEND/PATCH v4 8/9] ARM: mvebu: Enable Armada 380/385 watchdog in the devicetree
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
                   ` (6 preceding siblings ...)
  2014-04-14 13:23 ` [RESEND/PATCH v4 7/9] ARM: mvebu: Enable Armada 375 watchdog in the devicetree Ezequiel Garcia
@ 2014-04-14 13:23 ` Ezequiel Garcia
  2014-04-14 13:23 ` [RESEND/PATCH v4 9/9] ARM: mvebu: Add A375/A380 watchdog binding documentation Ezequiel Garcia
  2014-04-24  4:51 ` [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Jason Cooper
  9 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

Add the DT nodes to enable the watchdog support available on
Armada 380/385 SoC.

Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 arch/arm/boot/dts/armada-38x.dtsi | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch/arm/boot/dts/armada-38x.dtsi b/arch/arm/boot/dts/armada-38x.dtsi
index a064f59..9a94196 100644
--- a/arch/arm/boot/dts/armada-38x.dtsi
+++ b/arch/arm/boot/dts/armada-38x.dtsi
@@ -267,6 +267,13 @@
 				clock-names = "nbclk", "fixed";
 			};
 
+			watchdog at 20300 {
+				compatible = "marvell,armada-380-wdt";
+				reg = <0x20300 0x34>, <0x20704 0x4>, <0x18260 0x4>;
+				clocks = <&coreclk 2>, <&refclk>;
+				clock-names = "nbclk", "fixed";
+			};
+
 			eth1: ethernet at 30000 {
 				compatible = "marvell,armada-370-neta";
 				reg = <0x30000 0x4000>;
-- 
1.9.1

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

* [RESEND/PATCH v4 9/9] ARM: mvebu: Add A375/A380 watchdog binding documentation
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
                   ` (7 preceding siblings ...)
  2014-04-14 13:23 ` [RESEND/PATCH v4 8/9] ARM: mvebu: Enable Armada 380/385 " Ezequiel Garcia
@ 2014-04-14 13:23 ` Ezequiel Garcia
  2014-04-24  4:51 ` [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Jason Cooper
  9 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-14 13:23 UTC (permalink / raw)
  To: linux-arm-kernel

This commit documents the new support for "marvell,armada-{375,380}-wdt"
compatible strings and the extra 'reg' entry requirement.

Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 Documentation/devicetree/bindings/watchdog/marvel.txt | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/marvel.txt b/Documentation/devicetree/bindings/watchdog/marvel.txt
index de11eb4..97223fd 100644
--- a/Documentation/devicetree/bindings/watchdog/marvel.txt
+++ b/Documentation/devicetree/bindings/watchdog/marvel.txt
@@ -5,11 +5,18 @@ Required Properties:
 - Compatibility : "marvell,orion-wdt"
 		  "marvell,armada-370-wdt"
 		  "marvell,armada-xp-wdt"
+		  "marvell,armada-375-wdt"
+		  "marvell,armada-380-wdt"
 
 - reg		: Should contain two entries: first one with the
 		  timer control address, second one with the
 		  rstout enable address.
 
+For "marvell,armada-375-wdt" and "marvell,armada-380-wdt":
+
+- reg		: A third entry is mandatory and should contain the
+                  shared mask/unmask RSTOUT address.
+
 Optional properties:
 
 - interrupts	: Contains the IRQ for watchdog expiration
-- 
1.9.1

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

* [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC
  2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
                   ` (8 preceding siblings ...)
  2014-04-14 13:23 ` [RESEND/PATCH v4 9/9] ARM: mvebu: Add A375/A380 watchdog binding documentation Ezequiel Garcia
@ 2014-04-24  4:51 ` Jason Cooper
  2014-04-24 11:06   ` Ezequiel Garcia
  9 siblings, 1 reply; 18+ messages in thread
From: Jason Cooper @ 2014-04-24  4:51 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, Apr 14, 2014 at 10:23:24AM -0300, Ezequiel Garcia wrote:
> Here's the fourth round of the patchset adding support for watchdog
> on Armada 375 and Armada 38x SoCs, rebased on v3.15-rc1 and with
> collected Tested-by's.
> 
> The new Armada 375/385 SoCs have two registers for the watchdog RSTOUT:
> 
>  1. It has a dedicated register (similar to the one in A370/XP)
>  2. Also has a bit in a shared RSTOUT register.
> 
> Therefore, in order to support this two-folded RSTOUT, we extend the 'reg'
> property in the watchdog devicetree and require a new pair of cells to specify
> the shared RSTOUT.
> 
> On the driver side, we need to implement per-SoC stop() and enabled()
> functions. Such somewhat complex infrastructure is needed to ensure the driver
> performs proper reset of the watchdog timer, by masking and disabling the
> RSTOUT before the interrupt is enabled.
> 
> Tested on A375-DB, A385-DB, A370-RD and Dove Cubox. Sebastian did more tests
> on Dove, and Jason Gunthorpe on Kirkwood.

Applied patches 7 and 8 to mvebu/dt.  For the rest,

Acked-by: Jason Cooper <jason@lakedaemon.net>

thx,

Jason.

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

* [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC
  2014-04-24  4:51 ` [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Jason Cooper
@ 2014-04-24 11:06   ` Ezequiel Garcia
  2014-05-06 20:42     ` Ezequiel Garcia
       [not found]     ` <20140526205305.GA23347@spo001.leaseweb.com>
  0 siblings, 2 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-04-24 11:06 UTC (permalink / raw)
  To: linux-arm-kernel

On Apr 24, Jason Cooper wrote:
> On Mon, Apr 14, 2014 at 10:23:24AM -0300, Ezequiel Garcia wrote:
> > 
> > Tested on A375-DB, A385-DB, A370-RD and Dove Cubox. Sebastian did more tests
> > on Dove, and Jason Gunthorpe on Kirkwood.
> 
> Applied patches 7 and 8 to mvebu/dt.  For the rest,
> 
> Acked-by: Jason Cooper <jason@lakedaemon.net>
> 

Wim,

Can you take the rest of the patches throught your tree, with Jason's ack?

Thanks!
-- 
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com

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

* [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC
  2014-04-24 11:06   ` Ezequiel Garcia
@ 2014-05-06 20:42     ` Ezequiel Garcia
       [not found]       ` <20140507142705.GE1484@spo001.leaseweb.com>
       [not found]     ` <20140526205305.GA23347@spo001.leaseweb.com>
  1 sibling, 1 reply; 18+ messages in thread
From: Ezequiel Garcia @ 2014-05-06 20:42 UTC (permalink / raw)
  To: linux-arm-kernel

On 24 Apr 08:06 AM, Ezequiel Garcia wrote:
> On Apr 24, Jason Cooper wrote:
> > On Mon, Apr 14, 2014 at 10:23:24AM -0300, Ezequiel Garcia wrote:
> > > 
> > > Tested on A375-DB, A385-DB, A370-RD and Dove Cubox. Sebastian did more tests
> > > on Dove, and Jason Gunthorpe on Kirkwood.
> > 
> > Applied patches 7 and 8 to mvebu/dt.  For the rest,
> > 
> > Acked-by: Jason Cooper <jason@lakedaemon.net>
> > 
> 
> Wim,
> 
> Can you take the rest of the patches throught your tree, with Jason's ack?
> 

Hi Wim,

Do you have comments about this?

Thanks!
-- 
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com

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

* [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC
       [not found]       ` <20140507142705.GE1484@spo001.leaseweb.com>
@ 2014-05-07 14:36         ` Ezequiel Garcia
  2014-05-15 12:42         ` Ezequiel Garcia
  1 sibling, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-05-07 14:36 UTC (permalink / raw)
  To: linux-arm-kernel

On 07 May 04:27 PM, Wim Van Sebroeck wrote:
> I'll do the necessary this weekend.
> 

Great! Thanks a lot,
-- 
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com

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

* [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC
       [not found]       ` <20140507142705.GE1484@spo001.leaseweb.com>
  2014-05-07 14:36         ` Ezequiel Garcia
@ 2014-05-15 12:42         ` Ezequiel Garcia
  2014-05-19 12:37           ` Ezequiel Garcia
  1 sibling, 1 reply; 18+ messages in thread
From: Ezequiel Garcia @ 2014-05-15 12:42 UTC (permalink / raw)
  To: linux-arm-kernel

On 07 May 04:27 PM, Wim Van Sebroeck wrote:
> I'll do the necessary this weekend.
> 

Hello Wim,

Any news on this series?

Thanks a lot,
-- 
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com

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

* [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC
  2014-05-15 12:42         ` Ezequiel Garcia
@ 2014-05-19 12:37           ` Ezequiel Garcia
       [not found]             ` <20140519130429.GP1484@spo001.leaseweb.com>
  0 siblings, 1 reply; 18+ messages in thread
From: Ezequiel Garcia @ 2014-05-19 12:37 UTC (permalink / raw)
  To: linux-arm-kernel

On 15 May 09:42 AM, Ezequiel Garcia wrote:
> On 07 May 04:27 PM, Wim Van Sebroeck wrote:
> > I'll do the necessary this weekend.
> > 
> Any news on this series?
> 

Wim,

Yet another ping.
-- 
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com

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

* [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC
       [not found]             ` <20140519130429.GP1484@spo001.leaseweb.com>
@ 2014-05-21 22:47               ` Ezequiel Garcia
  0 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-05-21 22:47 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Wim,

On 19 May 03:04 PM, Wim Van Sebroeck wrote:
> 
> will be added in the coming days, but I have 2 other deadlines to catch first...
> 

Sure, no problem. However, I must admit it worries me a bit not seeing this in
linux-next, given -rc6 is already out. If you think we won't make it, don't
hesitate to let me know and I'll try to find another route for the patches.

Thanks a lot,
-- 
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com

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

* [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC
       [not found]     ` <20140526205305.GA23347@spo001.leaseweb.com>
@ 2014-05-26 21:04       ` Ezequiel Garcia
  0 siblings, 0 replies; 18+ messages in thread
From: Ezequiel Garcia @ 2014-05-26 21:04 UTC (permalink / raw)
  To: linux-arm-kernel

On 26 May 10:53 PM, Wim Van Sebroeck wrote:
> > On Apr 24, Jason Cooper wrote:
> > > On Mon, Apr 14, 2014 at 10:23:24AM -0300, Ezequiel Garcia wrote:
> > > > 
> > > > Tested on A375-DB, A385-DB, A370-RD and Dove Cubox. Sebastian did more tests
> > > > on Dove, and Jason Gunthorpe on Kirkwood.
> > > 
> > > Applied patches 7 and 8 to mvebu/dt.  For the rest,
> > > 
> > > Acked-by: Jason Cooper <jason@lakedaemon.net>
> > > 
> > 
> > Wim,
> > 
> > Can you take the rest of the patches throught your tree, with Jason's ack?
> 
> Done. It's in linux-watchdog-next now.
> 

Great. Much appreciated!
-- 
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com

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

end of thread, other threads:[~2014-05-26 21:04 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-14 13:23 [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Ezequiel Garcia
2014-04-14 13:23 ` [RESEND/PATCH v4 1/9] watchdog: orion: Move the register ioremap'ing to its own function Ezequiel Garcia
2014-04-14 13:23 ` [RESEND/PATCH v4 2/9] watchdog: orion: Introduce a SoC-specific RSTOUT mapping Ezequiel Garcia
2014-04-14 13:23 ` [RESEND/PATCH v4 3/9] watchdog: orion: Remove unneeded atomic access Ezequiel Garcia
2014-04-14 13:23 ` [RESEND/PATCH v4 4/9] watchdog: orion: Introduce per-SoC stop() function Ezequiel Garcia
2014-04-14 13:23 ` [RESEND/PATCH v4 5/9] watchdog: orion: Introduce per-SoC enabled() function Ezequiel Garcia
2014-04-14 13:23 ` [RESEND/PATCH v4 6/9] watchdog: orion: Add Armada 375/380 SoC support Ezequiel Garcia
2014-04-14 13:23 ` [RESEND/PATCH v4 7/9] ARM: mvebu: Enable Armada 375 watchdog in the devicetree Ezequiel Garcia
2014-04-14 13:23 ` [RESEND/PATCH v4 8/9] ARM: mvebu: Enable Armada 380/385 " Ezequiel Garcia
2014-04-14 13:23 ` [RESEND/PATCH v4 9/9] ARM: mvebu: Add A375/A380 watchdog binding documentation Ezequiel Garcia
2014-04-24  4:51 ` [RESEND/PATCH v4 0/9] Watchdog support for Armada 375/38x SoC Jason Cooper
2014-04-24 11:06   ` Ezequiel Garcia
2014-05-06 20:42     ` Ezequiel Garcia
     [not found]       ` <20140507142705.GE1484@spo001.leaseweb.com>
2014-05-07 14:36         ` Ezequiel Garcia
2014-05-15 12:42         ` Ezequiel Garcia
2014-05-19 12:37           ` Ezequiel Garcia
     [not found]             ` <20140519130429.GP1484@spo001.leaseweb.com>
2014-05-21 22:47               ` Ezequiel Garcia
     [not found]     ` <20140526205305.GA23347@spo001.leaseweb.com>
2014-05-26 21:04       ` Ezequiel Garcia

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