diff -upr linux-2.6.30-rc8.ori/drivers/watchdog/iTCO_wdt.c linux-2.6.30-rc8.new/drivers/watchdog/iTCO_wdt.c --- linux-2.6.30-rc8.ori/drivers/watchdog/iTCO_wdt.c 2009-06-05 19:26:07.000000000 +0100 +++ linux-2.6.30-rc8.new/drivers/watchdog/iTCO_wdt.c 2009-06-05 19:33:03.000000000 +0100 @@ -63,7 +63,7 @@ /* Module and version information */ #define DRV_NAME "iTCO_wdt" -#define DRV_VERSION "1.05" +#define DRV_VERSION "1.06" #define PFX DRV_NAME ": " /* Includes */ @@ -277,6 +277,13 @@ MODULE_PARM_DESC(heartbeat, "Watchdog he "(2 0 = Disables TCO logic generating an SMI# */ val32 = inl(SMI_EN); + /* Bit 13: TCO_EN -> 0 = Disables TCO logic generating an SMI# + Bit 0: GBL_SMI_EN -> 0 = No SMI# will be generated by ICH9. */ val32 &= 0xffffdfff; /* Turn off SMI clearing watchdog */ + if (gbl_smi_en == 0) + val32 &= 0xfffffffe; /* Turn off GBL_SMI_EN */ outl(val32, SMI_EN); /* The TCO I/O registers reside in a 32-byte range pointed to @@ -733,8 +760,8 @@ static int __devinit iTCO_wdt_init(struc goto unreg_region; } - printk(KERN_INFO PFX "initialized. heartbeat=%d sec (nowayout=%d)\n", - heartbeat, nowayout); + printk(KERN_INFO PFX "initialized. heartbeat=%d sec, gbl_smi_en=%d " + "(nowayout=%d)\n", heartbeat, gbl_smi_en, nowayout); return 0; @@ -847,6 +874,9 @@ unreg_platform_driver: static void __exit iTCO_wdt_cleanup_module(void) { + //if (gbl_smi_en == 0) + if (gbl_smi_en == 0 && nowayout == 0) + iTCO_wdt_restore_gbl_smi_en(); platform_device_unregister(iTCO_wdt_platform_device); platform_driver_unregister(&iTCO_wdt_driver); printk(KERN_INFO PFX "Watchdog Module Unloaded.\n");