Messages in this thread Patch in this message | | | Date | Sat, 12 May 2007 21:35:58 +0200 | From | Lee Garrett <> | Subject | Re: [Bugme-new] [Bug 8378] New: Averatec 3156X laptop doesn't reboot with kernels > 2.6.13.5 (responsible commit found) |
| |
Truxton Fulton wrote: > Hi, > > I verified on my IDEQ210M that performing the old reboot sequence > followed by the new reboot sequence works for me, and I suspect that > it will work for Lee also. Like this : > > /* 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); > } > > Thanks, > > -Truxton
Hello everyone,
I compiled a 2.6.21.1 kernel with Truxton's suggestion mentioned above. My laptop reboots normally with it. For convenience I've diffed a patch, which is appended to this mail.
Regards, Lee --- 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 */ | |