Skip to contentSkip to conversation

: fix reboot via keyboard controller reset

PATCH New Truxton Fulton 1 participant 1 message Aug 23, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 : fix reboot via keyboard controller reset

Hi,

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).

Here is a patch against include/asm-i386/mach-default/mach_reboot.h :

mach_reboot.h 2005-08-22 23:18:36.000000000 -0700 renamed from mach_reboot.h.orig 2005-08-22 22:23:13.000000000 -0700 +8 -0
@@ -22,6 +22,14 @@
        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);
        }

Thanks,

-Truxton