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 */
next prev parent 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 ` [Bugme-new] [Bug 8378] New: Averatec 3156X laptop doesn't reboot with kernels > 2.6.13.5 (responsible commit found) 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 \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.