* [PATCH V4 0/4] add iwdg2 support for stm32mp157c @ 2018-06-21 9:02 Ludovic Barre 2018-06-21 9:02 ` [PATCH V4 1/4] dt-bindings: watchdog: add stm32mp1 support Ludovic Barre ` (3 more replies) 0 siblings, 4 replies; 12+ messages in thread From: Ludovic Barre @ 2018-06-21 9:02 UTC (permalink / raw) To: Wim Van Sebroeck, Guenter Roeck, Rob Herring Cc: Maxime Coquelin, Alexandre Torgue, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree, Ludovic Barre From: Ludovic Barre <ludovic.barre@st.com> This patch series updates stm32_iwdg driver to manage pclk clock by compatible. stm32mp1 requires a pclk clock. v4: -dt-bindings: split and review v3: -remove stm32_iwdg_config structure, just assign the boolean directly to .dat Ludovic Barre (4): dt-bindings: watchdog: add stm32mp1 support watchdog: stm32: add pclk feature for stm32mp1 ARM: dts: stm32: add iwdg2 support for stm32mp157c ARM: dts: stm32: add iwdg2 support for stm32mp157c-ed1 .../devicetree/bindings/watchdog/st,stm32-iwdg.txt | 13 ++- arch/arm/boot/dts/stm32mp157c-ed1.dts | 5 + arch/arm/boot/dts/stm32mp157c.dtsi | 8 ++ drivers/watchdog/stm32_iwdg.c | 116 +++++++++++++-------- 4 files changed, 97 insertions(+), 45 deletions(-) -- 2.7.4 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH V4 1/4] dt-bindings: watchdog: add stm32mp1 support 2018-06-21 9:02 [PATCH V4 0/4] add iwdg2 support for stm32mp157c Ludovic Barre @ 2018-06-21 9:02 ` Ludovic Barre 2018-06-25 15:51 ` Rob Herring 2018-06-21 9:02 ` [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 Ludovic Barre ` (2 subsequent siblings) 3 siblings, 1 reply; 12+ messages in thread From: Ludovic Barre @ 2018-06-21 9:02 UTC (permalink / raw) To: Wim Van Sebroeck, Guenter Roeck, Rob Herring Cc: Maxime Coquelin, Alexandre Torgue, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree, Ludovic Barre From: Ludovic Barre <ludovic.barre@st.com> This patch adds support of stm32mp1. stm32mp1 requires 2 clocks lsi and pclk. Signed-off-by: Ludovic Barre <ludovic.barre@st.com> --- .../devicetree/bindings/watchdog/st,stm32-iwdg.txt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/watchdog/st,stm32-iwdg.txt b/Documentation/devicetree/bindings/watchdog/st,stm32-iwdg.txt index cc13b10a..d8f4430 100644 --- a/Documentation/devicetree/bindings/watchdog/st,stm32-iwdg.txt +++ b/Documentation/devicetree/bindings/watchdog/st,stm32-iwdg.txt @@ -2,9 +2,15 @@ STM32 Independent WatchDoG (IWDG) --------------------------------- Required properties: -- compatible: "st,stm32-iwdg" -- reg: physical base address and length of the registers set for the device -- clocks: must contain a single entry describing the clock input +- compatible: Should be either: + - "st,stm32-iwdg" + - "st,stm32mp1-iwdg" +- reg: Physical base address and length of the registers set for the device +- clocks: Reference to the clock entry lsi. Additional pclk clock entry + is required only for st,stm32mp1-iwdg. +- clock-names: Name of the clocks used. + "lsi" for st,stm32-iwdg + "lsi", "pclk" for st,stm32mp1-iwdg Optional Properties: - timeout-sec: Watchdog timeout value in seconds. @@ -15,5 +21,6 @@ iwdg: watchdog@40003000 { compatible = "st,stm32-iwdg"; reg = <0x40003000 0x400>; clocks = <&clk_lsi>; + clock-names = "lsi"; timeout-sec = <32>; }; -- 2.7.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH V4 1/4] dt-bindings: watchdog: add stm32mp1 support 2018-06-21 9:02 ` [PATCH V4 1/4] dt-bindings: watchdog: add stm32mp1 support Ludovic Barre @ 2018-06-25 15:51 ` Rob Herring 0 siblings, 0 replies; 12+ messages in thread From: Rob Herring @ 2018-06-25 15:51 UTC (permalink / raw) To: Ludovic Barre Cc: Wim Van Sebroeck, Guenter Roeck, Maxime Coquelin, Alexandre Torgue, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree On Thu, Jun 21, 2018 at 11:02:14AM +0200, Ludovic Barre wrote: > From: Ludovic Barre <ludovic.barre@st.com> > > This patch adds support of stm32mp1. > stm32mp1 requires 2 clocks lsi and pclk. > > Signed-off-by: Ludovic Barre <ludovic.barre@st.com> > --- > .../devicetree/bindings/watchdog/st,stm32-iwdg.txt | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 2018-06-21 9:02 [PATCH V4 0/4] add iwdg2 support for stm32mp157c Ludovic Barre 2018-06-21 9:02 ` [PATCH V4 1/4] dt-bindings: watchdog: add stm32mp1 support Ludovic Barre @ 2018-06-21 9:02 ` Ludovic Barre 2018-06-21 16:53 ` Guenter Roeck 2018-06-21 9:02 ` [PATCH V4 3/4] ARM: dts: stm32: add iwdg2 support for stm32mp157c Ludovic Barre 2018-06-21 9:02 ` [PATCH V4 4/4] ARM: dts: stm32: add iwdg2 support for stm32mp157c-ed1 Ludovic Barre 3 siblings, 1 reply; 12+ messages in thread From: Ludovic Barre @ 2018-06-21 9:02 UTC (permalink / raw) To: Wim Van Sebroeck, Guenter Roeck, Rob Herring Cc: Maxime Coquelin, Alexandre Torgue, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree, Ludovic Barre From: Ludovic Barre <ludovic.barre@st.com> This patch adds compatible data to manage pclk clock by compatible. Adds stm32mp1 support which requires pclk clock. Signed-off-by: Ludovic Barre <ludovic.barre@st.com> --- drivers/watchdog/stm32_iwdg.c | 116 +++++++++++++++++++++++++++--------------- 1 file changed, 74 insertions(+), 42 deletions(-) diff --git a/drivers/watchdog/stm32_iwdg.c b/drivers/watchdog/stm32_iwdg.c index c97ad56..e00e3b3 100644 --- a/drivers/watchdog/stm32_iwdg.c +++ b/drivers/watchdog/stm32_iwdg.c @@ -11,12 +11,13 @@ #include <linux/clk.h> #include <linux/delay.h> -#include <linux/kernel.h> -#include <linux/module.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/iopoll.h> +#include <linux/kernel.h> +#include <linux/module.h> #include <linux/of.h> +#include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/watchdog.h> @@ -54,11 +55,15 @@ #define TIMEOUT_US 100000 #define SLEEP_US 1000 +#define HAS_PCLK true + struct stm32_iwdg { struct watchdog_device wdd; void __iomem *regs; - struct clk *clk; + struct clk *clk_lsi; + struct clk *clk_pclk; unsigned int rate; + bool has_pclk; }; static inline u32 reg_read(void __iomem *base, u32 reg) @@ -133,6 +138,44 @@ static int stm32_iwdg_set_timeout(struct watchdog_device *wdd, return 0; } +static int stm32_iwdg_clk_init(struct platform_device *pdev, + struct stm32_iwdg *wdt) +{ + u32 ret; + + wdt->clk_lsi = devm_clk_get(&pdev->dev, "lsi"); + if (IS_ERR(wdt->clk_lsi)) { + dev_err(&pdev->dev, "Unable to get lsi clock\n"); + return PTR_ERR(wdt->clk_lsi); + } + + /* optional peripheral clock */ + if (wdt->has_pclk) { + wdt->clk_pclk = devm_clk_get(&pdev->dev, "pclk"); + if (IS_ERR(wdt->clk_pclk)) { + dev_err(&pdev->dev, "Unable to get pclk clock\n"); + return PTR_ERR(wdt->clk_pclk); + } + + ret = clk_prepare_enable(wdt->clk_pclk); + if (ret) { + dev_err(&pdev->dev, "Unable to prepare pclk clock\n"); + return ret; + } + } + + ret = clk_prepare_enable(wdt->clk_lsi); + if (ret) { + dev_err(&pdev->dev, "Unable to prepare lsi clock\n"); + clk_disable_unprepare(wdt->clk_pclk); + return ret; + } + + wdt->rate = clk_get_rate(wdt->clk_lsi); + + return 0; +} + static const struct watchdog_info stm32_iwdg_info = { .options = WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE | @@ -147,49 +190,42 @@ static const struct watchdog_ops stm32_iwdg_ops = { .set_timeout = stm32_iwdg_set_timeout, }; +static const struct of_device_id stm32_iwdg_of_match[] = { + { .compatible = "st,stm32-iwdg", .data = (void *)!HAS_PCLK }, + { .compatible = "st,stm32mp1-iwdg", .data = (void *)HAS_PCLK }, + { /* end node */ } +}; +MODULE_DEVICE_TABLE(of, stm32_iwdg_of_match); + static int stm32_iwdg_probe(struct platform_device *pdev) { struct watchdog_device *wdd; + const struct of_device_id *match; struct stm32_iwdg *wdt; struct resource *res; - void __iomem *regs; - struct clk *clk; int ret; + match = of_match_device(stm32_iwdg_of_match, &pdev->dev); + if (!match) + return -ENODEV; + + wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); + if (!wdt) + return -ENOMEM; + + wdt->has_pclk = match->data; + /* This is the timer base. */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - regs = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(regs)) { + wdt->regs = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(wdt->regs)) { dev_err(&pdev->dev, "Could not get resource\n"); - return PTR_ERR(regs); + return PTR_ERR(wdt->regs); } - clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(clk)) { - dev_err(&pdev->dev, "Unable to get clock\n"); - return PTR_ERR(clk); - } - - ret = clk_prepare_enable(clk); - if (ret) { - dev_err(&pdev->dev, "Unable to prepare clock %p\n", clk); + ret = stm32_iwdg_clk_init(pdev, wdt); + if (ret) return ret; - } - - /* - * Allocate our watchdog driver data, which has the - * struct watchdog_device nested within it. - */ - wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); - if (!wdt) { - ret = -ENOMEM; - goto err; - } - - /* Initialize struct stm32_iwdg. */ - wdt->regs = regs; - wdt->clk = clk; - wdt->rate = clk_get_rate(clk); /* Initialize struct watchdog_device. */ wdd = &wdt->wdd; @@ -217,7 +253,8 @@ static int stm32_iwdg_probe(struct platform_device *pdev) return 0; err: - clk_disable_unprepare(clk); + clk_disable_unprepare(wdt->clk_lsi); + clk_disable_unprepare(wdt->clk_pclk); return ret; } @@ -227,23 +264,18 @@ static int stm32_iwdg_remove(struct platform_device *pdev) struct stm32_iwdg *wdt = platform_get_drvdata(pdev); watchdog_unregister_device(&wdt->wdd); - clk_disable_unprepare(wdt->clk); + clk_disable_unprepare(wdt->clk_lsi); + clk_disable_unprepare(wdt->clk_pclk); return 0; } -static const struct of_device_id stm32_iwdg_of_match[] = { - { .compatible = "st,stm32-iwdg" }, - { /* end node */ } -}; -MODULE_DEVICE_TABLE(of, stm32_iwdg_of_match); - static struct platform_driver stm32_iwdg_driver = { .probe = stm32_iwdg_probe, .remove = stm32_iwdg_remove, .driver = { .name = "iwdg", - .of_match_table = stm32_iwdg_of_match, + .of_match_table = of_match_ptr(stm32_iwdg_of_match), }, }; module_platform_driver(stm32_iwdg_driver); -- 2.7.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 2018-06-21 9:02 ` [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 Ludovic Barre @ 2018-06-21 16:53 ` Guenter Roeck 2018-06-22 9:15 ` Ludovic BARRE 0 siblings, 1 reply; 12+ messages in thread From: Guenter Roeck @ 2018-06-21 16:53 UTC (permalink / raw) To: Ludovic Barre Cc: Wim Van Sebroeck, Rob Herring, Maxime Coquelin, Alexandre Torgue, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree On Thu, Jun 21, 2018 at 11:02:15AM +0200, Ludovic Barre wrote: > From: Ludovic Barre <ludovic.barre@st.com> > > This patch adds compatible data to manage pclk clock by > compatible. Adds stm32mp1 support which requires pclk clock. > > Signed-off-by: Ludovic Barre <ludovic.barre@st.com> > --- > drivers/watchdog/stm32_iwdg.c | 116 +++++++++++++++++++++++++++--------------- > 1 file changed, 74 insertions(+), 42 deletions(-) > > diff --git a/drivers/watchdog/stm32_iwdg.c b/drivers/watchdog/stm32_iwdg.c > index c97ad56..e00e3b3 100644 > --- a/drivers/watchdog/stm32_iwdg.c > +++ b/drivers/watchdog/stm32_iwdg.c > @@ -11,12 +11,13 @@ > > #include <linux/clk.h> > #include <linux/delay.h> > -#include <linux/kernel.h> > -#include <linux/module.h> > #include <linux/interrupt.h> > #include <linux/io.h> > #include <linux/iopoll.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > #include <linux/of.h> > +#include <linux/of_device.h> > #include <linux/platform_device.h> > #include <linux/watchdog.h> > > @@ -54,11 +55,15 @@ > #define TIMEOUT_US 100000 > #define SLEEP_US 1000 > > +#define HAS_PCLK true > + > struct stm32_iwdg { > struct watchdog_device wdd; > void __iomem *regs; > - struct clk *clk; > + struct clk *clk_lsi; > + struct clk *clk_pclk; > unsigned int rate; > + bool has_pclk; > }; > > static inline u32 reg_read(void __iomem *base, u32 reg) > @@ -133,6 +138,44 @@ static int stm32_iwdg_set_timeout(struct watchdog_device *wdd, > return 0; > } > > +static int stm32_iwdg_clk_init(struct platform_device *pdev, > + struct stm32_iwdg *wdt) > +{ > + u32 ret; > + > + wdt->clk_lsi = devm_clk_get(&pdev->dev, "lsi"); I just noticed a subtle difference: This used to be devm_clk_get(&pdev->dev, NULL); which would always get the first clock, no matter how it is named. Can that cause problems with backward compatibility ? Thanks, Guenter > + if (IS_ERR(wdt->clk_lsi)) { > + dev_err(&pdev->dev, "Unable to get lsi clock\n"); > + return PTR_ERR(wdt->clk_lsi); > + } > + > + /* optional peripheral clock */ > + if (wdt->has_pclk) { > + wdt->clk_pclk = devm_clk_get(&pdev->dev, "pclk"); > + if (IS_ERR(wdt->clk_pclk)) { > + dev_err(&pdev->dev, "Unable to get pclk clock\n"); > + return PTR_ERR(wdt->clk_pclk); > + } > + > + ret = clk_prepare_enable(wdt->clk_pclk); > + if (ret) { > + dev_err(&pdev->dev, "Unable to prepare pclk clock\n"); > + return ret; > + } > + } > + > + ret = clk_prepare_enable(wdt->clk_lsi); > + if (ret) { > + dev_err(&pdev->dev, "Unable to prepare lsi clock\n"); > + clk_disable_unprepare(wdt->clk_pclk); > + return ret; > + } > + > + wdt->rate = clk_get_rate(wdt->clk_lsi); > + > + return 0; > +} > + > static const struct watchdog_info stm32_iwdg_info = { > .options = WDIOF_SETTIMEOUT | > WDIOF_MAGICCLOSE | > @@ -147,49 +190,42 @@ static const struct watchdog_ops stm32_iwdg_ops = { > .set_timeout = stm32_iwdg_set_timeout, > }; > > +static const struct of_device_id stm32_iwdg_of_match[] = { > + { .compatible = "st,stm32-iwdg", .data = (void *)!HAS_PCLK }, > + { .compatible = "st,stm32mp1-iwdg", .data = (void *)HAS_PCLK }, > + { /* end node */ } > +}; > +MODULE_DEVICE_TABLE(of, stm32_iwdg_of_match); > + > static int stm32_iwdg_probe(struct platform_device *pdev) > { > struct watchdog_device *wdd; > + const struct of_device_id *match; > struct stm32_iwdg *wdt; > struct resource *res; > - void __iomem *regs; > - struct clk *clk; > int ret; > > + match = of_match_device(stm32_iwdg_of_match, &pdev->dev); > + if (!match) > + return -ENODEV; > + > + wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); > + if (!wdt) > + return -ENOMEM; > + > + wdt->has_pclk = match->data; > + > /* This is the timer base. */ > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - regs = devm_ioremap_resource(&pdev->dev, res); > - if (IS_ERR(regs)) { > + wdt->regs = devm_ioremap_resource(&pdev->dev, res); > + if (IS_ERR(wdt->regs)) { > dev_err(&pdev->dev, "Could not get resource\n"); > - return PTR_ERR(regs); > + return PTR_ERR(wdt->regs); > } > > - clk = devm_clk_get(&pdev->dev, NULL); > - if (IS_ERR(clk)) { > - dev_err(&pdev->dev, "Unable to get clock\n"); > - return PTR_ERR(clk); > - } > - > - ret = clk_prepare_enable(clk); > - if (ret) { > - dev_err(&pdev->dev, "Unable to prepare clock %p\n", clk); > + ret = stm32_iwdg_clk_init(pdev, wdt); > + if (ret) > return ret; > - } > - > - /* > - * Allocate our watchdog driver data, which has the > - * struct watchdog_device nested within it. > - */ > - wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); > - if (!wdt) { > - ret = -ENOMEM; > - goto err; > - } > - > - /* Initialize struct stm32_iwdg. */ > - wdt->regs = regs; > - wdt->clk = clk; > - wdt->rate = clk_get_rate(clk); > > /* Initialize struct watchdog_device. */ > wdd = &wdt->wdd; > @@ -217,7 +253,8 @@ static int stm32_iwdg_probe(struct platform_device *pdev) > > return 0; > err: > - clk_disable_unprepare(clk); > + clk_disable_unprepare(wdt->clk_lsi); > + clk_disable_unprepare(wdt->clk_pclk); > > return ret; > } > @@ -227,23 +264,18 @@ static int stm32_iwdg_remove(struct platform_device *pdev) > struct stm32_iwdg *wdt = platform_get_drvdata(pdev); > > watchdog_unregister_device(&wdt->wdd); > - clk_disable_unprepare(wdt->clk); > + clk_disable_unprepare(wdt->clk_lsi); > + clk_disable_unprepare(wdt->clk_pclk); > > return 0; > } > > -static const struct of_device_id stm32_iwdg_of_match[] = { > - { .compatible = "st,stm32-iwdg" }, > - { /* end node */ } > -}; > -MODULE_DEVICE_TABLE(of, stm32_iwdg_of_match); > - > static struct platform_driver stm32_iwdg_driver = { > .probe = stm32_iwdg_probe, > .remove = stm32_iwdg_remove, > .driver = { > .name = "iwdg", > - .of_match_table = stm32_iwdg_of_match, > + .of_match_table = of_match_ptr(stm32_iwdg_of_match), > }, > }; > module_platform_driver(stm32_iwdg_driver); > -- > 2.7.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 2018-06-21 16:53 ` Guenter Roeck @ 2018-06-22 9:15 ` Ludovic BARRE 2018-06-22 13:40 ` Guenter Roeck 0 siblings, 1 reply; 12+ messages in thread From: Ludovic BARRE @ 2018-06-22 9:15 UTC (permalink / raw) To: Guenter Roeck Cc: Wim Van Sebroeck, Rob Herring, Maxime Coquelin, Alexandre Torgue, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree On 06/21/2018 06:53 PM, Guenter Roeck wrote: > On Thu, Jun 21, 2018 at 11:02:15AM +0200, Ludovic Barre wrote: >> From: Ludovic Barre <ludovic.barre@st.com> >> >> This patch adds compatible data to manage pclk clock by >> compatible. Adds stm32mp1 support which requires pclk clock. >> >> Signed-off-by: Ludovic Barre <ludovic.barre@st.com> >> --- >> drivers/watchdog/stm32_iwdg.c | 116 +++++++++++++++++++++++++++--------------- >> 1 file changed, 74 insertions(+), 42 deletions(-) >> >> diff --git a/drivers/watchdog/stm32_iwdg.c b/drivers/watchdog/stm32_iwdg.c >> index c97ad56..e00e3b3 100644 >> --- a/drivers/watchdog/stm32_iwdg.c >> +++ b/drivers/watchdog/stm32_iwdg.c >> @@ -11,12 +11,13 @@ >> >> #include <linux/clk.h> >> #include <linux/delay.h> >> -#include <linux/kernel.h> >> -#include <linux/module.h> >> #include <linux/interrupt.h> >> #include <linux/io.h> >> #include <linux/iopoll.h> >> +#include <linux/kernel.h> >> +#include <linux/module.h> >> #include <linux/of.h> >> +#include <linux/of_device.h> >> #include <linux/platform_device.h> >> #include <linux/watchdog.h> >> >> @@ -54,11 +55,15 @@ >> #define TIMEOUT_US 100000 >> #define SLEEP_US 1000 >> >> +#define HAS_PCLK true >> + >> struct stm32_iwdg { >> struct watchdog_device wdd; >> void __iomem *regs; >> - struct clk *clk; >> + struct clk *clk_lsi; >> + struct clk *clk_pclk; >> unsigned int rate; >> + bool has_pclk; >> }; >> >> static inline u32 reg_read(void __iomem *base, u32 reg) >> @@ -133,6 +138,44 @@ static int stm32_iwdg_set_timeout(struct watchdog_device *wdd, >> return 0; >> } >> >> +static int stm32_iwdg_clk_init(struct platform_device *pdev, >> + struct stm32_iwdg *wdt) >> +{ >> + u32 ret; >> + >> + wdt->clk_lsi = devm_clk_get(&pdev->dev, "lsi"); > > I just noticed a subtle difference: This used to be > devm_clk_get(&pdev->dev, NULL); > which would always get the first clock, no matter how it is named. > Can that cause problems with backward compatibility ? You are right Guenter. When there are multiple clocks, I prefer to use name interface. I find it easier to use, and avoid misunderstanding. Today, only one "dtsi" define the watchdog and it's disabled (stm32f429.dtsi). I think it's good moment to move to clock named (before it is used anymore). But you are right I forgot to change stm32f429.dtsi. If I add a commit for stm32f429.dtsi, it's Ok for you ? BR Ludo > > Thanks, > Guenter > >> + if (IS_ERR(wdt->clk_lsi)) { >> + dev_err(&pdev->dev, "Unable to get lsi clock\n"); >> + return PTR_ERR(wdt->clk_lsi); >> + } >> + >> + /* optional peripheral clock */ >> + if (wdt->has_pclk) { >> + wdt->clk_pclk = devm_clk_get(&pdev->dev, "pclk"); >> + if (IS_ERR(wdt->clk_pclk)) { >> + dev_err(&pdev->dev, "Unable to get pclk clock\n"); >> + return PTR_ERR(wdt->clk_pclk); >> + } >> + >> + ret = clk_prepare_enable(wdt->clk_pclk); >> + if (ret) { >> + dev_err(&pdev->dev, "Unable to prepare pclk clock\n"); >> + return ret; >> + } >> + } >> + >> + ret = clk_prepare_enable(wdt->clk_lsi); >> + if (ret) { >> + dev_err(&pdev->dev, "Unable to prepare lsi clock\n"); >> + clk_disable_unprepare(wdt->clk_pclk); >> + return ret; >> + } >> + >> + wdt->rate = clk_get_rate(wdt->clk_lsi); >> + >> + return 0; >> +} >> + >> static const struct watchdog_info stm32_iwdg_info = { >> .options = WDIOF_SETTIMEOUT | >> WDIOF_MAGICCLOSE | >> @@ -147,49 +190,42 @@ static const struct watchdog_ops stm32_iwdg_ops = { >> .set_timeout = stm32_iwdg_set_timeout, >> }; >> >> +static const struct of_device_id stm32_iwdg_of_match[] = { >> + { .compatible = "st,stm32-iwdg", .data = (void *)!HAS_PCLK }, >> + { .compatible = "st,stm32mp1-iwdg", .data = (void *)HAS_PCLK }, >> + { /* end node */ } >> +}; >> +MODULE_DEVICE_TABLE(of, stm32_iwdg_of_match); >> + >> static int stm32_iwdg_probe(struct platform_device *pdev) >> { >> struct watchdog_device *wdd; >> + const struct of_device_id *match; >> struct stm32_iwdg *wdt; >> struct resource *res; >> - void __iomem *regs; >> - struct clk *clk; >> int ret; >> >> + match = of_match_device(stm32_iwdg_of_match, &pdev->dev); >> + if (!match) >> + return -ENODEV; >> + >> + wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); >> + if (!wdt) >> + return -ENOMEM; >> + >> + wdt->has_pclk = match->data; >> + >> /* This is the timer base. */ >> res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >> - regs = devm_ioremap_resource(&pdev->dev, res); >> - if (IS_ERR(regs)) { >> + wdt->regs = devm_ioremap_resource(&pdev->dev, res); >> + if (IS_ERR(wdt->regs)) { >> dev_err(&pdev->dev, "Could not get resource\n"); >> - return PTR_ERR(regs); >> + return PTR_ERR(wdt->regs); >> } >> >> - clk = devm_clk_get(&pdev->dev, NULL); >> - if (IS_ERR(clk)) { >> - dev_err(&pdev->dev, "Unable to get clock\n"); >> - return PTR_ERR(clk); >> - } >> - >> - ret = clk_prepare_enable(clk); >> - if (ret) { >> - dev_err(&pdev->dev, "Unable to prepare clock %p\n", clk); >> + ret = stm32_iwdg_clk_init(pdev, wdt); >> + if (ret) >> return ret; >> - } >> - >> - /* >> - * Allocate our watchdog driver data, which has the >> - * struct watchdog_device nested within it. >> - */ >> - wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); >> - if (!wdt) { >> - ret = -ENOMEM; >> - goto err; >> - } >> - >> - /* Initialize struct stm32_iwdg. */ >> - wdt->regs = regs; >> - wdt->clk = clk; >> - wdt->rate = clk_get_rate(clk); >> >> /* Initialize struct watchdog_device. */ >> wdd = &wdt->wdd; >> @@ -217,7 +253,8 @@ static int stm32_iwdg_probe(struct platform_device *pdev) >> >> return 0; >> err: >> - clk_disable_unprepare(clk); >> + clk_disable_unprepare(wdt->clk_lsi); >> + clk_disable_unprepare(wdt->clk_pclk); >> >> return ret; >> } >> @@ -227,23 +264,18 @@ static int stm32_iwdg_remove(struct platform_device *pdev) >> struct stm32_iwdg *wdt = platform_get_drvdata(pdev); >> >> watchdog_unregister_device(&wdt->wdd); >> - clk_disable_unprepare(wdt->clk); >> + clk_disable_unprepare(wdt->clk_lsi); >> + clk_disable_unprepare(wdt->clk_pclk); >> >> return 0; >> } >> >> -static const struct of_device_id stm32_iwdg_of_match[] = { >> - { .compatible = "st,stm32-iwdg" }, >> - { /* end node */ } >> -}; >> -MODULE_DEVICE_TABLE(of, stm32_iwdg_of_match); >> - >> static struct platform_driver stm32_iwdg_driver = { >> .probe = stm32_iwdg_probe, >> .remove = stm32_iwdg_remove, >> .driver = { >> .name = "iwdg", >> - .of_match_table = stm32_iwdg_of_match, >> + .of_match_table = of_match_ptr(stm32_iwdg_of_match), >> }, >> }; >> module_platform_driver(stm32_iwdg_driver); >> -- >> 2.7.4 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 2018-06-22 9:15 ` Ludovic BARRE @ 2018-06-22 13:40 ` Guenter Roeck 2018-06-25 12:52 ` Alexandre Torgue 0 siblings, 1 reply; 12+ messages in thread From: Guenter Roeck @ 2018-06-22 13:40 UTC (permalink / raw) To: Ludovic BARRE Cc: Wim Van Sebroeck, Rob Herring, Maxime Coquelin, Alexandre Torgue, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree On 06/22/2018 02:15 AM, Ludovic BARRE wrote: > > > On 06/21/2018 06:53 PM, Guenter Roeck wrote: >> On Thu, Jun 21, 2018 at 11:02:15AM +0200, Ludovic Barre wrote: >>> From: Ludovic Barre <ludovic.barre@st.com> >>> >>> This patch adds compatible data to manage pclk clock by >>> compatible. Adds stm32mp1 support which requires pclk clock. >>> >>> Signed-off-by: Ludovic Barre <ludovic.barre@st.com> >>> --- >>> drivers/watchdog/stm32_iwdg.c | 116 +++++++++++++++++++++++++++--------------- >>> 1 file changed, 74 insertions(+), 42 deletions(-) >>> >>> diff --git a/drivers/watchdog/stm32_iwdg.c b/drivers/watchdog/stm32_iwdg.c >>> index c97ad56..e00e3b3 100644 >>> --- a/drivers/watchdog/stm32_iwdg.c >>> +++ b/drivers/watchdog/stm32_iwdg.c >>> @@ -11,12 +11,13 @@ >>> #include <linux/clk.h> >>> #include <linux/delay.h> >>> -#include <linux/kernel.h> >>> -#include <linux/module.h> >>> #include <linux/interrupt.h> >>> #include <linux/io.h> >>> #include <linux/iopoll.h> >>> +#include <linux/kernel.h> >>> +#include <linux/module.h> >>> #include <linux/of.h> >>> +#include <linux/of_device.h> >>> #include <linux/platform_device.h> >>> #include <linux/watchdog.h> >>> @@ -54,11 +55,15 @@ >>> #define TIMEOUT_US 100000 >>> #define SLEEP_US 1000 >>> +#define HAS_PCLK true >>> + >>> struct stm32_iwdg { >>> struct watchdog_device wdd; >>> void __iomem *regs; >>> - struct clk *clk; >>> + struct clk *clk_lsi; >>> + struct clk *clk_pclk; >>> unsigned int rate; >>> + bool has_pclk; >>> }; >>> static inline u32 reg_read(void __iomem *base, u32 reg) >>> @@ -133,6 +138,44 @@ static int stm32_iwdg_set_timeout(struct watchdog_device *wdd, >>> return 0; >>> } >>> +static int stm32_iwdg_clk_init(struct platform_device *pdev, >>> + struct stm32_iwdg *wdt) >>> +{ >>> + u32 ret; >>> + >>> + wdt->clk_lsi = devm_clk_get(&pdev->dev, "lsi"); >> >> I just noticed a subtle difference: This used to be >> devm_clk_get(&pdev->dev, NULL); >> which would always get the first clock, no matter how it is named. >> Can that cause problems with backward compatibility ? > > You are right Guenter. > > When there are multiple clocks, I prefer to use name interface. > I find it easier to use, and avoid misunderstanding. > > Today, only one "dtsi" define the watchdog and it's disabled > (stm32f429.dtsi). I think it's good moment to move to clock named > (before it is used anymore). > > But you are right I forgot to change stm32f429.dtsi. > If I add a commit for stm32f429.dtsi, it's Ok for you ? > Not really. You are imposing a personal preference on others, and you would make stm32f429.dtsi inconsistent since it doesn't use clock names for anything else. This in turn means that people will have an endless source of irritation since they will need a clock name for this node but not for others. You will have to get the arm and DT maintainers to agree on this change. Thanks, Guenter > BR > Ludo > >> >> Thanks, >> Guenter >> >>> + if (IS_ERR(wdt->clk_lsi)) { >>> + dev_err(&pdev->dev, "Unable to get lsi clock\n"); >>> + return PTR_ERR(wdt->clk_lsi); >>> + } >>> + >>> + /* optional peripheral clock */ >>> + if (wdt->has_pclk) { >>> + wdt->clk_pclk = devm_clk_get(&pdev->dev, "pclk"); >>> + if (IS_ERR(wdt->clk_pclk)) { >>> + dev_err(&pdev->dev, "Unable to get pclk clock\n"); >>> + return PTR_ERR(wdt->clk_pclk); >>> + } >>> + >>> + ret = clk_prepare_enable(wdt->clk_pclk); >>> + if (ret) { >>> + dev_err(&pdev->dev, "Unable to prepare pclk clock\n"); >>> + return ret; >>> + } >>> + } >>> + >>> + ret = clk_prepare_enable(wdt->clk_lsi); >>> + if (ret) { >>> + dev_err(&pdev->dev, "Unable to prepare lsi clock\n"); >>> + clk_disable_unprepare(wdt->clk_pclk); >>> + return ret; >>> + } >>> + >>> + wdt->rate = clk_get_rate(wdt->clk_lsi); >>> + >>> + return 0; >>> +} >>> + >>> static const struct watchdog_info stm32_iwdg_info = { >>> .options = WDIOF_SETTIMEOUT | >>> WDIOF_MAGICCLOSE | >>> @@ -147,49 +190,42 @@ static const struct watchdog_ops stm32_iwdg_ops = { >>> .set_timeout = stm32_iwdg_set_timeout, >>> }; >>> +static const struct of_device_id stm32_iwdg_of_match[] = { >>> + { .compatible = "st,stm32-iwdg", .data = (void *)!HAS_PCLK }, >>> + { .compatible = "st,stm32mp1-iwdg", .data = (void *)HAS_PCLK }, >>> + { /* end node */ } >>> +}; >>> +MODULE_DEVICE_TABLE(of, stm32_iwdg_of_match); >>> + >>> static int stm32_iwdg_probe(struct platform_device *pdev) >>> { >>> struct watchdog_device *wdd; >>> + const struct of_device_id *match; >>> struct stm32_iwdg *wdt; >>> struct resource *res; >>> - void __iomem *regs; >>> - struct clk *clk; >>> int ret; >>> + match = of_match_device(stm32_iwdg_of_match, &pdev->dev); >>> + if (!match) >>> + return -ENODEV; >>> + >>> + wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); >>> + if (!wdt) >>> + return -ENOMEM; >>> + >>> + wdt->has_pclk = match->data; >>> + >>> /* This is the timer base. */ >>> res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>> - regs = devm_ioremap_resource(&pdev->dev, res); >>> - if (IS_ERR(regs)) { >>> + wdt->regs = devm_ioremap_resource(&pdev->dev, res); >>> + if (IS_ERR(wdt->regs)) { >>> dev_err(&pdev->dev, "Could not get resource\n"); >>> - return PTR_ERR(regs); >>> + return PTR_ERR(wdt->regs); >>> } >>> - clk = devm_clk_get(&pdev->dev, NULL); >>> - if (IS_ERR(clk)) { >>> - dev_err(&pdev->dev, "Unable to get clock\n"); >>> - return PTR_ERR(clk); >>> - } >>> - >>> - ret = clk_prepare_enable(clk); >>> - if (ret) { >>> - dev_err(&pdev->dev, "Unable to prepare clock %p\n", clk); >>> + ret = stm32_iwdg_clk_init(pdev, wdt); >>> + if (ret) >>> return ret; >>> - } >>> - >>> - /* >>> - * Allocate our watchdog driver data, which has the >>> - * struct watchdog_device nested within it. >>> - */ >>> - wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); >>> - if (!wdt) { >>> - ret = -ENOMEM; >>> - goto err; >>> - } >>> - >>> - /* Initialize struct stm32_iwdg. */ >>> - wdt->regs = regs; >>> - wdt->clk = clk; >>> - wdt->rate = clk_get_rate(clk); >>> /* Initialize struct watchdog_device. */ >>> wdd = &wdt->wdd; >>> @@ -217,7 +253,8 @@ static int stm32_iwdg_probe(struct platform_device *pdev) >>> return 0; >>> err: >>> - clk_disable_unprepare(clk); >>> + clk_disable_unprepare(wdt->clk_lsi); >>> + clk_disable_unprepare(wdt->clk_pclk); >>> return ret; >>> } >>> @@ -227,23 +264,18 @@ static int stm32_iwdg_remove(struct platform_device *pdev) >>> struct stm32_iwdg *wdt = platform_get_drvdata(pdev); >>> watchdog_unregister_device(&wdt->wdd); >>> - clk_disable_unprepare(wdt->clk); >>> + clk_disable_unprepare(wdt->clk_lsi); >>> + clk_disable_unprepare(wdt->clk_pclk); >>> return 0; >>> } >>> -static const struct of_device_id stm32_iwdg_of_match[] = { >>> - { .compatible = "st,stm32-iwdg" }, >>> - { /* end node */ } >>> -}; >>> -MODULE_DEVICE_TABLE(of, stm32_iwdg_of_match); >>> - >>> static struct platform_driver stm32_iwdg_driver = { >>> .probe = stm32_iwdg_probe, >>> .remove = stm32_iwdg_remove, >>> .driver = { >>> .name = "iwdg", >>> - .of_match_table = stm32_iwdg_of_match, >>> + .of_match_table = of_match_ptr(stm32_iwdg_of_match), >>> }, >>> }; >>> module_platform_driver(stm32_iwdg_driver); >>> -- >>> 2.7.4 >>> >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in >>> the body of a message to majordomo@vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 2018-06-22 13:40 ` Guenter Roeck @ 2018-06-25 12:52 ` Alexandre Torgue 2018-06-25 13:15 ` Guenter Roeck 0 siblings, 1 reply; 12+ messages in thread From: Alexandre Torgue @ 2018-06-25 12:52 UTC (permalink / raw) To: Guenter Roeck, Ludovic BARRE Cc: Wim Van Sebroeck, Rob Herring, Maxime Coquelin, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree Hi Guenter, >> But you are right I forgot to change stm32f429.dtsi. >> If I add a commit for stm32f429.dtsi, it's Ok for you ? >> > > Not really. You are imposing a personal preference on others, > and you would make stm32f429.dtsi inconsistent since it doesn't > use clock names for anything else.This in turn means that people > will have an endless source of irritation since they will need > a clock name for this node but not for others. Why? This kind of implementation depends on each driver. Isn't ? Or do you mean that if iwdg driver uses this implementation (clock name usage) all nodes inside stm32f429.dtsi should follow the same implementation ? > > You will have to get the arm and DT maintainers to agree on this change. As this patch makes easier integration of new platform, I agree with Ludovic proposition. regards Alex > > Thanks, > Guenter ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 2018-06-25 12:52 ` Alexandre Torgue @ 2018-06-25 13:15 ` Guenter Roeck 2018-06-25 15:04 ` Alexandre Torgue 0 siblings, 1 reply; 12+ messages in thread From: Guenter Roeck @ 2018-06-25 13:15 UTC (permalink / raw) To: Alexandre Torgue, Ludovic BARRE Cc: Wim Van Sebroeck, Rob Herring, Maxime Coquelin, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree On 06/25/2018 05:52 AM, Alexandre Torgue wrote: > Hi Guenter, > > >>> But you are right I forgot to change stm32f429.dtsi. >>> If I add a commit for stm32f429.dtsi, it's Ok for you ? >>> >> >> Not really. You are imposing a personal preference on others, >> and you would make stm32f429.dtsi inconsistent since it doesn't >> use clock names for anything else.This in turn means that people >> will have an endless source of irritation since they will need >> a clock name for this node but not for others. > > Why? This kind of implementation depends on each driver. Isn't ? > > Or do you mean that if iwdg driver uses this implementation (clock name usage) all nodes inside stm32f429.dtsi should follow the same implementation ? > >> >> You will have to get the arm and DT maintainers to agree on this change. > > As this patch makes easier integration of new platform, I agree with Ludovic proposition. > Please provide a formal Acked-by:. Guenter ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 2018-06-25 13:15 ` Guenter Roeck @ 2018-06-25 15:04 ` Alexandre Torgue 0 siblings, 0 replies; 12+ messages in thread From: Alexandre Torgue @ 2018-06-25 15:04 UTC (permalink / raw) To: Guenter Roeck, Ludovic BARRE Cc: Wim Van Sebroeck, Rob Herring, Maxime Coquelin, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree On 06/25/2018 03:15 PM, Guenter Roeck wrote: > On 06/25/2018 05:52 AM, Alexandre Torgue wrote: >> Hi Guenter, >> >> >>>> But you are right I forgot to change stm32f429.dtsi. >>>> If I add a commit for stm32f429.dtsi, it's Ok for you ? >>>> >>> >>> Not really. You are imposing a personal preference on others, >>> and you would make stm32f429.dtsi inconsistent since it doesn't >>> use clock names for anything else.This in turn means that people >>> will have an endless source of irritation since they will need >>> a clock name for this node but not for others. >> >> Why? This kind of implementation depends on each driver. Isn't ? >> >> Or do you mean that if iwdg driver uses this implementation (clock >> name usage) all nodes inside stm32f429.dtsi should follow the same >> implementation ? >> >>> >>> You will have to get the arm and DT maintainers to agree on this change. >> >> As this patch makes easier integration of new platform, I agree with >> Ludovic proposition. >> > > Please provide a formal Acked-by:. Sure Acked-by: Alexandre TORGUE <alexandre.torgue@st.com> Ludovic, can you please resend a version by adding updates for stm32f429.dtsi. Thanks Alex > > Guenter ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH V4 3/4] ARM: dts: stm32: add iwdg2 support for stm32mp157c 2018-06-21 9:02 [PATCH V4 0/4] add iwdg2 support for stm32mp157c Ludovic Barre 2018-06-21 9:02 ` [PATCH V4 1/4] dt-bindings: watchdog: add stm32mp1 support Ludovic Barre 2018-06-21 9:02 ` [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 Ludovic Barre @ 2018-06-21 9:02 ` Ludovic Barre 2018-06-21 9:02 ` [PATCH V4 4/4] ARM: dts: stm32: add iwdg2 support for stm32mp157c-ed1 Ludovic Barre 3 siblings, 0 replies; 12+ messages in thread From: Ludovic Barre @ 2018-06-21 9:02 UTC (permalink / raw) To: Wim Van Sebroeck, Guenter Roeck, Rob Herring Cc: Maxime Coquelin, Alexandre Torgue, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree, Ludovic Barre From: Ludovic Barre <ludovic.barre@st.com> This patch adds independent watchdog support for stm32mp157c. Signed-off-by: Ludovic Barre <ludovic.barre@st.com> --- arch/arm/boot/dts/stm32mp157c.dtsi | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/arm/boot/dts/stm32mp157c.dtsi b/arch/arm/boot/dts/stm32mp157c.dtsi index 7d17538..95cc166 100644 --- a/arch/arm/boot/dts/stm32mp157c.dtsi +++ b/arch/arm/boot/dts/stm32mp157c.dtsi @@ -784,6 +784,14 @@ status = "disabled"; }; + iwdg2: watchdog@5a002000 { + compatible = "st,stm32mp1-iwdg"; + reg = <0x5a002000 0x400>; + clocks = <&rcc IWDG2>, <&rcc CK_LSI>; + clock-names = "pclk", "lsi"; + status = "disabled"; + }; + usbphyc: usbphyc@5a006000 { #address-cells = <1>; #size-cells = <0>; -- 2.7.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH V4 4/4] ARM: dts: stm32: add iwdg2 support for stm32mp157c-ed1 2018-06-21 9:02 [PATCH V4 0/4] add iwdg2 support for stm32mp157c Ludovic Barre ` (2 preceding siblings ...) 2018-06-21 9:02 ` [PATCH V4 3/4] ARM: dts: stm32: add iwdg2 support for stm32mp157c Ludovic Barre @ 2018-06-21 9:02 ` Ludovic Barre 3 siblings, 0 replies; 12+ messages in thread From: Ludovic Barre @ 2018-06-21 9:02 UTC (permalink / raw) To: Wim Van Sebroeck, Guenter Roeck, Rob Herring Cc: Maxime Coquelin, Alexandre Torgue, linux-watchdog, linux-arm-kernel, linux-kernel, devicetree, Ludovic Barre From: Ludovic Barre <ludovic.barre@st.com> This patch activates independent watchdog support for stm32mp157c board. Signed-off-by: Ludovic Barre <ludovic.barre@st.com> --- arch/arm/boot/dts/stm32mp157c-ed1.dts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm/boot/dts/stm32mp157c-ed1.dts b/arch/arm/boot/dts/stm32mp157c-ed1.dts index ae33653..8af263a 100644 --- a/arch/arm/boot/dts/stm32mp157c-ed1.dts +++ b/arch/arm/boot/dts/stm32mp157c-ed1.dts @@ -68,6 +68,11 @@ status = "okay"; }; +&iwdg2 { + timeout-sec = <32>; + status = "okay"; +}; + &uart4 { pinctrl-names = "default"; pinctrl-0 = <&uart4_pins_a>; -- 2.7.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2018-06-25 15:53 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-06-21 9:02 [PATCH V4 0/4] add iwdg2 support for stm32mp157c Ludovic Barre 2018-06-21 9:02 ` [PATCH V4 1/4] dt-bindings: watchdog: add stm32mp1 support Ludovic Barre 2018-06-25 15:51 ` Rob Herring 2018-06-21 9:02 ` [PATCH V4 2/4] watchdog: stm32: add pclk feature for stm32mp1 Ludovic Barre 2018-06-21 16:53 ` Guenter Roeck 2018-06-22 9:15 ` Ludovic BARRE 2018-06-22 13:40 ` Guenter Roeck 2018-06-25 12:52 ` Alexandre Torgue 2018-06-25 13:15 ` Guenter Roeck 2018-06-25 15:04 ` Alexandre Torgue 2018-06-21 9:02 ` [PATCH V4 3/4] ARM: dts: stm32: add iwdg2 support for stm32mp157c Ludovic Barre 2018-06-21 9:02 ` [PATCH V4 4/4] ARM: dts: stm32: add iwdg2 support for stm32mp157c-ed1 Ludovic Barre
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).