tree 65004b9875c8fa830de2879229ecf871de5525f4
parent 6e8dcee3e63f5a2cba4affff4bbb6e228f4b258a
author Truxton Fulton <[EMAIL PROTECTED]> Sat, 10 Sep 2005 03:02:18 -0700
committer Linus Torvalds <[EMAIL PROTECTED]> Sat, 10 Sep 2005 03:57:35 -0700

[PATCH] fix reboot via keyboard controller reset

I have a system (Biostar IDEQ210M mini-pc with a VIA chipset) which will
not reboot unless a keyboard is plugged in to it.  I have tried all
combinations of the kernel "reboot=x,y" flags to no avail.  Rebooting by
any method will leave the system in a wedged state (at the "Restarting
system" message).

I finally tracked the problem down to the machine's refusal to fully reboot
unless the keyboard controller status register had bit 2 set.  This is the
"System flag" which when set, indicates successful completion of the
keyboard controller self-test (Basic Assurance Test, BAT).

I suppose that something is trying to protect against sporadic reboots
unless the keyboard controller is in a good state (a keyboard is present),
but I need this machine to be headless.

I found that setting the system flag (via the command byte) before giving
the "pulse reset line" command will allow the reboot to proceed.  The patch
is simple, and I think it should be fine for everybody whether they have
this type of machine or not.  This affects the "hard" reboot (as done when
the kernel boot flags "reboot=c,h" are used).

Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>

 include/asm-i386/mach-default/mach_reboot.h |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/include/asm-i386/mach-default/mach_reboot.h 
--- a/include/asm-i386/mach-default/mach_reboot.h
+++ b/include/asm-i386/mach-default/mach_reboot.h
@@ -22,7 +22,15 @@ static inline void mach_reboot(void)
        for (i = 0; i < 100; i++) {
-               outb(0xfe, 0x64);         /* pulse reset low */
+               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 */
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to