diff mbox series

imx: distinguish POR from POR+WDOG reset cause for first wd

Message ID 1579702656-20667-1-git-send-email-f.suligoi@asem.it
State New
Headers show
Series imx: distinguish POR from POR+WDOG reset cause for first wd | expand

Commit Message

Flavio Suligoi Jan. 22, 2020, 2:17 p.m. UTC
In some application the possibility to check if the reset
is caused by a watchdog is essential, even if it occurs
simultaneously with POR.

Signed-off-by: Flavio Suligoi <f.suligoi at asem.it>
---
 arch/arm/mach-imx/cpu.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Fabio Estevam Jan. 22, 2020, 5:46 p.m. UTC | #1
Hi Flavio,

On Wed, Jan 22, 2020 at 11:18 AM Flavio Suligoi <f.suligoi at asem.it> wrote:
>
> In some application the possibility to check if the reset
> is caused by a watchdog is essential, even if it occurs
> simultaneously with POR.
>
> Signed-off-by: Flavio Suligoi <f.suligoi at asem.it>
> ---
>  arch/arm/mach-imx/cpu.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
> index bfa85c6..ce0c663 100644
> --- a/arch/arm/mach-imx/cpu.c
> +++ b/arch/arm/mach-imx/cpu.c
> @@ -47,7 +47,6 @@ static char *get_reset_cause(void)
>  {
>         switch (get_imx_reset_cause()) {
>         case 0x00001:
> -       case 0x00011:
>                 return "POR";
>         case 0x00004:
>                 return "CSU";
> @@ -59,6 +58,12 @@ static char *get_reset_cause(void)
>  #else
>                 return "WDOG";
>  #endif
> +       case 0x00011:
> +#ifdef CONFIG_MX7
> +               return "POR + WDOG1";
> +#else
> +               return "POR + WDOG";
> +#endif
>         case 0x00020:
>                 return "JTAG HIGH-Z";
>         case 0x00040:

If I understand this correctly your board has a WDOG_B pin connected
to the PMIC and when WDOG_B is asserted the PMIC is power cycled and
the system resets via POR.

Is this correct? If not, please describe exactly your setup and what
you are trying to achieve.

It seems that the current behavior is correct for me.

Thanks
Flavio Suligoi Jan. 23, 2020, 8:22 a.m. UTC | #2
Hi Fabio,

> 
> Hi Flavio,
> 
> On Wed, Jan 22, 2020 at 11:18 AM Flavio Suligoi <f.suligoi at asem.it> wrote:
> >
> > In some application the possibility to check if the reset
> > is caused by a watchdog is essential, even if it occurs
> > simultaneously with POR.
> >
> > Signed-off-by: Flavio Suligoi <f.suligoi at asem.it>
> > ---
> >  arch/arm/mach-imx/cpu.c | 7 ++++++-
> >  1 file changed, 6 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
> > index bfa85c6..ce0c663 100644
> > --- a/arch/arm/mach-imx/cpu.c
> > +++ b/arch/arm/mach-imx/cpu.c
> > @@ -47,7 +47,6 @@ static char *get_reset_cause(void)
> >  {
> >         switch (get_imx_reset_cause()) {
> >         case 0x00001:
> > -       case 0x00011:
> >                 return "POR";
> >         case 0x00004:
> >                 return "CSU";
> > @@ -59,6 +58,12 @@ static char *get_reset_cause(void)
> >  #else
> >                 return "WDOG";
> >  #endif
> > +       case 0x00011:
> > +#ifdef CONFIG_MX7
> > +               return "POR + WDOG1";
> > +#else
> > +               return "POR + WDOG";
> > +#endif
> >         case 0x00020:
> >                 return "JTAG HIGH-Z";
> >         case 0x00040:
> 
> If I understand this correctly your board has a WDOG_B pin connected
> to the PMIC and when WDOG_B is asserted the PMIC is power cycled and
> the system resets via POR.
> 
> Is this correct? If not, please describe exactly your setup and what
> you are trying to achieve.
> 
> It seems that the current behavior is correct for me.
> 
> Thanks

I'm currently use the imx8mm_evk board, with the PMIC
Rohom BD71847AMWV.
After a:

- power-on
- push-button reset
- a watchdog using the WDOG_B

the i.MX8MMini register SRC_SRSR (address 0x3039005C) is:
SRC_SRSR = 0x00000001 --> POR

but after a soft reset, from u-boot, using the WDOG1_WCR
(address 0x30280000):

mw.w 30280000 053C

we have:
SRC_SRSR = 0x00000011  --> POR + WDOG

and in this case is important for me to distinguish the two
different situation.

Thanks,

Flavio
Peng Fan Jan. 27, 2020, 12:49 p.m. UTC | #3
> Subject: RE: [PATCH] imx: distinguish POR from POR+WDOG reset cause for
> first wd
> 
> Hi Fabio,
> 
> >
> > Hi Flavio,
> >
> > On Wed, Jan 22, 2020 at 11:18 AM Flavio Suligoi <f.suligoi at asem.it> wrote:
> > >
> > > In some application the possibility to check if the reset is caused
> > > by a watchdog is essential, even if it occurs simultaneously with
> > > POR.
> > >
> > > Signed-off-by: Flavio Suligoi <f.suligoi at asem.it>
> > > ---
> > >  arch/arm/mach-imx/cpu.c | 7 ++++++-
> > >  1 file changed, 6 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c index
> > > bfa85c6..ce0c663 100644
> > > --- a/arch/arm/mach-imx/cpu.c
> > > +++ b/arch/arm/mach-imx/cpu.c
> > > @@ -47,7 +47,6 @@ static char *get_reset_cause(void)  {
> > >         switch (get_imx_reset_cause()) {
> > >         case 0x00001:
> > > -       case 0x00011:
> > >                 return "POR";
> > >         case 0x00004:
> > >                 return "CSU";
> > > @@ -59,6 +58,12 @@ static char *get_reset_cause(void)  #else
> > >                 return "WDOG";
> > >  #endif
> > > +       case 0x00011:
> > > +#ifdef CONFIG_MX7
> > > +               return "POR + WDOG1"; #else
> > > +               return "POR + WDOG"; #endif
> > >         case 0x00020:
> > >                 return "JTAG HIGH-Z";
> > >         case 0x00040:
> >
> > If I understand this correctly your board has a WDOG_B pin connected
> > to the PMIC and when WDOG_B is asserted the PMIC is power cycled and
> > the system resets via POR.
> >
> > Is this correct? If not, please describe exactly your setup and what
> > you are trying to achieve.
> >
> > It seems that the current behavior is correct for me.
> >
> > Thanks
> 
> I'm currently use the imx8mm_evk board, with the PMIC Rohom
> BD71847AMWV.
> After a:
> 
> - power-on
> - push-button reset
> - a watchdog using the WDOG_B
> 
> the i.MX8MMini register SRC_SRSR (address 0x3039005C) is:
> SRC_SRSR = 0x00000001 --> POR
> 
> but after a soft reset, from u-boot, using the WDOG1_WCR (address
> 0x30280000):
> 
> mw.w 30280000 053C

This will trigger a wdog timeout wdog_b assert to pmic, so it should be POR.

> 
> we have:
> SRC_SRSR = 0x00000011  --> POR + WDOG

If bit4 is set, that means you are not really doing POR. Have you tried clear
Bit 3 and 5 when set WCR?

If you wanna soft reset, using wdog_b to trigger pmic is not correct. You
need use SRS.

Regards,
Peng.

> 
> and in this case is important for me to distinguish the two different situation.
> 
> Thanks,
> 
> Flavio
Flavio Suligoi Jan. 27, 2020, 1:49 p.m. UTC | #4
Hi Peng,

> -----Original Message-----
> From: Peng Fan <peng.fan at nxp.com>
> Sent: lunedì 27 gennaio 2020 13:50
> To: Flavio Suligoi <f.suligoi at asem.it>; Fabio Estevam <festevam at gmail.com>
> Cc: Stefano Babic <sbabic at denx.de>; dl-uboot-imx <uboot-imx at nxp.com>; U-
> Boot-Denx <u-boot at lists.denx.de>
> Subject: RE: [PATCH] imx: distinguish POR from POR+WDOG reset cause for
> first wd
> 
> 
> 
> > Subject: RE: [PATCH] imx: distinguish POR from POR+WDOG reset cause for
> > first wd
> >
> > Hi Fabio,
> >
> > >
> > > Hi Flavio,
> > >
> > > On Wed, Jan 22, 2020 at 11:18 AM Flavio Suligoi <f.suligoi at asem.it>
> wrote:
> > > >
> > > > In some application the possibility to check if the reset is caused
> > > > by a watchdog is essential, even if it occurs simultaneously with
> > > > POR.
> > > >
> > > > Signed-off-by: Flavio Suligoi <f.suligoi at asem.it>
> > > > ---
> > > >  arch/arm/mach-imx/cpu.c | 7 ++++++-
> > > >  1 file changed, 6 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c index
> > > > bfa85c6..ce0c663 100644
> > > > --- a/arch/arm/mach-imx/cpu.c
> > > > +++ b/arch/arm/mach-imx/cpu.c
> > > > @@ -47,7 +47,6 @@ static char *get_reset_cause(void)  {
> > > >         switch (get_imx_reset_cause()) {
> > > >         case 0x00001:
> > > > -       case 0x00011:
> > > >                 return "POR";
> > > >         case 0x00004:
> > > >                 return "CSU";
> > > > @@ -59,6 +58,12 @@ static char *get_reset_cause(void)  #else
> > > >                 return "WDOG";
> > > >  #endif
> > > > +       case 0x00011:
> > > > +#ifdef CONFIG_MX7
> > > > +               return "POR + WDOG1"; #else
> > > > +               return "POR + WDOG"; #endif
> > > >         case 0x00020:
> > > >                 return "JTAG HIGH-Z";
> > > >         case 0x00040:
> > >
> > > If I understand this correctly your board has a WDOG_B pin connected
> > > to the PMIC and when WDOG_B is asserted the PMIC is power cycled and
> > > the system resets via POR.
> > >
> > > Is this correct? If not, please describe exactly your setup and what
> > > you are trying to achieve.
> > >
> > > It seems that the current behavior is correct for me.
> > >
> > > Thanks
> >
> > I'm currently use the imx8mm_evk board, with the PMIC Rohom
> > BD71847AMWV.
> > After a:
> >
> > - power-on
> > - push-button reset
> > - a watchdog using the WDOG_B
> >
> > the i.MX8MMini register SRC_SRSR (address 0x3039005C) is:
> > SRC_SRSR = 0x00000001 --> POR
> >
> > but after a soft reset, from u-boot, using the WDOG1_WCR (address
> > 0x30280000):
> >
> > mw.w 30280000 053C
> 
> This will trigger a wdog timeout wdog_b assert to pmic, so it should be
> POR.
> 
> >
> > we have:
> > SRC_SRSR = 0x00000011  --> POR + WDOG
> 
> If bit4 is set, that means you are not really doing POR. Have you tried
> clear
> Bit 3 and 5 when set WCR?
> 
> If you wanna soft reset, using wdog_b to trigger pmic is not correct. You
> need use SRS.

My goal is to use the wd to have an hw reset, using the WDOG_B
connected to the PMIC, but, in the same time, at reboot, I want
to distinguish a real POR (a real power-on, for example) from a reset
caused by the wd-->WDOG_B.

In our future mx8mm board we want to use the new PCA9450, using its
capability to generate a cold reset, recycling all the 
voltage regulators except LDO1/2 (see cap.7.4 PMIC Reset,
register 0x08 RESET_CTRL).
In this way the SNVS_LP power should maintain the values inside the
SRC Reset Status Register (SRC_SRSR) of the mx8mm. Is it correct?

Thanks and regards,

Flavio

> 
> Regards,
> Peng.
> 
> >
> > and in this case is important for me to distinguish the two different
> situation.
> >
> > Thanks,
> >
> > Flavio
diff mbox series

Patch

diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
index bfa85c6..ce0c663 100644
--- a/arch/arm/mach-imx/cpu.c
+++ b/arch/arm/mach-imx/cpu.c
@@ -47,7 +47,6 @@  static char *get_reset_cause(void)
 {
 	switch (get_imx_reset_cause()) {
 	case 0x00001:
-	case 0x00011:
 		return "POR";
 	case 0x00004:
 		return "CSU";
@@ -59,6 +58,12 @@  static char *get_reset_cause(void)
 #else
 		return "WDOG";
 #endif
+	case 0x00011:
+#ifdef	CONFIG_MX7
+		return "POR + WDOG1";
+#else
+		return "POR + WDOG";
+#endif
 	case 0x00020:
 		return "JTAG HIGH-Z";
 	case 0x00040: