Skip to content

Commit d129718

Browse files
tk-wfischerWim Van Sebroeck
authored andcommitted
watchdog: it87_wdt: Keep WDTCTRL bit 3 unmodified for IT8784/IT8786
WDTCTRL bit 3 sets the mode choice for the clock input of IT8784/IT8786. Some motherboards require this bit to be set to 1 (= PCICLK mode), otherwise the watchdog functionality gets broken. The BIOS of those motherboards sets WDTCTRL bit 3 already to 1. Instead of setting all bits of WDTCTRL to 0 by writing 0x00 to it, keep bit 3 of it unchanged for IT8784/IT8786 chips. In this way, bit 3 keeps the status as set by the BIOS of the motherboard. Watchdog tests have been successful with this patch with the following systems: IT8784: Thomas-Krenn LES plus v2 (YANLING YL-KBRL2 V2) IT8786: Thomas-Krenn LES plus v3 (YANLING YL-CLU L2) IT8786: Thomas-Krenn LES network 6L v2 (YANLING YL-CLU6L) Link: https://lore.kernel.org/all/140b264d-341f-465b-8715-dacfe84b3f71@roeck-us.net/ Signed-off-by: Werner Fischer <devlists@wefi.net> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Link: https://lore.kernel.org/r/20231213094525.11849-4-devlists@wefi.net Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
1 parent ab6dea0 commit d129718

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

drivers/watchdog/it87_wdt.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ static struct watchdog_device wdt_dev = {
258258
static int __init it87_wdt_init(void)
259259
{
260260
u8 chip_rev;
261+
u8 ctrl;
261262
int rc;
262263

263264
rc = superio_enter();
@@ -316,7 +317,18 @@ static int __init it87_wdt_init(void)
316317

317318
superio_select(GPIO);
318319
superio_outb(WDT_TOV1, WDTCFG);
319-
superio_outb(0x00, WDTCTRL);
320+
321+
switch (chip_type) {
322+
case IT8784_ID:
323+
case IT8786_ID:
324+
ctrl = superio_inb(WDTCTRL);
325+
ctrl &= 0x08;
326+
superio_outb(ctrl, WDTCTRL);
327+
break;
328+
default:
329+
superio_outb(0x00, WDTCTRL);
330+
}
331+
320332
superio_exit();
321333

322334
if (timeout < 1 || timeout > max_units * 60) {

0 commit comments

Comments
 (0)