From: Dmitry Torokhov <dtor_core@ameritech.net>
To: linux-kernel@vger.kernel.org
Cc: "David N. Welton" <davidw@eidetix.com>, Sascha Wilde <wilde@sha-bang.de>
Subject: Re: 2.6 kernel won't reboot on AMD system - 8042 problem?
Date: Wed, 11 Aug 2004 01:31:13 -0500 [thread overview]
Message-ID: <200408110131.14114.dtor_core@ameritech.net> (raw)
In-Reply-To: <41122C82.3020304@eidetix.com>
On Thursday 05 August 2004 07:48 am, David N. Welton wrote:
> By putting a series of 'crashme/reboot' calls into the kernel, I
> narrowed a possibl cause of it down to this bit of code in
> drivers/input/serio.c:753
>
> /*
> * Write CTR back.
> */
>
> if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
> printk(KERN_ERR "i8042.c: Can't write CTR while initializing i8042.\n");
> return -1;
> }
>
> If I do the reboot instructions before this, it reboots fine.
> Afterwards, and it just sits there, no reboot.
Hi,
Could you please try the patch below? I am interested in tests both with
and without keyboard/mouse. The main idea is to leave ports that have been
disabled by BIOS alone... The patch compiles but otherwise untested. Against
2.6.7.
BTW, do you both have the same motherboard/chipset? Maybe a dmi entry is in
order...
Thanks!
--
Dmitry
--- 2.6.7/drivers/input/serio/i8042.c.2.6.7 2004-08-10 22:47:49.000000000 -0500
+++ 2.6.7/drivers/input/serio/i8042.c 2004-08-10 23:07:29.000000000 -0500
@@ -567,6 +567,13 @@
static int i8042_check_aux_cookie;
/*
+ * Ignore possible presence of AUX port if interface is disabled by
+ * the BIOS.
+ */
+ if (~i8042_initial_ctr & I8042_CTR_AUXDIS)
+ return -1;
+
+/*
* Check if AUX irq is available. If it isn't, then there is no point
* in trying to detect AUX presence.
*/
@@ -610,6 +617,7 @@
if (i8042_command(¶m, I8042_CMD_AUX_DISABLE))
return -1;
+
if (i8042_command(¶m, I8042_CMD_CTL_RCTR) || (~param & I8042_CTR_AUXDIS)) {
printk(KERN_WARNING "Failed to disable AUX port, but continuing anyway... Is this a SiS?\n");
printk(KERN_WARNING "If AUX port is really absent please use the 'i8042.noaux' option.\n");
@@ -712,31 +720,34 @@
i8042_initial_ctr = i8042_ctr;
+ if (~i8042_initial_ctr & I8042_CTR_KBDDIS) {
/*
- * Disable the keyboard interface and interrupt.
+ * Disable the keyboard interface and interrupt. Note that we only try
+ * initializing keyboard port if it was enabled by the BIOS, otherwise
+ * some chipsets get upset and interfere with reboot process.
*/
- i8042_ctr |= I8042_CTR_KBDDIS;
- i8042_ctr &= ~I8042_CTR_KBDINT;
+ i8042_ctr |= I8042_CTR_KBDDIS;
+ i8042_ctr &= ~I8042_CTR_KBDINT;
/*
* Handle keylock.
*/
- if (~i8042_read_status() & I8042_STR_KEYLOCK) {
- if (i8042_unlock)
- i8042_ctr |= I8042_CTR_IGNKEYLOCK;
- else
- printk(KERN_WARNING "i8042.c: Warning: Keylock active.\n");
- }
+ if (~i8042_read_status() & I8042_STR_KEYLOCK) {
+ if (i8042_unlock)
+ i8042_ctr |= I8042_CTR_IGNKEYLOCK;
+ else
+ printk(KERN_WARNING "i8042.c: Warning: Keylock active.\n");
+ }
/*
* If the chip is configured into nontranslated mode by the BIOS, don't
* bother enabling translating and be happy.
*/
- if (~i8042_ctr & I8042_CTR_XLATE)
- i8042_direct = 1;
+ if (~i8042_ctr & I8042_CTR_XLATE)
+ i8042_direct = 1;
/*
* Set nontranslated mode for the kbd interface if requested by an option.
@@ -745,18 +756,19 @@
* BIOSes.
*/
- if (i8042_direct) {
- i8042_ctr &= ~I8042_CTR_XLATE;
- i8042_kbd_port.type = SERIO_8042;
- }
+ if (i8042_direct) {
+ i8042_ctr &= ~I8042_CTR_XLATE;
+ i8042_kbd_port.type = SERIO_8042;
+ }
/*
* Write CTR back.
*/
- if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
- printk(KERN_ERR "i8042.c: Can't write CTR while initializing i8042.\n");
- return -1;
+ if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
+ printk(KERN_ERR "i8042.c: Can't write CTR while initializing i8042.\n");
+ return -1;
+ }
}
return 0;
@@ -772,17 +784,21 @@
unsigned char param;
if (i8042_command(¶m, I8042_CMD_CTL_TEST))
- printk(KERN_ERR "i8042.c: i8042 controller reset timeout.\n");
+ printk(KERN_WARNING "i8042.c: i8042 controller reset timeout.\n");
}
/*
* Restore the original control register setting.
*/
- i8042_ctr = i8042_initial_ctr;
-
- if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR))
- printk(KERN_WARNING "i8042.c: Can't restore CTR.\n");
+ if (i8042_command(&i8042_ctr, I8042_CMD_CTL_RCTR))
+ printk(KERN_WARNING "i8042.c: Can't read CTR while resetting i8042.\n");
+ else
+ if (i8042_ctr != i8042_initial_ctr) {
+ i8042_ctr = i8042_initial_ctr;
+ if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR))
+ printk(KERN_WARNING "i8042.c: Can't restore CTR.\n");
+ }
}
@@ -974,7 +990,8 @@
i8042_port_register(&i8042_aux_values, &i8042_aux_port);
}
- i8042_port_register(&i8042_kbd_values, &i8042_kbd_port);
+ if (~i8042_initial_ctr & I8042_CTR_KBDDIS)
+ i8042_port_register(&i8042_kbd_values, &i8042_kbd_port);
mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
next prev parent reply other threads:[~2004-08-11 6:31 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-28 17:51 2.6 kernel won't reboot on AMD system (no, not the BIOS...) David N. Welton
2004-08-05 12:48 ` 2.6 kernel won't reboot on AMD system - 8042 problem? David N. Welton
2004-08-05 19:25 ` Sascha Wilde
2004-08-11 6:31 ` Dmitry Torokhov [this message]
2004-08-11 8:36 ` David N. Welton
2004-08-11 12:27 ` Vojtech Pavlik
2004-08-11 12:45 ` David N. Welton
2004-08-11 13:43 ` Sascha Wilde
2004-08-11 14:17 ` Vojtech Pavlik
2004-08-11 13:55 ` David Ford
2004-08-11 20:14 ` Sascha Wilde
[not found] <4112A626.1000706@appliedminds.com>
2004-08-06 8:22 ` David N. Welton
2004-08-06 16:55 ` James Lamanna
2004-08-08 12:18 ` Sascha Wilde
2004-08-08 15:05 ` Dmitry Torokhov
2004-08-11 20:06 ` Sascha Wilde
[not found] <auto-000000462036@appliedminds.com>
2004-08-09 8:28 ` David N. Welton
2004-08-10 9:37 ` Sascha Wilde
2004-08-10 15:38 ` James Lamanna
-- strict thread matches above, loose matches on Subject: below --
2004-08-11 14:14 Dmitry Torokhov
2004-08-11 17:56 ` Sascha Wilde
2004-08-12 17:00 ` David N. Welton
2004-08-12 17:23 ` David N. Welton
2004-08-13 21:29 ` Sascha Wilde
2004-08-12 20:13 ` Vojtech Pavlik
2004-08-13 10:13 ` David N. Welton
2004-08-13 12:03 ` Vojtech Pavlik
2004-08-13 12:58 ` David N. Welton
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=200408110131.14114.dtor_core@ameritech.net \
--to=dtor_core@ameritech.net \
--cc=davidw@eidetix.com \
--cc=linux-kernel@vger.kernel.org \
--cc=wilde@sha-bang.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox