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 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.