Ping. Henning Am Wed, 24 Aug 2022 17:24:48 +0200 schrieb Henning Schild <henning.schild@xxxxxxxxxxx>: > The status bit in the status and control register can tell us whether > the last reboot was caused by the watchdog. Make sure to take that > into the bootstatus before clearing it. > > Reviewed-by: Guenter Roeck <linux@xxxxxxxxxxxx> > Signed-off-by: Henning Schild <henning.schild@xxxxxxxxxxx> > --- > drivers/watchdog/w83627hf_wdt.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/watchdog/w83627hf_wdt.c > b/drivers/watchdog/w83627hf_wdt.c index 56a4a4030ca9..bc33b63c5a5d > 100644 --- a/drivers/watchdog/w83627hf_wdt.c > +++ b/drivers/watchdog/w83627hf_wdt.c > @@ -113,6 +113,10 @@ MODULE_PARM_DESC(early_disable, "Disable > watchdog at boot time (default=0)"); #define W836X7HF_WDT_CSR > 0xf7 #define NCT6102D_WDT_CSR 0xf2 > > +#define WDT_CSR_STATUS 0x10 > +#define WDT_CSR_KBD 0x40 > +#define WDT_CSR_MOUSE 0x80 > + > static void superio_outb(int reg, int val) > { > outb(reg, WDT_EFER); > @@ -244,8 +248,12 @@ static int w83627hf_init(struct watchdog_device > *wdog, enum chips chip) t = superio_inb(cr_wdt_control) & ~0x0C; > superio_outb(cr_wdt_control, t); > > - /* reset trigger, disable keyboard & mouse turning off > watchdog */ > - t = superio_inb(cr_wdt_csr) & ~0xD0; > + t = superio_inb(cr_wdt_csr); > + if (t & WDT_CSR_STATUS) > + wdog->bootstatus |= WDIOF_CARDRESET; > + > + /* reset status, disable keyboard & mouse turning off > watchdog */ > + t &= ~(WDT_CSR_STATUS | WDT_CSR_KBD | WDT_CSR_MOUSE); > superio_outb(cr_wdt_csr, t); > > superio_exit();