On 11/15/18 3:15 PM, Sascha Hauer wrote: > On i.MX6 when the watchdog has resetted the system then the SRSR > register correctly shows that the watchdog has resetted the system. > This is not the desired result though, a "reset" in barebox or "reboot" > in Linux should result in "RST" as reset source. So instead of making > the SRSR register value overwrite the reset source read from the > watchdog registers, interpret the SRSR value corresponding to watchdog > reset as "lookup details in the watchdog registers". > > Signed-off-by: Sascha Hauer > Cc: Andrey Smirnov > --- > arch/arm/mach-imx/imx.c | 6 +++--- > drivers/watchdog/imxwd.c | 10 +++++++--- > 2 files changed, 10 insertions(+), 6 deletions(-) > > diff --git a/arch/arm/mach-imx/imx.c b/arch/arm/mach-imx/imx.c > index ad227663dd..f87dd76c75 100644 > --- a/arch/arm/mach-imx/imx.c > +++ b/arch/arm/mach-imx/imx.c > @@ -204,9 +204,9 @@ void imx_set_reset_reason(void __iomem *srsr, > * sure we'll always override info from watchdog driver. > */ With this change, the above comment doesn't describe the reality anymore. > reset_source_set_priority(type, > - RESET_SOURCE_DEFAULT_PRIORITY + 1); > + RESET_SOURCE_DEFAULT_PRIORITY); > reset_source_set_instance(type, instance); > > - pr_info("i.MX reset reason %s (SRSR: 0x%08x)\n", > - reset_source_name(), reg); > + pr_debug("i.MX reset reason %s (SRSR: 0x%08x)\n", > + reset_source_name(), reg); > } > diff --git a/drivers/watchdog/imxwd.c b/drivers/watchdog/imxwd.c > index a66fae400c..8dba662392 100644 > --- a/drivers/watchdog/imxwd.c > +++ b/drivers/watchdog/imxwd.c > @@ -162,19 +162,23 @@ static void __noreturn imxwd_force_soc_reset(struct restart_handler *rst) > static void imx_watchdog_detect_reset_source(struct imx_wd *priv) > { > u16 val = readw(priv->base + IMX21_WDOG_WSTR); > + int priority = RESET_SOURCE_DEFAULT_PRIORITY; > + > + if (reset_source_get() == RESET_WDG) > + priority++; > > if (val & WSTR_COLDSTART) { > - reset_source_set(RESET_POR); > + reset_source_set_priority(RESET_POR, priority); > return; > } > > if (val & (WSTR_HARDRESET | WSTR_WARMSTART)) { > - reset_source_set(RESET_RST); > + reset_source_set_priority(RESET_RST, priority); > return; > } > > if (val & WSTR_WDOG) { > - reset_source_set(RESET_WDG); > + reset_source_set_priority(RESET_WDG, priority); > return; > } > > Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |