LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Truxton Fulton <trux@truxton.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Lee Garrett <lee-in-berlin@web.de>,
	linux-kernel@vger.kernel.org,
	"bugme-daemon@kernel-bugs.osdl.org" 
	<bugme-daemon@bugzilla.kernel.org>
Subject: Re: [Bugme-new] [Bug 8378] New: Averatec 3156X laptop doesn't  reboot with kernels > 2.6.13.5 (responsible commit found)
Date: Sun, 13 May 2007 05:13:04 -0700	[thread overview]
Message-ID: <m2bqgorkfj.fsf@truxton.com> (raw)
In-Reply-To: <20070512180240.7a8923d5.akpm@linux-foundation.org> (Andrew Morton's message of "Sat, 12 May 2007 18:02:40 -0700")

Andrew Morton wrote (at Sat, 12 May 2007 18:02:40 -0700) :
> 
> 
> On Sat, 12 May 2007 21:35:58 +0200 Lee Garrett <lee-in-berlin@web.de> wrote:
> 
>> 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.
>> 
> 
> OK, thanks.
> 
> So that are we doing here?  We try the pre-Truxton code and if that didn't
> work we try the post-Truxton code?  Hard to see how that could go wrong.
> 
> Truxton, can you please test it for us?

Hi,

Segher suggested a better implementation that did a read-modify-write
sequence.  I tested a few different combinations of these rebooting
approaches, and found that each one individually correctly rebooted
my headless machine (Biostar iDEQ 210M with VIA PM800 + VT8237 chipset).

A = original "pulse reset low"
B = my patch that sets the system flag (with possibly bad assumptions about other flags)
C = Segher's read-modify-write to set only the system flag.

So, the bad news is that I no longer have a baseline test
(because A works for me now).  I updated the bios a while ago,
and this is a different physical machine than the others I
was testing last year (which are now in production and I
cannot use to test), although the model is the same.

So, if you want to revert my patch all together, that's fine.
I think a foolproof reboot sequence would be A followed by C.

So here is my recommendation, which I have verified works on
my current machine :

Thanks,

-Truxton


--- mach_reboot.h.orig  2007-05-13 05:04:43.000000000 -0700
+++ mach_reboot.h       2007-05-13 05:01:02.000000000 -0700
@@ -19,20 +19,42 @@
 static inline void mach_reboot(void)
 {
        int i;
-       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);
-       }
+       u8 cmd ;
+
+
+       /* 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.
+          This read-modify-write sequence sets only the system flag. */
+        for (i = 0; i < 100; i++) {
+         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(cmd | 0x04, 0x60); /* set "System flag" */
+         udelay(50);
+         kb_wait();
+         udelay(50);
+         outb(0xfe, 0x64);         /* pulse reset low */
+         udelay(50);
+        }
 }
 
 #endif /* !_MACH_REBOOT_H */

  reply	other threads:[~2007-05-13 12:13 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200704271742.l3RHgPTH019561@fire-2.osdl.org>
2007-04-27 21:44 ` Andrew Morton
2007-04-28  3:17   ` Truxton Fulton
2007-05-12 19:35     ` Lee Garrett
2007-05-13  1:02       ` Andrew Morton
2007-05-13 12:13         ` Truxton Fulton [this message]
2007-10-03  2:30         ` Truxton Fulton
2007-11-01 15:50           ` Aristeu Rozanski
2007-11-01 17:53             ` Andrew Morton
2007-11-01 18:05               ` Aristeu Rozanski
2007-04-28 11:23   ` Segher Boessenkool

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2bqgorkfj.fsf@truxton.com \
    --to=trux@truxton.com \
    --cc=akpm@linux-foundation.org \
    --cc=bugme-daemon@bugzilla.kernel.org \
    --cc=lee-in-berlin@web.de \
    --cc=linux-kernel@vger.kernel.org \
    --subject='Re: [Bugme-new] [Bug 8378] New: Averatec 3156X laptop doesn'\''t  reboot with kernels > 2.6.13.5 (responsible commit found)' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).