From: Lad Prabhakar <[email protected]>
On RZ/Five SoC it was observed that setting timeout (to say 1 sec)
wouldn't reset the system. To fix this we make sure we issue a reset
before putting the PM clocks to make sure the registers have been cleared.
While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout() as
we were calling the same functions here.
Signed-off-by: Lad Prabhakar <[email protected]>
---
Note,
- This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
- My initial investigation showed adding the delay after pm_runtime_get_sync()
also fixed this issue.
- Do I need add the fixes tag ? what should be the operation PUT->RESET/RESET->PUT?
in case we need the tag is:
Fixes: 4055ee81009e6 ("watchdog: rzg2l_wdt: Add set_timeout callback")
---
drivers/watchdog/rzg2l_wdt.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/watchdog/rzg2l_wdt.c b/drivers/watchdog/rzg2l_wdt.c
index 00438ceed17a..d1271cc7750f 100644
--- a/drivers/watchdog/rzg2l_wdt.c
+++ b/drivers/watchdog/rzg2l_wdt.c
@@ -115,16 +115,14 @@ static int rzg2l_wdt_stop(struct watchdog_device *wdev)
{
struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
- pm_runtime_put(wdev->parent);
reset_control_reset(priv->rstc);
+ pm_runtime_put(wdev->parent);
return 0;
}
static int rzg2l_wdt_set_timeout(struct watchdog_device *wdev, unsigned int timeout)
{
- struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
-
wdev->timeout = timeout;
/*
@@ -132,8 +130,7 @@ static int rzg2l_wdt_set_timeout(struct watchdog_device *wdev, unsigned int time
* register so that it is updated with new timeout values.
*/
if (watchdog_active(wdev)) {
- pm_runtime_put(wdev->parent);
- reset_control_reset(priv->rstc);
+ rzg2l_wdt_stop(wdev);
rzg2l_wdt_start(wdev);
}
--
2.25.1
> -----Original Message-----
> From: Prabhakar <[email protected]>
> Sent: 14 November 2022 18:09
> To: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> <[email protected]>; Guenter Roeck <[email protected]>; Philipp Zabel
> <[email protected]>; [email protected]
> Cc: [email protected]; [email protected];
> Prabhakar <[email protected]>; Biju Das
> <[email protected]>; Fabrizio Castro
> <[email protected]>; Prabhakar Mahadev Lad <prabhakar.mahadev-
> [email protected]>
> Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put the PM
> clocks
>
> From: Lad Prabhakar <[email protected]>
>
> On RZ/Five SoC it was observed that setting timeout (to say 1 sec) wouldn't
> reset the system. To fix this we make sure we issue a reset before putting
> the PM clocks to make sure the registers have been cleared.
>
> While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout() as we were
> calling the same functions here.
>
> Signed-off-by: Lad Prabhakar <[email protected]>
> ---
> Note,
> - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> - My initial investigation showed adding the delay after
> pm_runtime_get_sync()
> also fixed this issue.
> - Do I need add the fixes tag ? what should be the operation PUT-
> >RESET/RESET->PUT?
It looks like timing issue, None of the previous devices are affected by this.
> in case we need the tag is:
> Fixes: 4055ee81009e6 ("watchdog: rzg2l_wdt: Add set_timeout callback")
> ---
> drivers/watchdog/rzg2l_wdt.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/watchdog/rzg2l_wdt.c b/drivers/watchdog/rzg2l_wdt.c
> index 00438ceed17a..d1271cc7750f 100644
> --- a/drivers/watchdog/rzg2l_wdt.c
> +++ b/drivers/watchdog/rzg2l_wdt.c
> @@ -115,16 +115,14 @@ static int rzg2l_wdt_stop(struct watchdog_device *wdev)
> {
> struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
>
> - pm_runtime_put(wdev->parent);
> reset_control_reset(priv->rstc);
> + pm_runtime_put(wdev->parent);
>
> return 0;
> }
>
> static int rzg2l_wdt_set_timeout(struct watchdog_device *wdev, unsigned int
> timeout) {
> - struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
> -
> wdev->timeout = timeout;
>
> /*
> @@ -132,8 +130,7 @@ static int rzg2l_wdt_set_timeout(struct watchdog_device
> *wdev, unsigned int time
> * register so that it is updated with new timeout values.
> */
Maybe update the comment above with new code change.
Cheers,
Biju
> if (watchdog_active(wdev)) {
> - pm_runtime_put(wdev->parent);
> - reset_control_reset(priv->rstc);
> + rzg2l_wdt_stop(wdev);
> rzg2l_wdt_start(wdev);
> }
>
> --
> 2.25.1
Hi Biju,
On Mon, Nov 14, 2022 at 7:42 PM Biju Das <[email protected]> wrote:
> > -----Original Message-----
> > From: Prabhakar <[email protected]>
> > Sent: 14 November 2022 18:09
> > To: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > <[email protected]>; Guenter Roeck <[email protected]>; Philipp Zabel
> > <[email protected]>; [email protected]
> > Cc: [email protected]; [email protected];
> > Prabhakar <[email protected]>; Biju Das
> > <[email protected]>; Fabrizio Castro
> > <[email protected]>; Prabhakar Mahadev Lad <prabhakar.mahadev-
> > [email protected]>
> > Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put the PM
> > clocks
> >
> > From: Lad Prabhakar <[email protected]>
> >
> > On RZ/Five SoC it was observed that setting timeout (to say 1 sec) wouldn't
> > reset the system. To fix this we make sure we issue a reset before putting
> > the PM clocks to make sure the registers have been cleared.
> >
> > While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout() as we were
> > calling the same functions here.
> >
> > Signed-off-by: Lad Prabhakar <[email protected]>
> > ---
> > Note,
> > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > - My initial investigation showed adding the delay after
> > pm_runtime_get_sync()
> > also fixed this issue.
> > - Do I need add the fixes tag ? what should be the operation PUT-
> > >RESET/RESET->PUT?
>
> It looks like timing issue, None of the previous devices are affected by this.
To me it looks like the device must be clocked for the reset signal
to be propagated?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
> -----Original Message-----
> From: Geert Uytterhoeven <[email protected]>
> Sent: 14 November 2022 19:04
> To: Biju Das <[email protected]>
> Cc: Prabhakar <[email protected]>; Geert Uytterhoeven
> <[email protected]>; Wim Van Sebroeck <[email protected]>; Guenter
> Roeck <[email protected]>; Philipp Zabel <[email protected]>; linux-
> [email protected]; [email protected]; linux-renesas-
> [email protected]; Fabrizio Castro <[email protected]>;
> Prabhakar Mahadev Lad <[email protected]>
> Subject: Re: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put the PM
> clocks
>
> Hi Biju,
>
> On Mon, Nov 14, 2022 at 7:42 PM Biju Das <[email protected]> wrote:
> > > -----Original Message-----
> > > From: Prabhakar <[email protected]>
> > > Sent: 14 November 2022 18:09
> > > To: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > > <[email protected]>; Guenter Roeck <[email protected]>;
> > > Philipp Zabel <[email protected]>;
> > > [email protected]
> > > Cc: [email protected]; [email protected];
> > > Prabhakar <[email protected]>; Biju Das
> > > <[email protected]>; Fabrizio Castro
> > > <[email protected]>; Prabhakar Mahadev Lad
> > > <prabhakar.mahadev- [email protected]>
> > > Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put
> > > the PM clocks
> > >
> > > From: Lad Prabhakar <[email protected]>
> > >
> > > On RZ/Five SoC it was observed that setting timeout (to say 1 sec)
> > > wouldn't reset the system. To fix this we make sure we issue a reset
> > > before putting the PM clocks to make sure the registers have been
> cleared.
> > >
> > > While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout() as
> > > we were calling the same functions here.
> > >
> > > Signed-off-by: Lad Prabhakar
> > > <[email protected]>
> > > ---
> > > Note,
> > > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > > - My initial investigation showed adding the delay after
> > > pm_runtime_get_sync()
> > > also fixed this issue.
> > > - Do I need add the fixes tag ? what should be the operation PUT-
> > > >RESET/RESET->PUT?
> >
> > It looks like timing issue, None of the previous devices are affected by
> this.
>
> To me it looks like the device must be clocked for the reset signal to be
> propagated?
Yep, provide clk supply for a device, then apply reset.
Cheers,
Biju
On Mon, Nov 14, 2022 at 7:53 PM Biju Das <[email protected]> wrote:
>
>
>
> > -----Original Message-----
> > From: Lad, Prabhakar <[email protected]>
> > Sent: 14 November 2022 19:46
> > To: Biju Das <[email protected]>
> > Cc: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > <[email protected]>; Guenter Roeck <[email protected]>; Philipp
> > Zabel <[email protected]>; [email protected]; linux-
> > [email protected]; [email protected]; Fabrizio
> > Castro <[email protected]>; Prabhakar Mahadev Lad
> > <[email protected]>
> > Subject: Re: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put
> > the PM clocks
> >
> > HI Biju,
> >
> > Thank you for the review.
> >
> > On Mon, Nov 14, 2022 at 6:42 PM Biju Das <[email protected]>
> > wrote:
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Prabhakar <[email protected]>
> > > > Sent: 14 November 2022 18:09
> > > > To: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > > > <[email protected]>; Guenter Roeck <[email protected]>;
> > > > Philipp Zabel <[email protected]>;
> > > > [email protected]
> > > > Cc: [email protected]; linux-renesas-
> > [email protected];
> > > > Prabhakar <[email protected]>; Biju Das
> > > > <[email protected]>; Fabrizio Castro
> > > > <[email protected]>; Prabhakar Mahadev Lad
> > > > <prabhakar.mahadev- [email protected]>
> > > > Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put
> > > > the PM clocks
> > > >
> > > > From: Lad Prabhakar <[email protected]>
> > > >
> > > > On RZ/Five SoC it was observed that setting timeout (to say 1 sec)
> > > > wouldn't reset the system. To fix this we make sure we issue a
> > reset
> > > > before putting the PM clocks to make sure the registers have been
> > cleared.
> > > >
> > > > While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout() as
> > > > we were calling the same functions here.
> > > >
> > > > Signed-off-by: Lad Prabhakar
> > > > <[email protected]>
> > > > ---
> > > > Note,
> > > > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > > > - My initial investigation showed adding the delay after
> > > > pm_runtime_get_sync()
> > > > also fixed this issue.
> > > > - Do I need add the fixes tag ? what should be the operation PUT-
> > > > >RESET/RESET->PUT?
> > >
> > > It looks like timing issue, None of the previous devices are
> > affected by this.
> > >
> > yep.
> >
> > > > in case we need the tag is:
> > > > Fixes: 4055ee81009e6 ("watchdog: rzg2l_wdt: Add set_timeout
> > > > callback")
> > > > ---
> > > > drivers/watchdog/rzg2l_wdt.c | 7 ++-----
> > > > 1 file changed, 2 insertions(+), 5 deletions(-)
> > > >
> > > > diff --git a/drivers/watchdog/rzg2l_wdt.c
> > > > b/drivers/watchdog/rzg2l_wdt.c index 00438ceed17a..d1271cc7750f
> > > > 100644
> > > > --- a/drivers/watchdog/rzg2l_wdt.c
> > > > +++ b/drivers/watchdog/rzg2l_wdt.c
> > > > @@ -115,16 +115,14 @@ static int rzg2l_wdt_stop(struct
> > > > watchdog_device *wdev) {
> > > > struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
> > > >
> > > > - pm_runtime_put(wdev->parent);
> > > > reset_control_reset(priv->rstc);
> > > > + pm_runtime_put(wdev->parent);
> > > >
> > > > return 0;
> > > > }
> > > >
> > > > static int rzg2l_wdt_set_timeout(struct watchdog_device *wdev,
> > > > unsigned int
> > > > timeout) {
> > > > - struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
> > > > -
> > > > wdev->timeout = timeout;
> > > >
> > > > /*
> > > > @@ -132,8 +130,7 @@ static int rzg2l_wdt_set_timeout(struct
> > > > watchdog_device *wdev, unsigned int time
> > > > * register so that it is updated with new timeout values.
> > > > */
> > >
> > >
> > > Maybe update the comment above with new code change.
> > >
> > /*
> > * If the watchdog is active, reset the module for updating the
> > WDTSET
> > * register so that it is updated with new timeout values.
> > */
> >
> > The above existing comment holds good with this code change. If you
> > prefer something else please let me know I'll update it accordingly.
>
> Maybe mention, The resetting of the module is done in wdt_stop function.
>
/*
* If the watchdog is active, reset the module for updating the WDTSET
* register by calling rzg2l_wdt_stop() (which internally calls
reset_control_reset() and pm_runtime_put()
* so that it is updated with new timeout values.
*/
Does the above look good?
Cheers,
Prabhakar
> -----Original Message-----
> From: Lad, Prabhakar <[email protected]>
> Sent: 14 November 2022 19:46
> To: Biju Das <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> <[email protected]>; Guenter Roeck <[email protected]>; Philipp
> Zabel <[email protected]>; [email protected]; linux-
> [email protected]; [email protected]; Fabrizio
> Castro <[email protected]>; Prabhakar Mahadev Lad
> <[email protected]>
> Subject: Re: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put
> the PM clocks
>
> HI Biju,
>
> Thank you for the review.
>
> On Mon, Nov 14, 2022 at 6:42 PM Biju Das <[email protected]>
> wrote:
> >
> >
> >
> > > -----Original Message-----
> > > From: Prabhakar <[email protected]>
> > > Sent: 14 November 2022 18:09
> > > To: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > > <[email protected]>; Guenter Roeck <[email protected]>;
> > > Philipp Zabel <[email protected]>;
> > > [email protected]
> > > Cc: [email protected]; linux-renesas-
> [email protected];
> > > Prabhakar <[email protected]>; Biju Das
> > > <[email protected]>; Fabrizio Castro
> > > <[email protected]>; Prabhakar Mahadev Lad
> > > <prabhakar.mahadev- [email protected]>
> > > Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put
> > > the PM clocks
> > >
> > > From: Lad Prabhakar <[email protected]>
> > >
> > > On RZ/Five SoC it was observed that setting timeout (to say 1 sec)
> > > wouldn't reset the system. To fix this we make sure we issue a
> reset
> > > before putting the PM clocks to make sure the registers have been
> cleared.
> > >
> > > While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout() as
> > > we were calling the same functions here.
> > >
> > > Signed-off-by: Lad Prabhakar
> > > <[email protected]>
> > > ---
> > > Note,
> > > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > > - My initial investigation showed adding the delay after
> > > pm_runtime_get_sync()
> > > also fixed this issue.
> > > - Do I need add the fixes tag ? what should be the operation PUT-
> > > >RESET/RESET->PUT?
> >
> > It looks like timing issue, None of the previous devices are
> affected by this.
> >
> yep.
>
> > > in case we need the tag is:
> > > Fixes: 4055ee81009e6 ("watchdog: rzg2l_wdt: Add set_timeout
> > > callback")
> > > ---
> > > drivers/watchdog/rzg2l_wdt.c | 7 ++-----
> > > 1 file changed, 2 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/drivers/watchdog/rzg2l_wdt.c
> > > b/drivers/watchdog/rzg2l_wdt.c index 00438ceed17a..d1271cc7750f
> > > 100644
> > > --- a/drivers/watchdog/rzg2l_wdt.c
> > > +++ b/drivers/watchdog/rzg2l_wdt.c
> > > @@ -115,16 +115,14 @@ static int rzg2l_wdt_stop(struct
> > > watchdog_device *wdev) {
> > > struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
> > >
> > > - pm_runtime_put(wdev->parent);
> > > reset_control_reset(priv->rstc);
> > > + pm_runtime_put(wdev->parent);
> > >
> > > return 0;
> > > }
> > >
> > > static int rzg2l_wdt_set_timeout(struct watchdog_device *wdev,
> > > unsigned int
> > > timeout) {
> > > - struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
> > > -
> > > wdev->timeout = timeout;
> > >
> > > /*
> > > @@ -132,8 +130,7 @@ static int rzg2l_wdt_set_timeout(struct
> > > watchdog_device *wdev, unsigned int time
> > > * register so that it is updated with new timeout values.
> > > */
> >
> >
> > Maybe update the comment above with new code change.
> >
> /*
> * If the watchdog is active, reset the module for updating the
> WDTSET
> * register so that it is updated with new timeout values.
> */
>
> The above existing comment holds good with this code change. If you
> prefer something else please let me know I'll update it accordingly.
Maybe mention, The resetting of the module is done in wdt_stop function.
Cheers,
Biju
HI Biju,
Thank you for the review.
On Mon, Nov 14, 2022 at 6:42 PM Biju Das <[email protected]> wrote:
>
>
>
> > -----Original Message-----
> > From: Prabhakar <[email protected]>
> > Sent: 14 November 2022 18:09
> > To: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > <[email protected]>; Guenter Roeck <[email protected]>; Philipp Zabel
> > <[email protected]>; [email protected]
> > Cc: [email protected]; [email protected];
> > Prabhakar <[email protected]>; Biju Das
> > <[email protected]>; Fabrizio Castro
> > <[email protected]>; Prabhakar Mahadev Lad <prabhakar.mahadev-
> > [email protected]>
> > Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put the PM
> > clocks
> >
> > From: Lad Prabhakar <[email protected]>
> >
> > On RZ/Five SoC it was observed that setting timeout (to say 1 sec) wouldn't
> > reset the system. To fix this we make sure we issue a reset before putting
> > the PM clocks to make sure the registers have been cleared.
> >
> > While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout() as we were
> > calling the same functions here.
> >
> > Signed-off-by: Lad Prabhakar <[email protected]>
> > ---
> > Note,
> > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > - My initial investigation showed adding the delay after
> > pm_runtime_get_sync()
> > also fixed this issue.
> > - Do I need add the fixes tag ? what should be the operation PUT-
> > >RESET/RESET->PUT?
>
> It looks like timing issue, None of the previous devices are affected by this.
>
yep.
> > in case we need the tag is:
> > Fixes: 4055ee81009e6 ("watchdog: rzg2l_wdt: Add set_timeout callback")
> > ---
> > drivers/watchdog/rzg2l_wdt.c | 7 ++-----
> > 1 file changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/watchdog/rzg2l_wdt.c b/drivers/watchdog/rzg2l_wdt.c
> > index 00438ceed17a..d1271cc7750f 100644
> > --- a/drivers/watchdog/rzg2l_wdt.c
> > +++ b/drivers/watchdog/rzg2l_wdt.c
> > @@ -115,16 +115,14 @@ static int rzg2l_wdt_stop(struct watchdog_device *wdev)
> > {
> > struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
> >
> > - pm_runtime_put(wdev->parent);
> > reset_control_reset(priv->rstc);
> > + pm_runtime_put(wdev->parent);
> >
> > return 0;
> > }
> >
> > static int rzg2l_wdt_set_timeout(struct watchdog_device *wdev, unsigned int
> > timeout) {
> > - struct rzg2l_wdt_priv *priv = watchdog_get_drvdata(wdev);
> > -
> > wdev->timeout = timeout;
> >
> > /*
> > @@ -132,8 +130,7 @@ static int rzg2l_wdt_set_timeout(struct watchdog_device
> > *wdev, unsigned int time
> > * register so that it is updated with new timeout values.
> > */
>
>
> Maybe update the comment above with new code change.
>
/*
* If the watchdog is active, reset the module for updating the WDTSET
* register so that it is updated with new timeout values.
*/
The above existing comment holds good with this code change. If you
prefer something else please let me know I'll update it accordingly.
Cheers,
Prabhakar
On Mon, Nov 14, 2022 at 7:59 PM Biju Das <[email protected]> wrote:
>
>
>
> > -----Original Message-----
> > From: Lad, Prabhakar <[email protected]>
> > Sent: 14 November 2022 19:56
> > To: Biju Das <[email protected]>
> > Cc: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > <[email protected]>; Guenter Roeck <[email protected]>; Philipp
> > Zabel <[email protected]>; [email protected]; linux-
> > [email protected]; [email protected]; Fabrizio
> > Castro <[email protected]>; Prabhakar Mahadev Lad
> > <[email protected]>
> > Subject: Re: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put
> > the PM clocks
> >
> > On Mon, Nov 14, 2022 at 7:53 PM Biju Das <[email protected]>
> > wrote:
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Lad, Prabhakar <[email protected]>
> > > > Sent: 14 November 2022 19:46
> > > > To: Biju Das <[email protected]>
> > > > Cc: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > > > <[email protected]>; Guenter Roeck <[email protected]>;
> > > > Philipp Zabel <[email protected]>;
> > > > [email protected]; linux- [email protected];
> > > > [email protected]; Fabrizio Castro
> > > > <[email protected]>; Prabhakar Mahadev Lad
> > > > <[email protected]>
> > > > Subject: Re: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we
> > > > put the PM clocks
> > > >
> > > > HI Biju,
> > > >
> > > > Thank you for the review.
> > > >
> > > > On Mon, Nov 14, 2022 at 6:42 PM Biju Das
> > > > <[email protected]>
> > > > wrote:
> > > > >
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Prabhakar <[email protected]>
> > > > > > Sent: 14 November 2022 18:09
> > > > > > To: Geert Uytterhoeven <[email protected]>; Wim Van
> > > > > > Sebroeck <[email protected]>; Guenter Roeck
> > > > > > <[email protected]>; Philipp Zabel <[email protected]>;
> > > > > > [email protected]
> > > > > > Cc: [email protected]; linux-renesas-
> > > > [email protected];
> > > > > > Prabhakar <[email protected]>; Biju Das
> > > > > > <[email protected]>; Fabrizio Castro
> > > > > > <[email protected]>; Prabhakar Mahadev Lad
> > > > > > <prabhakar.mahadev- [email protected]>
> > > > > > Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we
> > > > > > put the PM clocks
> > > > > >
> > > > > > From: Lad Prabhakar <[email protected]>
> > > > > >
> > > > > > On RZ/Five SoC it was observed that setting timeout (to say 1
> > > > > > sec) wouldn't reset the system. To fix this we make sure we
> > > > > > issue a
> > > > reset
> > > > > > before putting the PM clocks to make sure the registers have
> > > > > > been
> > > > cleared.
> > > > > >
> > > > > > While at it re-used rzg2l_wdt_stop() in
> > rzg2l_wdt_set_timeout()
> > > > > > as we were calling the same functions here.
> > > > > >
> > > > > > Signed-off-by: Lad Prabhakar
> > > > > > <[email protected]>
> > > > > > ---
> > > > > > Note,
> > > > > > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > > > > > - My initial investigation showed adding the delay after
> > > > > > pm_runtime_get_sync()
> > > > > > also fixed this issue.
> > > > > > - Do I need add the fixes tag ? what should be the operation
> > > > > > PUT-
> > > > > > >RESET/RESET->PUT?
> > > > >
> > > > > It looks like timing issue, None of the previous devices are
> > > > affected by this.
> > > > >
> > > > yep.
> > > >
> > > > > > in case we need the tag is:
> > > > > > Fixes: 4055ee81009e6 ("watchdog: rzg2l_wdt: Add set_timeout
> > > > > > callback")
> > > > > > ---
> > > > > > drivers/watchdog/rzg2l_wdt.c | 7 ++-----
> > > > > > 1 file changed, 2 insertions(+), 5 deletions(-)
> > > > > >
> > > > > > diff --git a/drivers/watchdog/rzg2l_wdt.c
> > > > > > b/drivers/watchdog/rzg2l_wdt.c index
> > 00438ceed17a..d1271cc7750f
> > > > > > 100644
> > > > > > --- a/drivers/watchdog/rzg2l_wdt.c
> > > > > > +++ b/drivers/watchdog/rzg2l_wdt.c
> > > > > > @@ -115,16 +115,14 @@ static int rzg2l_wdt_stop(struct
> > > > > > watchdog_device *wdev) {
> > > > > > struct rzg2l_wdt_priv *priv =
> > watchdog_get_drvdata(wdev);
> > > > > >
> > > > > > - pm_runtime_put(wdev->parent);
> > > > > > reset_control_reset(priv->rstc);
> > > > > > + pm_runtime_put(wdev->parent);
> > > > > >
> > > > > > return 0;
> > > > > > }
> > > > > >
> > > > > > static int rzg2l_wdt_set_timeout(struct watchdog_device
> > *wdev,
> > > > > > unsigned int
> > > > > > timeout) {
> > > > > > - struct rzg2l_wdt_priv *priv =
> > watchdog_get_drvdata(wdev);
> > > > > > -
> > > > > > wdev->timeout = timeout;
> > > > > >
> > > > > > /*
> > > > > > @@ -132,8 +130,7 @@ static int rzg2l_wdt_set_timeout(struct
> > > > > > watchdog_device *wdev, unsigned int time
> > > > > > * register so that it is updated with new timeout
> > values.
> > > > > > */
> > > > >
> > > > >
> > > > > Maybe update the comment above with new code change.
> > > > >
> > > > /*
> > > > * If the watchdog is active, reset the module for updating
> > the
> > > > WDTSET
> > > > * register so that it is updated with new timeout values.
> > > > */
> > > >
> > > > The above existing comment holds good with this code change. If
> > you
> > > > prefer something else please let me know I'll update it
> > accordingly.
> > >
> > > Maybe mention, The resetting of the module is done in wdt_stop
> > function.
> > >
> > /*
> > * If the watchdog is active, reset the module for updating the
> > WDTSET
> > * register by calling rzg2l_wdt_stop() (which internally calls
> > reset_control_reset() and pm_runtime_put()
>
> (which internally calls reset_control_reset() to reset the module)
>
Sure will update that in v2.
Cheers,
Prabhakar
> -----Original Message-----
> From: Lad, Prabhakar <[email protected]>
> Sent: 14 November 2022 19:56
> To: Biju Das <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> <[email protected]>; Guenter Roeck <[email protected]>; Philipp
> Zabel <[email protected]>; [email protected]; linux-
> [email protected]; [email protected]; Fabrizio
> Castro <[email protected]>; Prabhakar Mahadev Lad
> <[email protected]>
> Subject: Re: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put
> the PM clocks
>
> On Mon, Nov 14, 2022 at 7:53 PM Biju Das <[email protected]>
> wrote:
> >
> >
> >
> > > -----Original Message-----
> > > From: Lad, Prabhakar <[email protected]>
> > > Sent: 14 November 2022 19:46
> > > To: Biju Das <[email protected]>
> > > Cc: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > > <[email protected]>; Guenter Roeck <[email protected]>;
> > > Philipp Zabel <[email protected]>;
> > > [email protected]; linux- [email protected];
> > > [email protected]; Fabrizio Castro
> > > <[email protected]>; Prabhakar Mahadev Lad
> > > <[email protected]>
> > > Subject: Re: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we
> > > put the PM clocks
> > >
> > > HI Biju,
> > >
> > > Thank you for the review.
> > >
> > > On Mon, Nov 14, 2022 at 6:42 PM Biju Das
> > > <[email protected]>
> > > wrote:
> > > >
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Prabhakar <[email protected]>
> > > > > Sent: 14 November 2022 18:09
> > > > > To: Geert Uytterhoeven <[email protected]>; Wim Van
> > > > > Sebroeck <[email protected]>; Guenter Roeck
> > > > > <[email protected]>; Philipp Zabel <[email protected]>;
> > > > > [email protected]
> > > > > Cc: [email protected]; linux-renesas-
> > > [email protected];
> > > > > Prabhakar <[email protected]>; Biju Das
> > > > > <[email protected]>; Fabrizio Castro
> > > > > <[email protected]>; Prabhakar Mahadev Lad
> > > > > <prabhakar.mahadev- [email protected]>
> > > > > Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we
> > > > > put the PM clocks
> > > > >
> > > > > From: Lad Prabhakar <[email protected]>
> > > > >
> > > > > On RZ/Five SoC it was observed that setting timeout (to say 1
> > > > > sec) wouldn't reset the system. To fix this we make sure we
> > > > > issue a
> > > reset
> > > > > before putting the PM clocks to make sure the registers have
> > > > > been
> > > cleared.
> > > > >
> > > > > While at it re-used rzg2l_wdt_stop() in
> rzg2l_wdt_set_timeout()
> > > > > as we were calling the same functions here.
> > > > >
> > > > > Signed-off-by: Lad Prabhakar
> > > > > <[email protected]>
> > > > > ---
> > > > > Note,
> > > > > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > > > > - My initial investigation showed adding the delay after
> > > > > pm_runtime_get_sync()
> > > > > also fixed this issue.
> > > > > - Do I need add the fixes tag ? what should be the operation
> > > > > PUT-
> > > > > >RESET/RESET->PUT?
> > > >
> > > > It looks like timing issue, None of the previous devices are
> > > affected by this.
> > > >
> > > yep.
> > >
> > > > > in case we need the tag is:
> > > > > Fixes: 4055ee81009e6 ("watchdog: rzg2l_wdt: Add set_timeout
> > > > > callback")
> > > > > ---
> > > > > drivers/watchdog/rzg2l_wdt.c | 7 ++-----
> > > > > 1 file changed, 2 insertions(+), 5 deletions(-)
> > > > >
> > > > > diff --git a/drivers/watchdog/rzg2l_wdt.c
> > > > > b/drivers/watchdog/rzg2l_wdt.c index
> 00438ceed17a..d1271cc7750f
> > > > > 100644
> > > > > --- a/drivers/watchdog/rzg2l_wdt.c
> > > > > +++ b/drivers/watchdog/rzg2l_wdt.c
> > > > > @@ -115,16 +115,14 @@ static int rzg2l_wdt_stop(struct
> > > > > watchdog_device *wdev) {
> > > > > struct rzg2l_wdt_priv *priv =
> watchdog_get_drvdata(wdev);
> > > > >
> > > > > - pm_runtime_put(wdev->parent);
> > > > > reset_control_reset(priv->rstc);
> > > > > + pm_runtime_put(wdev->parent);
> > > > >
> > > > > return 0;
> > > > > }
> > > > >
> > > > > static int rzg2l_wdt_set_timeout(struct watchdog_device
> *wdev,
> > > > > unsigned int
> > > > > timeout) {
> > > > > - struct rzg2l_wdt_priv *priv =
> watchdog_get_drvdata(wdev);
> > > > > -
> > > > > wdev->timeout = timeout;
> > > > >
> > > > > /*
> > > > > @@ -132,8 +130,7 @@ static int rzg2l_wdt_set_timeout(struct
> > > > > watchdog_device *wdev, unsigned int time
> > > > > * register so that it is updated with new timeout
> values.
> > > > > */
> > > >
> > > >
> > > > Maybe update the comment above with new code change.
> > > >
> > > /*
> > > * If the watchdog is active, reset the module for updating
> the
> > > WDTSET
> > > * register so that it is updated with new timeout values.
> > > */
> > >
> > > The above existing comment holds good with this code change. If
> you
> > > prefer something else please let me know I'll update it
> accordingly.
> >
> > Maybe mention, The resetting of the module is done in wdt_stop
> function.
> >
> /*
> * If the watchdog is active, reset the module for updating the
> WDTSET
> * register by calling rzg2l_wdt_stop() (which internally calls
> reset_control_reset() and pm_runtime_put()
(which internally calls reset_control_reset() to reset the module)
> * so that it is updated with new timeout values.
> */
Hi Geert,
On Mon, Nov 14, 2022 at 7:03 PM Geert Uytterhoeven <[email protected]> wrote:
>
> Hi Biju,
>
> On Mon, Nov 14, 2022 at 7:42 PM Biju Das <[email protected]> wrote:
> > > -----Original Message-----
> > > From: Prabhakar <[email protected]>
> > > Sent: 14 November 2022 18:09
> > > To: Geert Uytterhoeven <[email protected]>; Wim Van Sebroeck
> > > <[email protected]>; Guenter Roeck <[email protected]>; Philipp Zabel
> > > <[email protected]>; [email protected]
> > > Cc: [email protected]; [email protected];
> > > Prabhakar <[email protected]>; Biju Das
> > > <[email protected]>; Fabrizio Castro
> > > <[email protected]>; Prabhakar Mahadev Lad <prabhakar.mahadev-
> > > [email protected]>
> > > Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put the PM
> > > clocks
> > >
> > > From: Lad Prabhakar <[email protected]>
> > >
> > > On RZ/Five SoC it was observed that setting timeout (to say 1 sec) wouldn't
> > > reset the system. To fix this we make sure we issue a reset before putting
> > > the PM clocks to make sure the registers have been cleared.
> > >
> > > While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout() as we were
> > > calling the same functions here.
> > >
> > > Signed-off-by: Lad Prabhakar <[email protected]>
> > > ---
> > > Note,
> > > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > > - My initial investigation showed adding the delay after
> > > pm_runtime_get_sync()
> > > also fixed this issue.
> > > - Do I need add the fixes tag ? what should be the operation PUT-
> > > >RESET/RESET->PUT?
> >
> > It looks like timing issue, None of the previous devices are affected by this.
>
> To me it looks like the device must be clocked for the reset signal
> to be propagated?
>
In the HW manual (7.4.3 Procedure for Activating Modules) it does
state the below before applying the reset signal,
Set up the clock control register for the clock signal connected to
the target module to start the supply of the clock.
Note that the PLL for the clock should be started before the clock if
the PLL is stopped.
So maybe I can add the fixes tag in v2.
Cheers,
Prabhakar
> Subject: RE: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put
> the PM clocks
>
>
>
> > -----Original Message-----
> > From: Geert Uytterhoeven <[email protected]>
> > Sent: 14 November 2022 19:04
> > To: Biju Das <[email protected]>
> > Cc: Prabhakar <[email protected]>; Geert Uytterhoeven
> > <[email protected]>; Wim Van Sebroeck <wim@linux-
> watchdog.org>;
> > Guenter Roeck <[email protected]>; Philipp Zabel
> > <[email protected]>; linux- [email protected];
> > [email protected]; linux-renesas- [email protected];
> > Fabrizio Castro <[email protected]>; Prabhakar Mahadev
> > Lad <[email protected]>
> > Subject: Re: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we
> put
> > the PM clocks
> >
> > Hi Biju,
> >
> > On Mon, Nov 14, 2022 at 7:42 PM Biju Das
> <[email protected]> wrote:
> > > > -----Original Message-----
> > > > From: Prabhakar <[email protected]>
> > > > Sent: 14 November 2022 18:09
> > > > To: Geert Uytterhoeven <[email protected]>; Wim Van
> Sebroeck
> > > > <[email protected]>; Guenter Roeck <[email protected]>;
> > > > Philipp Zabel <[email protected]>;
> > > > [email protected]
> > > > Cc: [email protected];
> > > > [email protected];
> > > > Prabhakar <[email protected]>; Biju Das
> > > > <[email protected]>; Fabrizio Castro
> > > > <[email protected]>; Prabhakar Mahadev Lad
> > > > <prabhakar.mahadev- [email protected]>
> > > > Subject: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we
> put
> > > > the PM clocks
> > > >
> > > > From: Lad Prabhakar <[email protected]>
> > > >
> > > > On RZ/Five SoC it was observed that setting timeout (to say 1
> sec)
> > > > wouldn't reset the system. To fix this we make sure we issue a
> > > > reset before putting the PM clocks to make sure the registers
> have
> > > > been
> > cleared.
> > > >
> > > > While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout()
> as
> > > > we were calling the same functions here.
> > > >
> > > > Signed-off-by: Lad Prabhakar
> > > > <[email protected]>
> > > > ---
> > > > Note,
> > > > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > > > - My initial investigation showed adding the delay after
> > > > pm_runtime_get_sync()
> > > > also fixed this issue.
> > > > - Do I need add the fixes tag ? what should be the operation
> PUT-
> > > > >RESET/RESET->PUT?
> > >
> > > It looks like timing issue, None of the previous devices are
> > > affected by
> > this.
> >
> > To me it looks like the device must be clocked for the reset signal
> to
> > be propagated?
>
> Yep, provide clk supply for a device, then apply reset.
Maybe we need to make it consistent by taking care of [1]
Current patch: CLK ON -> apply Reset for V2M.
[1]: Apply Reset -> CLK ON for V2M.
[1] https://lore.kernel.org/linux-renesas-soc/CAMuHMdUWbT6VArm9B56VE0yUYWCTm=3vMGrrONSv9cdsQQnhpg@mail.gmail.com/T/#mdb78503524a8f4207f59a40f7ff573e210656988
Cheers,
Biju
Hi Biju,
On Tue, Nov 15, 2022 at 8:48 AM Biju Das <[email protected]> wrote:
> > > -----Original Message-----
> > > From: Geert Uytterhoeven <[email protected]>
> > > On Mon, Nov 14, 2022 at 7:42 PM Biju Das
> > <[email protected]> wrote:
> > > > > From: Prabhakar <[email protected]>
> > > > > On RZ/Five SoC it was observed that setting timeout (to say 1
> > sec)
> > > > > wouldn't reset the system. To fix this we make sure we issue a
> > > > > reset before putting the PM clocks to make sure the registers
> > have
> > > > > been
> > > cleared.
> > > > >
> > > > > While at it re-used rzg2l_wdt_stop() in rzg2l_wdt_set_timeout()
> > as
> > > > > we were calling the same functions here.
> > > > >
> > > > > Signed-off-by: Lad Prabhakar
> > > > > <[email protected]>
> > > > > ---
> > > > > Note,
> > > > > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > > > > - My initial investigation showed adding the delay after
> > > > > pm_runtime_get_sync()
> > > > > also fixed this issue.
> > > > > - Do I need add the fixes tag ? what should be the operation
> > PUT-
> > > > > >RESET/RESET->PUT?
> > > >
> > > > It looks like timing issue, None of the previous devices are
> > > > affected by
> > > this.
> > >
> > > To me it looks like the device must be clocked for the reset signal
> > to
> > > be propagated?
> >
> > Yep, provide clk supply for a device, then apply reset.
>
> Maybe we need to make it consistent by taking care of [1]
>
> Current patch: CLK ON -> apply Reset for V2M.
> [1]: Apply Reset -> CLK ON for V2M.
Yes, that would also simplify that patch: just add the call to reset?
> [1] https://lore.kernel.org/linux-renesas-soc/CAMuHMdUWbT6VArm9B56VE0yUYWCTm=3vMGrrONSv9cdsQQnhpg@mail.gmail.com/T/#mdb78503524a8f4207f59a40f7ff573e210656988
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
> -----Original Message-----
> From: Geert Uytterhoeven <[email protected]>
> Sent: 15 November 2022 08:11
> To: Biju Das <[email protected]>
> Cc: Prabhakar <[email protected]>; Wim Van Sebroeck
> <[email protected]>; Guenter Roeck <[email protected]>; Philipp
> Zabel <[email protected]>; [email protected]; linux-
> [email protected]; [email protected]; Fabrizio
> Castro <[email protected]>; Prabhakar Mahadev Lad
> <[email protected]>
> Subject: Re: [PATCH] watchdog: rzg2l_wdt: Issue a reset before we put
> the PM clocks
>
> Hi Biju,
>
> On Tue, Nov 15, 2022 at 8:48 AM Biju Das <[email protected]>
> wrote:
> > > > -----Original Message-----
> > > > From: Geert Uytterhoeven <[email protected]> On Mon, Nov 14,
> > > > 2022 at 7:42 PM Biju Das
> > > <[email protected]> wrote:
> > > > > > From: Prabhakar <[email protected]> On RZ/Five SoC
> it
> > > > > > was observed that setting timeout (to say 1
> > > sec)
> > > > > > wouldn't reset the system. To fix this we make sure we issue
> a
> > > > > > reset before putting the PM clocks to make sure the
> registers
> > > have
> > > > > > been
> > > > cleared.
> > > > > >
> > > > > > While at it re-used rzg2l_wdt_stop() in
> > > > > > rzg2l_wdt_set_timeout()
> > > as
> > > > > > we were calling the same functions here.
> > > > > >
> > > > > > Signed-off-by: Lad Prabhakar
> > > > > > <[email protected]>
> > > > > > ---
> > > > > > Note,
> > > > > > - This patch has been tested on RZ/G2L, RZ/V2M and RZ/Five.
> > > > > > - My initial investigation showed adding the delay after
> > > > > > pm_runtime_get_sync()
> > > > > > also fixed this issue.
> > > > > > - Do I need add the fixes tag ? what should be the operation
> > > PUT-
> > > > > > >RESET/RESET->PUT?
> > > > >
> > > > > It looks like timing issue, None of the previous devices are
> > > > > affected by
> > > > this.
> > > >
> > > > To me it looks like the device must be clocked for the reset
> > > > signal
> > > to
> > > > be propagated?
> > >
> > > Yep, provide clk supply for a device, then apply reset.
> >
> > Maybe we need to make it consistent by taking care of [1]
> >
> > Current patch: CLK ON -> apply Reset for V2M.
> > [1]: Apply Reset -> CLK ON for V2M.
>
> Yes, that would also simplify that patch: just add the call to reset?
Fabrizio previously told me, CLK ON -> apply Reset does not work for RZ/V2M reboot use case.
Regards,
Biju