Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8b93789808756bcc1e5c90c99f1b1ef52f839a51
Commit:     8b93789808756bcc1e5c90c99f1b1ef52f839a51
Parent:     bd78432c8f209a1028f4e5bada8b1da1d8e4da09
Author:     Truxton Fulton <[EMAIL PROTECTED]>
AuthorDate: Sat Jul 21 17:10:38 2007 +0200
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Sat Jul 21 18:37:10 2007 -0700

    i386: fix machine rebooting
    
    Commit 59f4e7d572980a521b7bdba74ab71b21f5995538 fixed machine rebooting
    on Truxton's machine (when no keyboard was present).  But it broke it on
    Lee's machine.
    
    The patch reinstates the old (pre-59f4e7d572980a521b7bdba74ab71b21f5995538)
    code and if that doesn't work out, try the new,
    post-59f4e7d572980a521b7bdba74ab71b21f5995538 code instead.
    
    Cc: Lee Garrett <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 include/asm-i386/mach-default/mach_reboot.h |   25 ++++++++++++++++++++++++-
 1 files changed, 24 insertions(+), 1 deletions(-)

diff --git a/include/asm-i386/mach-default/mach_reboot.h 
b/include/asm-i386/mach-default/mach_reboot.h
index a955e57..e23fd9f 100644
--- a/include/asm-i386/mach-default/mach_reboot.h
+++ b/include/asm-i386/mach-default/mach_reboot.h
@@ -19,14 +19,37 @@ static inline void kb_wait(void)
 static inline void mach_reboot(void)
 {
        int i;
+
+       /* old method, works on most machines */
        for (i = 0; i < 10; 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.  This read-modify-write sequence sets only the
+        * system flag
+        */
+       for (i = 0; i < 10; i++) {
+               int cmd;
+
+               outb(0x20, 0x64);       /* read Controller Command Byte */
+               udelay(50);
+               kb_wait();
+               udelay(50);
+               cmd = inb(0x60);
+               udelay(50);
+               kb_wait();
+               udelay(50);
                outb(0x60, 0x64);       /* write Controller Command Byte */
                udelay(50);
                kb_wait();
                udelay(50);
-               outb(0x14, 0x60);       /* set "System flag" */
+               outb(cmd | 0x04, 0x60); /* set "System flag" */
                udelay(50);
                kb_wait();
                udelay(50);
-
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  http://vger.kernel.org/majordomo-info.html

Reply via email to