--- a/include/asm-i386/mach-default/mach_reboot.h 2007-05-11 16:12:56.000000000 +0200 +++ b/include/asm-i386/mach-default/mach_reboot.h 2007-05-11 16:13:54.000000000 +0200 @@ -19,20 +19,32 @@ static inline void mach_reboot(void) { int i; - for (i = 0; i < 10; i++) { - kb_wait(); - udelay(50); - outb(0x60, 0x64); /* write Controller Command Byte */ - udelay(50); - kb_wait(); - udelay(50); - outb(0x14, 0x60); /* set "System flag" */ - udelay(50); - kb_wait(); - udelay(50); - outb(0xfe, 0x64); /* pulse reset low */ - udelay(50); - } + /* old method, works on most machines */ + for (i = 0; i < 100; i++) { + kb_wait(); + udelay(50); + outb(0xfe, 0x64); /* pulse reset low */ + udelay(50); + } + + /* new method, sets the "System flag" which when set, + indicates successful completion of the keyboard controller + self-test (Basic Assurance Test, BAT). This is needed + for some machines with no keyboard plugged in */ + for (i = 0; i < 100; i++) { + kb_wait(); + udelay(50); + outb(0x60, 0x64); /* write Controller Command Byte */ + udelay(50); + kb_wait(); + udelay(50); + outb(0x14, 0x60); /* set "System flag" */ + udelay(50); + kb_wait(); + udelay(50); + outb(0xfe, 0x64); /* pulse reset low */ + udelay(50); + } } #endif /* !_MACH_REBOOT_H */