Re: [PATCH v2] watchdog: w83627hf_wdt: add bootstatus support

From: Henning Schild
Date: Wed Aug 24 2022 - 11:26:07 EST


Diff to v1:
- fixed typo in commit message
- add Reviewed-by tag
- make sure it still applies

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();