* [PATCH 0/3] qcom watchdog fixes
@ 2016-06-27 23:26 Thomas Pedersen
2016-06-27 23:26 ` [PATCH 1/3] watchdog: qcom: update device tree bindings Thomas Pedersen
` (3 more replies)
0 siblings, 4 replies; 12+ messages in thread
From: Thomas Pedersen @ 2016-06-27 23:26 UTC (permalink / raw)
To: linux-watchdog; +Cc: Thomas Pedersen
Some boards (eg. qcom IPQ8064 based) Need these changes to avoid a spurious
watchdog reset.
Matthew McClintock (3):
watchdog: qcom: update device tree bindings
watchdog: qcom: add option for standalone watchdog not in timer block
watchdog: qcom: configure BARK time in addition to BITE time
.../devicetree/bindings/watchdog/qcom-wdt.txt | 5 +-
drivers/watchdog/qcom-wdt.c | 78 ++++++++++++++++------
2 files changed, 59 insertions(+), 24 deletions(-)
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 12+ messages in thread* [PATCH 1/3] watchdog: qcom: update device tree bindings 2016-06-27 23:26 [PATCH 0/3] qcom watchdog fixes Thomas Pedersen @ 2016-06-27 23:26 ` Thomas Pedersen 2016-06-28 5:20 ` Guenter Roeck 2016-06-27 23:26 ` [PATCH 2/3] watchdog: qcom: add option for standalone watchdog not in timer block Thomas Pedersen ` (2 subsequent siblings) 3 siblings, 1 reply; 12+ messages in thread From: Thomas Pedersen @ 2016-06-27 23:26 UTC (permalink / raw) To: linux-watchdog Cc: Matthew McClintock, Wim Van Sebroeck, Guenter Roeck, Rob Herring, Mark Rutland From: Matthew McClintock <mmcclint@codeaurora.org> Update the compatible string to align with driver CC: linux-watchdog@vger.kernel.org Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org> --- Documentation/devicetree/bindings/watchdog/qcom-wdt.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt index 4726924..60bb2f98 100644 --- a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt +++ b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt @@ -4,9 +4,8 @@ Qualcomm Krait Processor Sub-system (KPSS) Watchdog Required properties : - compatible : shall contain only one of the following: - "qcom,kpss-wdt-msm8960" - "qcom,kpss-wdt-apq8064" - "qcom,kpss-wdt-ipq8064" + "qcom,kpss-timer" + "qcom,scss-timer" - reg : shall contain base register location and length - clocks : shall contain the input clock -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] watchdog: qcom: update device tree bindings 2016-06-27 23:26 ` [PATCH 1/3] watchdog: qcom: update device tree bindings Thomas Pedersen @ 2016-06-28 5:20 ` Guenter Roeck 2016-06-28 17:17 ` Thomas Pedersen 0 siblings, 1 reply; 12+ messages in thread From: Guenter Roeck @ 2016-06-28 5:20 UTC (permalink / raw) To: Thomas Pedersen, linux-watchdog Cc: Matthew McClintock, Wim Van Sebroeck, Rob Herring, Mark Rutland On 06/27/2016 04:26 PM, Thomas Pedersen wrote: > From: Matthew McClintock <mmcclint@codeaurora.org> > > Update the compatible string to align with driver > > CC: linux-watchdog@vger.kernel.org > Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org> > --- > Documentation/devicetree/bindings/watchdog/qcom-wdt.txt | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt > index 4726924..60bb2f98 100644 > --- a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt > +++ b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt > @@ -4,9 +4,8 @@ Qualcomm Krait Processor Sub-system (KPSS) Watchdog > Required properties : > - compatible : shall contain only one of the following: > > - "qcom,kpss-wdt-msm8960" > - "qcom,kpss-wdt-apq8064" > - "qcom,kpss-wdt-ipq8064" > + "qcom,kpss-timer" > + "qcom,scss-timer" > > - reg : shall contain base register location and length > - clocks : shall contain the input clock > Rob's earlier feedback to the same patch you had submitted in March: "Keep the SoC specific ones even if they are not used. The DTS should have both strings." Guenter ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] watchdog: qcom: update device tree bindings 2016-06-28 5:20 ` Guenter Roeck @ 2016-06-28 17:17 ` Thomas Pedersen 2016-06-28 17:24 ` Mark Rutland 0 siblings, 1 reply; 12+ messages in thread From: Thomas Pedersen @ 2016-06-28 17:17 UTC (permalink / raw) To: Guenter Roeck Cc: linux-watchdog, Matthew McClintock, Wim Van Sebroeck, Rob Herring, Mark Rutland On 2016-06-27 22:20, Guenter Roeck wrote: > On 06/27/2016 04:26 PM, Thomas Pedersen wrote: >> From: Matthew McClintock <mmcclint@codeaurora.org> >> >> Update the compatible string to align with driver >> >> CC: linux-watchdog@vger.kernel.org >> Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org> >> --- >> Documentation/devicetree/bindings/watchdog/qcom-wdt.txt | 5 ++--- >> 1 file changed, 2 insertions(+), 3 deletions(-) >> >> diff --git a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt >> b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt >> index 4726924..60bb2f98 100644 >> --- a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt >> +++ b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt >> @@ -4,9 +4,8 @@ Qualcomm Krait Processor Sub-system (KPSS) Watchdog >> Required properties : >> - compatible : shall contain only one of the following: >> >> - "qcom,kpss-wdt-msm8960" >> - "qcom,kpss-wdt-apq8064" >> - "qcom,kpss-wdt-ipq8064" >> + "qcom,kpss-timer" >> + "qcom,scss-timer" >> >> - reg : shall contain base register location and length >> - clocks : shall contain the input clock >> > > Rob's earlier feedback to the same patch you had submitted in March: > > "Keep the SoC specific ones even if they are not used. The DTS should > have both strings." Why would we add the SoC specific compatible strings to the DTS if they're not even used? -- thomas ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] watchdog: qcom: update device tree bindings 2016-06-28 17:17 ` Thomas Pedersen @ 2016-06-28 17:24 ` Mark Rutland 2016-06-28 17:34 ` Thomas Pedersen 0 siblings, 1 reply; 12+ messages in thread From: Mark Rutland @ 2016-06-28 17:24 UTC (permalink / raw) To: Thomas Pedersen Cc: Guenter Roeck, linux-watchdog, Matthew McClintock, Wim Van Sebroeck, Rob Herring On Tue, Jun 28, 2016 at 10:17:32AM -0700, Thomas Pedersen wrote: > On 2016-06-27 22:20, Guenter Roeck wrote: > >On 06/27/2016 04:26 PM, Thomas Pedersen wrote: > >>From: Matthew McClintock <mmcclint@codeaurora.org> > >> > >>Update the compatible string to align with driver > >> > >>CC: linux-watchdog@vger.kernel.org > >>Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org> > >>--- > >> Documentation/devicetree/bindings/watchdog/qcom-wdt.txt | 5 ++--- > >> 1 file changed, 2 insertions(+), 3 deletions(-) > >> > >>diff --git > >>a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt > >>b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt > >>index 4726924..60bb2f98 100644 > >>--- a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt > >>+++ b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt > >>@@ -4,9 +4,8 @@ Qualcomm Krait Processor Sub-system (KPSS) Watchdog > >> Required properties : > >> - compatible : shall contain only one of the following: > >> > >>- "qcom,kpss-wdt-msm8960" > >>- "qcom,kpss-wdt-apq8064" > >>- "qcom,kpss-wdt-ipq8064" > >>+ "qcom,kpss-timer" > >>+ "qcom,scss-timer" > >> > >> - reg : shall contain base register location and length > >> - clocks : shall contain the input clock > >> > > > >Rob's earlier feedback to the same patch you had submitted in March: > > > >"Keep the SoC specific ones even if they are not used. The DTS should > >have both strings." > > Why would we add the SoC specific compatible strings to the DTS if > they're not > even used? Because they might be in future, and having them present in existing DTBs will make our lives easier. Otherwise, they cost very little. Thanks, Mark. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] watchdog: qcom: update device tree bindings 2016-06-28 17:24 ` Mark Rutland @ 2016-06-28 17:34 ` Thomas Pedersen 0 siblings, 0 replies; 12+ messages in thread From: Thomas Pedersen @ 2016-06-28 17:34 UTC (permalink / raw) To: Mark Rutland Cc: Guenter Roeck, linux-watchdog, Matthew McClintock, Wim Van Sebroeck, Rob Herring On 2016-06-28 10:24, Mark Rutland wrote: > On Tue, Jun 28, 2016 at 10:17:32AM -0700, Thomas Pedersen wrote: >> On 2016-06-27 22:20, Guenter Roeck wrote: >> >On 06/27/2016 04:26 PM, Thomas Pedersen wrote: >> >>From: Matthew McClintock <mmcclint@codeaurora.org> >> >> >> >>Update the compatible string to align with driver >> >> >> >>CC: linux-watchdog@vger.kernel.org >> >>Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org> >> >>--- >> >> Documentation/devicetree/bindings/watchdog/qcom-wdt.txt | 5 ++--- >> >> 1 file changed, 2 insertions(+), 3 deletions(-) >> >> >> >>diff --git >> >>a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt >> >>b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt >> >>index 4726924..60bb2f98 100644 >> >>--- a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt >> >>+++ b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt >> >>@@ -4,9 +4,8 @@ Qualcomm Krait Processor Sub-system (KPSS) Watchdog >> >> Required properties : >> >> - compatible : shall contain only one of the following: >> >> >> >>- "qcom,kpss-wdt-msm8960" >> >>- "qcom,kpss-wdt-apq8064" >> >>- "qcom,kpss-wdt-ipq8064" >> >>+ "qcom,kpss-timer" >> >>+ "qcom,scss-timer" >> >> >> >> - reg : shall contain base register location and length >> >> - clocks : shall contain the input clock >> >> >> > >> >Rob's earlier feedback to the same patch you had submitted in March: >> > >> >"Keep the SoC specific ones even if they are not used. The DTS should >> >have both strings." >> >> Why would we add the SoC specific compatible strings to the DTS if >> they're not >> even used? > > Because they might be in future, and having them present in existing > DTBs will make our lives easier. Otherwise, they cost very little. Hm, ok. -- thomas ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/3] watchdog: qcom: add option for standalone watchdog not in timer block 2016-06-27 23:26 [PATCH 0/3] qcom watchdog fixes Thomas Pedersen 2016-06-27 23:26 ` [PATCH 1/3] watchdog: qcom: update device tree bindings Thomas Pedersen @ 2016-06-27 23:26 ` Thomas Pedersen 2016-06-28 5:23 ` Guenter Roeck 2016-06-27 23:26 ` [PATCH 3/3] watchdog: qcom: configure BARK time in addition to BITE time Thomas Pedersen 2016-06-28 5:31 ` [PATCH 0/3] qcom watchdog fixes Guenter Roeck 3 siblings, 1 reply; 12+ messages in thread From: Thomas Pedersen @ 2016-06-27 23:26 UTC (permalink / raw) To: linux-watchdog; +Cc: Matthew McClintock, Wim Van Sebroeck, Guenter Roeck From: Matthew McClintock <mmcclint@codeaurora.org> Commit 0dfd582e026a ("watchdog: qcom: use timer devicetree binding") moved to use the watchdog as a subset timer register block. Some devices have the watchdog completely standalone with slightly different register offsets as well so let's account for the differences here. Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org> --- drivers/watchdog/qcom-wdt.c | 73 ++++++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 21 deletions(-) diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c index a043fa4..70e42ed 100644 --- a/drivers/watchdog/qcom-wdt.c +++ b/drivers/watchdog/qcom-wdt.c @@ -19,18 +19,40 @@ #include <linux/platform_device.h> #include <linux/watchdog.h> -#define WDT_RST 0x38 -#define WDT_EN 0x40 -#define WDT_STS 0x44 -#define WDT_BITE_TIME 0x5C +enum wdt_reg { + WDT_RST, + WDT_EN, + WDT_STS, + WDT_BITE_TIME, +}; + +static const u32 reg_offset_data_apcs_tmr[] = { + [WDT_RST] = 0x38, + [WDT_EN] = 0x40, + [WDT_STS] = 0x44, + [WDT_BITE_TIME] = 0x5C, +}; + +static const u32 reg_offset_data_kpss[] = { + [WDT_RST] = 0x4, + [WDT_EN] = 0x8, + [WDT_STS] = 0xC, + [WDT_BITE_TIME] = 0x14, +}; struct qcom_wdt { struct watchdog_device wdd; struct clk *clk; unsigned long rate; void __iomem *base; + const u32 *layout; }; +static void __iomem *wdt_addr(struct qcom_wdt *wdt, enum wdt_reg reg) +{ + return wdt->base + wdt->layout[reg]; +} + static inline struct qcom_wdt *to_qcom_wdt(struct watchdog_device *wdd) { @@ -41,10 +63,10 @@ static int qcom_wdt_start(struct watchdog_device *wdd) { struct qcom_wdt *wdt = to_qcom_wdt(wdd); - writel(0, wdt->base + WDT_EN); - writel(1, wdt->base + WDT_RST); - writel(wdd->timeout * wdt->rate, wdt->base + WDT_BITE_TIME); - writel(1, wdt->base + WDT_EN); + writel(0, wdt_addr(wdt, WDT_EN)); + writel(1, wdt_addr(wdt, WDT_RST)); + writel(wdd->timeout * wdt->rate, wdt_addr(wdt, WDT_BITE_TIME)); + writel(1, wdt_addr(wdt, WDT_EN)); return 0; } @@ -52,7 +74,7 @@ static int qcom_wdt_stop(struct watchdog_device *wdd) { struct qcom_wdt *wdt = to_qcom_wdt(wdd); - writel(0, wdt->base + WDT_EN); + writel(0, wdt_addr(wdt, WDT_EN)); return 0; } @@ -60,7 +82,7 @@ static int qcom_wdt_ping(struct watchdog_device *wdd) { struct qcom_wdt *wdt = to_qcom_wdt(wdd); - writel(1, wdt->base + WDT_RST); + writel(1, wdt_addr(wdt, WDT_RST)); return 0; } @@ -83,10 +105,10 @@ static int qcom_wdt_restart(struct watchdog_device *wdd, unsigned long action, */ timeout = 128 * wdt->rate / 1000; - writel(0, wdt->base + WDT_EN); - writel(1, wdt->base + WDT_RST); - writel(timeout, wdt->base + WDT_BITE_TIME); - writel(1, wdt->base + WDT_EN); + writel(0, wdt_addr(wdt, WDT_EN)); + writel(1, wdt_addr(wdt, WDT_RST)); + writel(timeout, wdt_addr(wdt, WDT_BITE_TIME)); + writel(1, wdt_addr(wdt, WDT_EN)); /* * Actually make sure the above sequence hits hardware before sleeping. @@ -114,14 +136,29 @@ static const struct watchdog_info qcom_wdt_info = { .identity = KBUILD_MODNAME, }; +static const struct of_device_id qcom_wdt_of_table[] = { + { .compatible = "qcom,kpss-timer", .data = reg_offset_data_apcs_tmr }, + { .compatible = "qcom,scss-timer", .data = reg_offset_data_apcs_tmr }, + { .compatible = "qcom,kpss-standalone", .data = ®_offset_data_kpss}, + { }, +}; +MODULE_DEVICE_TABLE(of, qcom_wdt_of_table); + static int qcom_wdt_probe(struct platform_device *pdev) { struct qcom_wdt *wdt; struct resource *res; struct device_node *np = pdev->dev.of_node; + const struct of_device_id *match; u32 percpu_offset; int ret; + match = of_match_node(qcom_wdt_of_table, np); + if (!match) { + dev_err(&pdev->dev, "Unsupported QCOM WDT module\n"); + return -ENODEV; + } + wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); if (!wdt) return -ENOMEM; @@ -172,6 +209,7 @@ static int qcom_wdt_probe(struct platform_device *pdev) wdt->wdd.min_timeout = 1; wdt->wdd.max_timeout = 0x10000000U / wdt->rate; wdt->wdd.parent = &pdev->dev; + wdt->layout = match->data; if (readl(wdt->base + WDT_STS) & 1) wdt->wdd.bootstatus = WDIOF_CARDRESET; @@ -207,13 +245,6 @@ static int qcom_wdt_remove(struct platform_device *pdev) return 0; } -static const struct of_device_id qcom_wdt_of_table[] = { - { .compatible = "qcom,kpss-timer" }, - { .compatible = "qcom,scss-timer" }, - { }, -}; -MODULE_DEVICE_TABLE(of, qcom_wdt_of_table); - static struct platform_driver qcom_watchdog_driver = { .probe = qcom_wdt_probe, .remove = qcom_wdt_remove, -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] watchdog: qcom: add option for standalone watchdog not in timer block 2016-06-27 23:26 ` [PATCH 2/3] watchdog: qcom: add option for standalone watchdog not in timer block Thomas Pedersen @ 2016-06-28 5:23 ` Guenter Roeck 0 siblings, 0 replies; 12+ messages in thread From: Guenter Roeck @ 2016-06-28 5:23 UTC (permalink / raw) To: Thomas Pedersen, linux-watchdog; +Cc: Matthew McClintock, Wim Van Sebroeck On 06/27/2016 04:26 PM, Thomas Pedersen wrote: > From: Matthew McClintock <mmcclint@codeaurora.org> > > Commit 0dfd582e026a ("watchdog: qcom: use timer devicetree binding") moved > to use the watchdog as a subset timer register block. Some devices have the > watchdog completely standalone with slightly different register offsets as > well so let's account for the differences here. > > Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org> > --- > drivers/watchdog/qcom-wdt.c | 73 ++++++++++++++++++++++++++++++++------------- > 1 file changed, 52 insertions(+), 21 deletions(-) > > diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c > index a043fa4..70e42ed 100644 > --- a/drivers/watchdog/qcom-wdt.c > +++ b/drivers/watchdog/qcom-wdt.c > @@ -19,18 +19,40 @@ > #include <linux/platform_device.h> > #include <linux/watchdog.h> > > -#define WDT_RST 0x38 > -#define WDT_EN 0x40 > -#define WDT_STS 0x44 > -#define WDT_BITE_TIME 0x5C > +enum wdt_reg { > + WDT_RST, > + WDT_EN, > + WDT_STS, > + WDT_BITE_TIME, > +}; > + > +static const u32 reg_offset_data_apcs_tmr[] = { > + [WDT_RST] = 0x38, > + [WDT_EN] = 0x40, > + [WDT_STS] = 0x44, > + [WDT_BITE_TIME] = 0x5C, > +}; > + > +static const u32 reg_offset_data_kpss[] = { > + [WDT_RST] = 0x4, > + [WDT_EN] = 0x8, > + [WDT_STS] = 0xC, > + [WDT_BITE_TIME] = 0x14, > +}; > > struct qcom_wdt { > struct watchdog_device wdd; > struct clk *clk; > unsigned long rate; > void __iomem *base; > + const u32 *layout; > }; > > +static void __iomem *wdt_addr(struct qcom_wdt *wdt, enum wdt_reg reg) > +{ > + return wdt->base + wdt->layout[reg]; > +} > + > static inline > struct qcom_wdt *to_qcom_wdt(struct watchdog_device *wdd) > { > @@ -41,10 +63,10 @@ static int qcom_wdt_start(struct watchdog_device *wdd) > { > struct qcom_wdt *wdt = to_qcom_wdt(wdd); > > - writel(0, wdt->base + WDT_EN); > - writel(1, wdt->base + WDT_RST); > - writel(wdd->timeout * wdt->rate, wdt->base + WDT_BITE_TIME); > - writel(1, wdt->base + WDT_EN); > + writel(0, wdt_addr(wdt, WDT_EN)); > + writel(1, wdt_addr(wdt, WDT_RST)); > + writel(wdd->timeout * wdt->rate, wdt_addr(wdt, WDT_BITE_TIME)); > + writel(1, wdt_addr(wdt, WDT_EN)); > return 0; > } > > @@ -52,7 +74,7 @@ static int qcom_wdt_stop(struct watchdog_device *wdd) > { > struct qcom_wdt *wdt = to_qcom_wdt(wdd); > > - writel(0, wdt->base + WDT_EN); > + writel(0, wdt_addr(wdt, WDT_EN)); > return 0; > } > > @@ -60,7 +82,7 @@ static int qcom_wdt_ping(struct watchdog_device *wdd) > { > struct qcom_wdt *wdt = to_qcom_wdt(wdd); > > - writel(1, wdt->base + WDT_RST); > + writel(1, wdt_addr(wdt, WDT_RST)); > return 0; > } > > @@ -83,10 +105,10 @@ static int qcom_wdt_restart(struct watchdog_device *wdd, unsigned long action, > */ > timeout = 128 * wdt->rate / 1000; > > - writel(0, wdt->base + WDT_EN); > - writel(1, wdt->base + WDT_RST); > - writel(timeout, wdt->base + WDT_BITE_TIME); > - writel(1, wdt->base + WDT_EN); > + writel(0, wdt_addr(wdt, WDT_EN)); > + writel(1, wdt_addr(wdt, WDT_RST)); > + writel(timeout, wdt_addr(wdt, WDT_BITE_TIME)); > + writel(1, wdt_addr(wdt, WDT_EN)); > > /* > * Actually make sure the above sequence hits hardware before sleeping. > @@ -114,14 +136,29 @@ static const struct watchdog_info qcom_wdt_info = { > .identity = KBUILD_MODNAME, > }; > > +static const struct of_device_id qcom_wdt_of_table[] = { > + { .compatible = "qcom,kpss-timer", .data = reg_offset_data_apcs_tmr }, > + { .compatible = "qcom,scss-timer", .data = reg_offset_data_apcs_tmr }, > + { .compatible = "qcom,kpss-standalone", .data = ®_offset_data_kpss}, > + { }, > +}; > +MODULE_DEVICE_TABLE(of, qcom_wdt_of_table); > + > static int qcom_wdt_probe(struct platform_device *pdev) > { > struct qcom_wdt *wdt; > struct resource *res; > struct device_node *np = pdev->dev.of_node; > + const struct of_device_id *match; > u32 percpu_offset; > int ret; > > + match = of_match_node(qcom_wdt_of_table, np); > + if (!match) { > + dev_err(&pdev->dev, "Unsupported QCOM WDT module\n"); > + return -ENODEV; > + } > + > wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); > if (!wdt) > return -ENOMEM; > @@ -172,6 +209,7 @@ static int qcom_wdt_probe(struct platform_device *pdev) > wdt->wdd.min_timeout = 1; > wdt->wdd.max_timeout = 0x10000000U / wdt->rate; > wdt->wdd.parent = &pdev->dev; > + wdt->layout = match->data; > > if (readl(wdt->base + WDT_STS) & 1) > wdt->wdd.bootstatus = WDIOF_CARDRESET; > @@ -207,13 +245,6 @@ static int qcom_wdt_remove(struct platform_device *pdev) > return 0; > } > > -static const struct of_device_id qcom_wdt_of_table[] = { > - { .compatible = "qcom,kpss-timer" }, > - { .compatible = "qcom,scss-timer" }, > - { }, > -}; > -MODULE_DEVICE_TABLE(of, qcom_wdt_of_table); > - Earlier comment from Stephen Boyd: Leave this here and use of_device_get_match_data() in probe instead. > static struct platform_driver qcom_watchdog_driver = { > .probe = qcom_wdt_probe, > .remove = qcom_wdt_remove, > ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 3/3] watchdog: qcom: configure BARK time in addition to BITE time 2016-06-27 23:26 [PATCH 0/3] qcom watchdog fixes Thomas Pedersen 2016-06-27 23:26 ` [PATCH 1/3] watchdog: qcom: update device tree bindings Thomas Pedersen 2016-06-27 23:26 ` [PATCH 2/3] watchdog: qcom: add option for standalone watchdog not in timer block Thomas Pedersen @ 2016-06-27 23:26 ` Thomas Pedersen 2016-06-28 5:26 ` Guenter Roeck 2016-06-28 5:31 ` [PATCH 0/3] qcom watchdog fixes Guenter Roeck 3 siblings, 1 reply; 12+ messages in thread From: Thomas Pedersen @ 2016-06-27 23:26 UTC (permalink / raw) To: linux-watchdog; +Cc: Matthew McClintock, Wim Van Sebroeck, Guenter Roeck From: Matthew McClintock <mmcclint@codeaurora.org> For certain parts and some versions of TZ, TZ will reset the chip when a BARK is triggered even though it was not configured here. So by default let's configure this BARK time as well. Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org> --- drivers/watchdog/qcom-wdt.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c index 70e42ed..e2ad6e1 100644 --- a/drivers/watchdog/qcom-wdt.c +++ b/drivers/watchdog/qcom-wdt.c @@ -23,6 +23,7 @@ enum wdt_reg { WDT_RST, WDT_EN, WDT_STS, + WDT_BARK_TIME, WDT_BITE_TIME, }; @@ -30,6 +31,7 @@ static const u32 reg_offset_data_apcs_tmr[] = { [WDT_RST] = 0x38, [WDT_EN] = 0x40, [WDT_STS] = 0x44, + [WDT_BARK_TIME] = 0x4C, [WDT_BITE_TIME] = 0x5C, }; @@ -37,6 +39,7 @@ static const u32 reg_offset_data_kpss[] = { [WDT_RST] = 0x4, [WDT_EN] = 0x8, [WDT_STS] = 0xC, + [WDT_BARK_TIME] = 0x10, [WDT_BITE_TIME] = 0x14, }; @@ -65,6 +68,7 @@ static int qcom_wdt_start(struct watchdog_device *wdd) writel(0, wdt_addr(wdt, WDT_EN)); writel(1, wdt_addr(wdt, WDT_RST)); + writel(wdd->timeout * wdt->rate, wdt_addr(wdt, WDT_BARK_TIME)); writel(wdd->timeout * wdt->rate, wdt_addr(wdt, WDT_BITE_TIME)); writel(1, wdt_addr(wdt, WDT_EN)); return 0; @@ -107,6 +111,7 @@ static int qcom_wdt_restart(struct watchdog_device *wdd, unsigned long action, writel(0, wdt_addr(wdt, WDT_EN)); writel(1, wdt_addr(wdt, WDT_RST)); + writel(timeout, wdt_addr(wdt, WDT_BARK_TIME)); writel(timeout, wdt_addr(wdt, WDT_BITE_TIME)); writel(1, wdt_addr(wdt, WDT_EN)); -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] watchdog: qcom: configure BARK time in addition to BITE time 2016-06-27 23:26 ` [PATCH 3/3] watchdog: qcom: configure BARK time in addition to BITE time Thomas Pedersen @ 2016-06-28 5:26 ` Guenter Roeck 0 siblings, 0 replies; 12+ messages in thread From: Guenter Roeck @ 2016-06-28 5:26 UTC (permalink / raw) To: Thomas Pedersen, linux-watchdog; +Cc: Matthew McClintock, Wim Van Sebroeck On 06/27/2016 04:26 PM, Thomas Pedersen wrote: > From: Matthew McClintock <mmcclint@codeaurora.org> > > For certain parts and some versions of TZ, TZ will reset the chip > when a BARK is triggered even though it was not configured here. So > by default let's configure this BARK time as well. > > Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org> Seems to be identical to the earlier version of the same patch, which already had my Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > drivers/watchdog/qcom-wdt.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c > index 70e42ed..e2ad6e1 100644 > --- a/drivers/watchdog/qcom-wdt.c > +++ b/drivers/watchdog/qcom-wdt.c > @@ -23,6 +23,7 @@ enum wdt_reg { > WDT_RST, > WDT_EN, > WDT_STS, > + WDT_BARK_TIME, > WDT_BITE_TIME, > }; > > @@ -30,6 +31,7 @@ static const u32 reg_offset_data_apcs_tmr[] = { > [WDT_RST] = 0x38, > [WDT_EN] = 0x40, > [WDT_STS] = 0x44, > + [WDT_BARK_TIME] = 0x4C, > [WDT_BITE_TIME] = 0x5C, > }; > > @@ -37,6 +39,7 @@ static const u32 reg_offset_data_kpss[] = { > [WDT_RST] = 0x4, > [WDT_EN] = 0x8, > [WDT_STS] = 0xC, > + [WDT_BARK_TIME] = 0x10, > [WDT_BITE_TIME] = 0x14, > }; > > @@ -65,6 +68,7 @@ static int qcom_wdt_start(struct watchdog_device *wdd) > > writel(0, wdt_addr(wdt, WDT_EN)); > writel(1, wdt_addr(wdt, WDT_RST)); > + writel(wdd->timeout * wdt->rate, wdt_addr(wdt, WDT_BARK_TIME)); > writel(wdd->timeout * wdt->rate, wdt_addr(wdt, WDT_BITE_TIME)); > writel(1, wdt_addr(wdt, WDT_EN)); > return 0; > @@ -107,6 +111,7 @@ static int qcom_wdt_restart(struct watchdog_device *wdd, unsigned long action, > > writel(0, wdt_addr(wdt, WDT_EN)); > writel(1, wdt_addr(wdt, WDT_RST)); > + writel(timeout, wdt_addr(wdt, WDT_BARK_TIME)); > writel(timeout, wdt_addr(wdt, WDT_BITE_TIME)); > writel(1, wdt_addr(wdt, WDT_EN)); > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/3] qcom watchdog fixes 2016-06-27 23:26 [PATCH 0/3] qcom watchdog fixes Thomas Pedersen ` (2 preceding siblings ...) 2016-06-27 23:26 ` [PATCH 3/3] watchdog: qcom: configure BARK time in addition to BITE time Thomas Pedersen @ 2016-06-28 5:31 ` Guenter Roeck 2016-06-28 17:04 ` Thomas Pedersen 3 siblings, 1 reply; 12+ messages in thread From: Guenter Roeck @ 2016-06-28 5:31 UTC (permalink / raw) To: Thomas Pedersen, linux-watchdog On 06/27/2016 04:26 PM, Thomas Pedersen wrote: > Some boards (eg. qcom IPQ8064 based) Need these changes to avoid a spurious > watchdog reset. > > Matthew McClintock (3): > watchdog: qcom: update device tree bindings > watchdog: qcom: add option for standalone watchdog not in timer block > watchdog: qcom: configure BARK time in addition to BITE time > > .../devicetree/bindings/watchdog/qcom-wdt.txt | 5 +- > drivers/watchdog/qcom-wdt.c | 78 ++++++++++++++++------ > 2 files changed, 59 insertions(+), 24 deletions(-) > General comment: If you don't plan to address the comments made to the previous submission, please at least let the reviewers know what you are doing and why. Also, a note indicating that this is a resend would be helpful for those who did not see the original series. Thanks, Guenter ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/3] qcom watchdog fixes 2016-06-28 5:31 ` [PATCH 0/3] qcom watchdog fixes Guenter Roeck @ 2016-06-28 17:04 ` Thomas Pedersen 0 siblings, 0 replies; 12+ messages in thread From: Thomas Pedersen @ 2016-06-28 17:04 UTC (permalink / raw) To: Guenter Roeck; +Cc: linux-watchdog Hi Guenter, On 2016-06-27 22:31, Guenter Roeck wrote: > On 06/27/2016 04:26 PM, Thomas Pedersen wrote: >> Some boards (eg. qcom IPQ8064 based) Need these changes to avoid a >> spurious >> watchdog reset. >> >> Matthew McClintock (3): >> watchdog: qcom: update device tree bindings >> watchdog: qcom: add option for standalone watchdog not in timer >> block >> watchdog: qcom: configure BARK time in addition to BITE time >> >> .../devicetree/bindings/watchdog/qcom-wdt.txt | 5 +- >> drivers/watchdog/qcom-wdt.c | 78 >> ++++++++++++++++------ >> 2 files changed, 59 insertions(+), 24 deletions(-) >> > > General comment: If you don't plan to address the comments made to > the previous submission, please at least let the reviewers know > what you are doing and why. Also, a note indicating that this > is a resend would be helpful for those who did not see the original > series. Thanks, checking for earlier submissions slipped my mind. I'll address your comments in a v2. -- thomas ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2016-06-28 17:34 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-06-27 23:26 [PATCH 0/3] qcom watchdog fixes Thomas Pedersen 2016-06-27 23:26 ` [PATCH 1/3] watchdog: qcom: update device tree bindings Thomas Pedersen 2016-06-28 5:20 ` Guenter Roeck 2016-06-28 17:17 ` Thomas Pedersen 2016-06-28 17:24 ` Mark Rutland 2016-06-28 17:34 ` Thomas Pedersen 2016-06-27 23:26 ` [PATCH 2/3] watchdog: qcom: add option for standalone watchdog not in timer block Thomas Pedersen 2016-06-28 5:23 ` Guenter Roeck 2016-06-27 23:26 ` [PATCH 3/3] watchdog: qcom: configure BARK time in addition to BITE time Thomas Pedersen 2016-06-28 5:26 ` Guenter Roeck 2016-06-28 5:31 ` [PATCH 0/3] qcom watchdog fixes Guenter Roeck 2016-06-28 17:04 ` Thomas Pedersen
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).