* [PATCH v3 1/8] watchdog: orion: Introduce a SoC-specific RSTOUT mapping
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
@ 2014-03-12 21:11 ` Ezequiel Garcia
2014-03-12 21:11 ` [PATCH v3 2/8] watchdog: orion: Remove unneeded atomic access Ezequiel Garcia
` (8 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-03-12 21:11 UTC (permalink / raw)
To: linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA
Cc: Jason Cooper, Guenter Roeck, Jason Gunthorpe, Andrew Lunn,
Sebastian Hesselbarth, Lior Amsalem, Tawfik Bayouk,
Thomas Petazzoni, Gregory Clement, Wim Van Sebroeck,
Ezequiel Garcia
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.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
drivers/watchdog/orion_wdt.c | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index 6f9b4c6..76ebcdd 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -263,10 +263,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);
@@ -317,6 +313,7 @@ MODULE_DEVICE_TABLE(of, orion_wdt_of_match_table);
static int orion_wdt_probe(struct platform_device *pdev)
{
struct orion_watchdog *dev;
+ struct device_node *node = pdev->dev.of_node;
const struct of_device_id *match;
unsigned int wdt_max_duration; /* (seconds) */
struct resource *res;
@@ -346,10 +343,25 @@ static int orion_wdt_probe(struct platform_device *pdev)
if (!dev->reg)
return -ENOMEM;
- dev->rstout = orion_wdt_ioremap_rstout(pdev, res->start &
- INTERNAL_REGS_MASK);
- if (!dev->rstout)
+ 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;
+ }
ret = dev->data->clock_init(pdev, dev);
if (ret) {
--
1.9.0
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 2/8] watchdog: orion: Remove unneeded atomic access
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2014-03-12 21:11 ` [PATCH v3 1/8] watchdog: orion: Introduce a SoC-specific RSTOUT mapping Ezequiel Garcia
@ 2014-03-12 21:11 ` Ezequiel Garcia
2014-03-12 21:11 ` [PATCH v3 3/8] watchdog: orion: Introduce per-SoC stop() function Ezequiel Garcia
` (7 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-03-12 21:11 UTC (permalink / raw)
To: linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA
Cc: Jason Cooper, Guenter Roeck, Jason Gunthorpe, Andrew Lunn,
Sebastian Hesselbarth, Lior Amsalem, Tawfik Bayouk,
Thomas Petazzoni, Gregory Clement, Wim Van Sebroeck,
Ezequiel Garcia
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.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
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 76ebcdd..9c25012 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -146,6 +146,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,
@@ -158,8 +159,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.0
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 3/8] watchdog: orion: Introduce per-SoC stop() function
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2014-03-12 21:11 ` [PATCH v3 1/8] watchdog: orion: Introduce a SoC-specific RSTOUT mapping Ezequiel Garcia
2014-03-12 21:11 ` [PATCH v3 2/8] watchdog: orion: Remove unneeded atomic access Ezequiel Garcia
@ 2014-03-12 21:11 ` Ezequiel Garcia
2014-03-12 21:11 ` [PATCH v3 4/8] watchdog: orion: Introduce per-SoC enabled() function Ezequiel Garcia
` (6 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-03-12 21:11 UTC (permalink / raw)
To: linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA
Cc: Jason Cooper, Guenter Roeck, Jason Gunthorpe, Andrew Lunn,
Sebastian Hesselbarth, Lior Amsalem, Tawfik Bayouk,
Thomas Petazzoni, Gregory Clement, Wim Van Sebroeck,
Ezequiel Garcia
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.
Reviewed-by: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
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 9c25012..1cb50d6 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -59,6 +59,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 {
@@ -193,7 +194,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);
@@ -206,6 +207,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;
@@ -278,6 +302,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 = {
@@ -286,6 +311,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 = {
@@ -294,6 +320,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.0
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 4/8] watchdog: orion: Introduce per-SoC enabled() function
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
` (2 preceding siblings ...)
2014-03-12 21:11 ` [PATCH v3 3/8] watchdog: orion: Introduce per-SoC stop() function Ezequiel Garcia
@ 2014-03-12 21:11 ` Ezequiel Garcia
2014-03-12 21:11 ` [PATCH v3 5/8] watchdog: orion: Add Armada 375/380 SoC support Ezequiel Garcia
` (5 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-03-12 21:11 UTC (permalink / raw)
To: linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA
Cc: Jason Cooper, Guenter Roeck, Jason Gunthorpe, Andrew Lunn,
Sebastian Hesselbarth, Lior Amsalem, Tawfik Bayouk,
Thomas Petazzoni, Gregory Clement, Wim Van Sebroeck,
Ezequiel Garcia
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.
Reviewed-by: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
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 1cb50d6..b255a9e 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -58,6 +58,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 *);
};
@@ -230,7 +231,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;
@@ -240,6 +241,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);
@@ -301,6 +309,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,
};
@@ -310,6 +319,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,
};
@@ -319,6 +329,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,
};
@@ -414,7 +425,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.0
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 5/8] watchdog: orion: Add Armada 375/380 SoC support
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
` (3 preceding siblings ...)
2014-03-12 21:11 ` [PATCH v3 4/8] watchdog: orion: Introduce per-SoC enabled() function Ezequiel Garcia
@ 2014-03-12 21:11 ` Ezequiel Garcia
2014-03-12 21:11 ` [PATCH v3 6/8] ARM: mvebu: Enable Armada 375 watchdog in the devicetree Ezequiel Garcia
` (4 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-03-12 21:11 UTC (permalink / raw)
To: linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA
Cc: Jason Cooper, Guenter Roeck, Jason Gunthorpe, Andrew Lunn,
Sebastian Hesselbarth, Lior Amsalem, Tawfik Bayouk,
Thomas Petazzoni, Gregory Clement, Wim Van Sebroeck,
Ezequiel Garcia
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.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
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 b255a9e..db8d3e2 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -56,6 +56,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 *);
@@ -67,6 +68,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;
@@ -145,6 +147,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);
@@ -208,6 +235,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);
@@ -241,6 +286,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);
@@ -334,6 +390,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",
@@ -347,6 +425,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);
@@ -400,6 +486,23 @@ static int orion_wdt_probe(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.0
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 6/8] ARM: mvebu: Enable Armada 375 watchdog in the devicetree
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
` (4 preceding siblings ...)
2014-03-12 21:11 ` [PATCH v3 5/8] watchdog: orion: Add Armada 375/380 SoC support Ezequiel Garcia
@ 2014-03-12 21:11 ` Ezequiel Garcia
2014-03-12 21:11 ` [PATCH v3 7/8] ARM: mvebu: Enable Armada 380/385 " Ezequiel Garcia
` (3 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-03-12 21:11 UTC (permalink / raw)
To: linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA
Cc: Jason Cooper, Guenter Roeck, Jason Gunthorpe, Andrew Lunn,
Sebastian Hesselbarth, Lior Amsalem, Tawfik Bayouk,
Thomas Petazzoni, Gregory Clement, Wim Van Sebroeck,
Ezequiel Garcia
Add the DT nodes to enable the watchdog support available on
Armada 375 SoC.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
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 3877693f..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@20300 {
+ compatible = "marvell,armada-375-wdt";
+ reg = <0x20300 0x34>, <0x20704 0x4>, <0x18254 0x4>;
+ clocks = <&coreclk 0>;
+ };
+
xor@60800 {
compatible = "marvell,orion-xor";
reg = <0x60800 0x100
--
1.9.0
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 7/8] ARM: mvebu: Enable Armada 380/385 watchdog in the devicetree
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
` (5 preceding siblings ...)
2014-03-12 21:11 ` [PATCH v3 6/8] ARM: mvebu: Enable Armada 375 watchdog in the devicetree Ezequiel Garcia
@ 2014-03-12 21:11 ` Ezequiel Garcia
2014-03-12 21:11 ` [PATCH v3 8/8] ARM: mvebu: Add A375/A380 watchdog binding documentation Ezequiel Garcia
` (2 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-03-12 21:11 UTC (permalink / raw)
To: linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA
Cc: Jason Cooper, Guenter Roeck, Jason Gunthorpe, Andrew Lunn,
Sebastian Hesselbarth, Lior Amsalem, Tawfik Bayouk,
Thomas Petazzoni, Gregory Clement, Wim Van Sebroeck,
Ezequiel Garcia
Add the DT nodes to enable the watchdog support available on
Armada 380/385 SoC.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
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 812ce28..2f0ebc6 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@20300 {
+ compatible = "marvell,armada-380-wdt";
+ reg = <0x20300 0x34>, <0x20704 0x4>, <0x18260 0x4>;
+ clocks = <&coreclk 2>, <&refclk>;
+ clock-names = "nbclk", "fixed";
+ };
+
eth1: ethernet@30000 {
compatible = "marvell,armada-370-neta";
reg = <0x30000 0x4000>;
--
1.9.0
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 8/8] ARM: mvebu: Add A375/A380 watchdog binding documentation
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
` (6 preceding siblings ...)
2014-03-12 21:11 ` [PATCH v3 7/8] ARM: mvebu: Enable Armada 380/385 " Ezequiel Garcia
@ 2014-03-12 21:11 ` Ezequiel Garcia
2014-03-12 21:43 ` [PATCH v3 0/8] Watchdog support for Armada 375/38x SoC Jason Gunthorpe
2014-03-14 22:21 ` Guenter Roeck
9 siblings, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-03-12 21:11 UTC (permalink / raw)
To: linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA
Cc: Jason Cooper, Guenter Roeck, Jason Gunthorpe, Andrew Lunn,
Sebastian Hesselbarth, Lior Amsalem, Tawfik Bayouk,
Thomas Petazzoni, Gregory Clement, Wim Van Sebroeck,
Ezequiel Garcia
This commit documents the new support for "marvell,armada-{375,380}-wdt"
compatible strings and the extra 'reg' entry requirement.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
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.0
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v3 0/8] Watchdog support for Armada 375/38x SoC
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
` (7 preceding siblings ...)
2014-03-12 21:11 ` [PATCH v3 8/8] ARM: mvebu: Add A375/A380 watchdog binding documentation Ezequiel Garcia
@ 2014-03-12 21:43 ` Jason Gunthorpe
[not found] ` <20140312214312.GA14357-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-03-14 22:21 ` Guenter Roeck
9 siblings, 1 reply; 14+ messages in thread
From: Jason Gunthorpe @ 2014-03-12 21:43 UTC (permalink / raw)
To: Ezequiel Garcia
Cc: linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, Jason Cooper, Guenter Roeck,
Andrew Lunn, Sebastian Hesselbarth, Lior Amsalem, Tawfik Bayouk,
Thomas Petazzoni, Gregory Clement, Wim Van Sebroeck
On Wed, Mar 12, 2014 at 06:11:47PM -0300, Ezequiel Garcia wrote:
> I've pushed a branch so people can test this easily, e.g. ensuring
> no regressions on Dove, Kirkwood and A370/XP:
>
> https://github.com/MISL-EBU-System-SW/mainline-public/tree/wdt_a385_a375_v3
This branch worked for me, the watchdog functioned as expected.
# killall -STOP wdt...
..
.
orion_wdt: Oops: Watchdog Timeout
CPU: 0 PID: 0 Comm: swapper Not tainted 3.14.0-rc1-00205-g666e53f-dirty #1
[..]
<REBOOT>
I got these two oddball messages during boot though:
irq: Cannot allocate irq_descs @ IRQ26, assuming pre-allocated
irq: Cannot allocate irq_descs @ IRQ61, assuming pre-allocated
Probably unrelated to the watchdog.. Unfortunately I've run out of
time right now to investigate.
Jason
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 0/8] Watchdog support for Armada 375/38x SoC
[not found] ` <1394658715-2017-1-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
` (8 preceding siblings ...)
2014-03-12 21:43 ` [PATCH v3 0/8] Watchdog support for Armada 375/38x SoC Jason Gunthorpe
@ 2014-03-14 22:21 ` Guenter Roeck
[not found] ` <532380EA.7010809-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
9 siblings, 1 reply; 14+ messages in thread
From: Guenter Roeck @ 2014-03-14 22:21 UTC (permalink / raw)
To: Ezequiel Garcia, linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA
Cc: Jason Cooper, Jason Gunthorpe, Andrew Lunn, Sebastian Hesselbarth,
Lior Amsalem, Tawfik Bayouk, Thomas Petazzoni, Gregory Clement,
Wim Van Sebroeck
On 03/12/2014 02:11 PM, Ezequiel Garcia wrote:
> Third round of the patchset adding support for watchdog on Armada 375 and
> Armada 38x SoCs.
>
> 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.
>
> I've pushed a branch so people can test this easily, e.g. ensuring
> no regressions on Dove, Kirkwood and A370/XP:
>
> https://github.com/MISL-EBU-System-SW/mainline-public/tree/wdt_a385_a375_v3
>
> 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 (8):
> 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 | 180 +++++++++++++++++++--
> 4 files changed, 188 insertions(+), 12 deletions(-)
>
For the series:
Reviewed-by: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
Guenter
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 14+ messages in thread