|
From: Pádraig Brady on 6 Sep 2006 07:30 Samuel Tardieu wrote: > Winbond W83697HG watchdog timer Looks good, thanks. I've got a W83697H*F* here on a VIA motherboard, which is the same from a watchdog point of view. It is on port 0x2e though. Is 0x4e a good default? Is W83697HG a good name? Note I've CC'd Wim Van Sebroeck who is the watchdog tree maintainer. I noticed you didn't include the check that's in the W83627HF driver to reset the timeout if already running from the BIOS. This was because some BIOS set the timeout to 4 minutes for example, so when the driver was loaded and reset the mode to seconds, the machine rebooted before the init scripts could run and start the userspace watchdog daemon. cheers, P?draig. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Samuel Tardieu on 6 Sep 2006 07:40 On 6/09, P?draig Brady wrote: | Looks good, thanks. Thanks a lot P?draig for your review. | I've got a W83697H*F* here on a VIA motherboard, | which is the same from a watchdog point of view. | It is on port 0x2e though. | Is 0x4e a good default? I think we may find half of each (0x2e and 0x4e). I'm reluctant to let the autodetection routine be the default. What if another peripheral is at the other address, could bad things happen? | Is W83697HG a good name? HF would be equally good. I just named it after the watchdog I had in my hardware. If there is a preference for HF, I can change it. | Note I've CC'd Wim Van Sebroeck who is the watchdog tree maintainer. Thank you. | I noticed you didn't include the check that's in the | W83627HF driver to reset the timeout if already running | from the BIOS. This was because some BIOS set the timeout | to 4 minutes for example, so when the driver was loaded | and reset the mode to seconds, the machine rebooted | before the init scripts could run and start the userspace | watchdog daemon. Note that the watchdog is enabled only when the device is open and is signalled during the wdt_enable() routine just after switching the mode to seconds. The opportunity for the device to reboot while we are in the middle of open() will exist anyway and would be a very bad luck. But I buy your argument in order to reduce the risks: setting the counter to 0 before switching the mode (in wdt_enable()) would decrease the possibility of bad luck happening :) But I don't think this is worth a warning; just set the counter to 0 (not counting) before doing the configuration is benign enough not to be signalled IMO. Also, wdt_open() has a wdt_ping() just after the wdt_enable() and this is superfluous, I remove it. Here is an updated patch with the changes mentionned above. Don't hesitate to comment on it or request other changes. Winbond W83697HG watchdog timer The Winbond SuperIO W83697HG includes a watchdog that can count from 1 to 255 seconds (or minutes). This drivers allows the seconds mode to be used. It exposes a standard /dev/watchdog interface. This chip is currently being used on motherboards designed by VIA and Dedibox. It should be compatible with W83697HF chips as well according to the datasheet but is untested on those. By default, the module looks for a chip at I/O port 0x4e. The chip can be configured to be at 0x2e on some motherboards, the address can be chosen using the wdt_io module parameter. Using 0 will try to autodetect the address. Signed-off-by: Samuel Tardieu <sam(a)rfc1149.net> diff -r b1d36669f98d drivers/char/watchdog/Kconfig --- a/drivers/char/watchdog/Kconfig Mon Sep 04 03:00:04 2006 +0000 +++ b/drivers/char/watchdog/Kconfig Wed Sep 06 12:25:06 2006 +0200 @@ -371,6 +371,21 @@ config W83627HF_WDT Most people will say N. +config W83697HG_WDT + tristate "W83697HG Watchdog Timer" + depends on WATCHDOG && X86 + ---help--- + This is the driver for the hardware watchdog on the W83697HG chipset + as used in Dedibox/VIA motherboards (and likely others). + This watchdog simply watches your kernel to make sure it doesn't + freeze, and if it does, it reboots your computer after a certain + amount of time. + + To compile this driver as a module, choose M here: the + module will be called w83697hg_wdt. + + Most people will say N. + config W83877F_WDT tristate "W83877F (EMACS) Watchdog Timer" depends on WATCHDOG && X86 diff -r b1d36669f98d drivers/char/watchdog/Makefile --- a/drivers/char/watchdog/Makefile Mon Sep 04 03:00:04 2006 +0000 +++ b/drivers/char/watchdog/Makefile Wed Sep 06 12:25:06 2006 +0200 @@ -51,6 +51,7 @@ obj-$(CONFIG_SBC8360_WDT) += sbc8360.o obj-$(CONFIG_SBC8360_WDT) += sbc8360.o obj-$(CONFIG_CPU5_WDT) += cpu5wdt.o obj-$(CONFIG_W83627HF_WDT) += w83627hf_wdt.o +obj-$(CONFIG_W83697HG_WDT) += w83697hg_wdt.o obj-$(CONFIG_W83877F_WDT) += w83877f_wdt.o obj-$(CONFIG_W83977F_WDT) += w83977f_wdt.o obj-$(CONFIG_MACHZ_WDT) += machzwd.o diff -r b1d36669f98d drivers/char/watchdog/w83697hg_wdt.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drivers/char/watchdog/w83697hg_wdt.c Wed Sep 06 13:25:02 2006 +0200 @@ -0,0 +1,424 @@ +/* + * w83697hg WDT driver + * + * (c) Copyright 2006 Samuel Tardieu <sam(a)rfc1149.net> + * + * Based on w83627hf_wdt which is based on wadvantechwdt.c + * which is based on wdt.c. + * Original copyright messages: + * + * (c) Copyright 2003 P?draig Brady <P(a)draigBrady.com> + * + * (c) Copyright 2000-2001 Marek Michalkiewicz <marekm(a)linux.org.pl> + * + * (c) Copyright 1996 Alan Cox <alan(a)redhat.com>, All Rights Reserved. + * http://www.redhat.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + * Neither Alan Cox nor CymruNet Ltd. admit liability nor provide + * warranty for any of this software. This material is provided + * "AS-IS" and at no charge. + * + * (c) Copyright 1995 Alan Cox <alan(a)redhat.com> + */ + +#include <linux/module.h> +#include <linux/moduleparam.h> +#include <linux/types.h> +#include <linux/miscdevice.h> +#include <linux/watchdog.h> +#include <linux/fs.h> +#include <linux/ioport.h> +#include <linux/notifier.h> +#include <linux/reboot.h> +#include <linux/init.h> + +#include <asm/io.h> +#include <asm/uaccess.h> +#include <asm/system.h> + +#define WATCHDOG_NAME "w83697hg WDT" +#define PFX WATCHDOG_NAME ": " +#define WATCHDOG_TIMEOUT 60 /* 60 sec default timeout */ + +static unsigned long wdt_is_open; +static char expect_close; + +/* You must set this - there is no sane way to probe for this board. */ +static int wdt_io = 0x4e; +module_param(wdt_io, int, 0); +MODULE_PARM_DESC(wdt_io, "w83697hg WDT io port (default 0x4e, 0 = autodetect)"); + +static int timeout = WATCHDOG_TIMEOUT; /* in seconds */ +module_param(timeout, int, 0); +MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds. 1<= timeout <=255, default=" __MODULE_STRING(WATCHDOG_TIMEOUT) "."); + +static int nowayout = WATCHDOG_NOWAYOUT; +module_param(nowayout, int, 0); +MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)"); + +/* + * Kernel m
From: Pádraig Brady on 6 Sep 2006 08:00 Samuel Tardieu wrote: > On 6/09, P?draig Brady wrote: > | I noticed you didn't include the check that's in the > | W83627HF driver to reset the timeout if already running > | from the BIOS. This was because some BIOS set the timeout > | to 4 minutes for example, so when the driver was loaded > | and reset the mode to seconds, the machine rebooted > | before the init scripts could run and start the userspace > | watchdog daemon. > > Note that the watchdog is enabled only when the device is open and is > signalled during the wdt_enable() routine just after switching the mode > to seconds. Sorry I missed that. That's fine so. So in the case the BIOS sets the watchdog to 4 mins for example the 2 drivers are a little different. W83627HF resets to timeout seconds on module load W83697HG resets to timeout seconds on /dev/watchdog open cheers, P?draig. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Samuel Tardieu on 6 Sep 2006 08:10 On 6/09, P?draig Brady wrote: | So in the case the BIOS sets the watchdog to 4 mins | for example the 2 drivers are a little different. | | W83627HF resets to timeout seconds on module load | W83697HG resets to timeout seconds on /dev/watchdog open Yes, I'm reluctant at changing anything set by the BIOS before the first *use* of the module. In particular, if the watchdog was not activated by default in the BIOS, I'd prefer the box not to reboot just because the module was loaded (maybe by mistake) if no daemon open /dev/watchdog at least once. In particular, some boxes may take a long time to boot, e.g. if fscks are needed; if the module is loaded by an initrd before filesystems are mounted and fscks are done, if I'm not mistaken the box could reboot in loop every time in the middle of fscks. Sam - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Pádraig Brady on 6 Sep 2006 08:50
Samuel Tardieu wrote: > On 6/09, P?draig Brady wrote: > > | So in the case the BIOS sets the watchdog to 4 mins > | for example the 2 drivers are a little different. > | > | W83627HF resets to timeout seconds on module load > | W83697HG resets to timeout seconds on /dev/watchdog open > > Yes, I'm reluctant at changing anything set by the BIOS before the first > *use* of the module. Sure. > In particular, if the watchdog was not activated by > default in the BIOS, I'd prefer the box not to reboot just because the > module was loaded (maybe by mistake) if no daemon open /dev/watchdog > at least once. Of course. To clarify, the W83627HF watchdog does not enable the watchdog on load if the BIOS had not enabled it already. cheers, P?draig. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |