Re: 2.6 kernel won't reboot on AMD system - 8042 problem?

From: David N. Welton
Date: Fri Aug 13 2004 - 07:59:42 EST


Vojtech Pavlik wrote:

Now I think the problem lies in that that on your i8042 issuing a
command doesn't clear the AUXDATA bit. It's only cleared by data from
the keyboard.

This is likely a bug in you i8042 firmware (or hw, if it's just an
ASIC).

Well, that has always seemed likely to me, given that rebooting without a keyboard is something that works on pretty much everyone else's machines! But to some degree the bug ought to be worked around.

I suppose we can get rid of the checking of data source and negation and
be done with it.

That helps, but there are still situation(s?) where it's not a complete solution. It's good enough for what I need, though.

Starting with no keyboard, plug one in:

$ drivers/input/serio/i8042.c: aa <- i8042 (interrupt, aux, 0) [161928]

drivers/input/serio/i8042.c: 60 -> i8042 (command) [162009]

drivers/input/serio/i8042.c: 46 -> i8042 (parameter) [162009]

drivers/input/serio/i8042.c: d4 -> i8042 (command) [162151]

drivers/input/serio/i8042.c: f2 -> i8042 (parameter) [162151]

drivers/input/serio/i8042.c: fe <- i8042 (interrupt, aux, 0) [162343]

drivers/input/serio/i8042.c: d4 -> i8042 (command) [162424]

drivers/input/serio/i8042.c: ed -> i8042 (parameter) [162424]

drivers/input/serio/i8042.c: fe <- i8042 (interrupt, aux, 0) [162616]

drivers/input/serio/i8042.c: 60 -> i8042 (command) [162697]

drivers/input/serio/i8042.c: 44 -> i8042 (parameter) [162697]

drivers/input/serio/i8042.c: aa <- i8042 (interrupt, aux, 0) [162989]

drivers/input/serio/i8042.c: 60 -> i8042 (command) [163070]

drivers/input/serio/i8042.c: 46 -> i8042 (parameter) [163070]

drivers/input/serio/i8042.c: d4 -> i8042 (command) [163212]

drivers/input/serio/i8042.c: f2 -> i8042 (parameter) [163212]

drivers/input/serio/i8042.c: fa <- i8042 (interrupt, kbd, 0) [163404]

drivers/input/serio/i8042.c: ab <- i8042 (interrupt, kbd, 0) [163485]

drivers/input/serio/i8042.c: 41 <- i8042 (interrupt, kbd, 0) [163566]

drivers/input/serio/i8042.c: d4 -> i8042 (command) [163792]

drivers/input/serio/i8042.c: ed -> i8042 (parameter) [163792]

drivers/input/serio/i8042.c: fa <- i8042 (interrupt, kbd, 0) [163983]

drivers/input/serio/i8042.c: 60 -> i8042 (command) [164209]

drivers/input/serio/i8042.c: 44 -> i8042 (parameter) [164209]

Oops, it doesn't respond to anything... We unplug it and plug it back in again. This time it's ok:

$ drivers/input/serio/i8042.c: aa <- i8042 (interrupt, kbd, 0) [191951]

drivers/input/serio/i8042.c: 60 -> i8042 (command) [192032]

drivers/input/serio/i8042.c: 45 -> i8042 (parameter) [192032]

drivers/input/serio/i8042.c: f2 -> i8042 (kbd-data) [192174]

drivers/input/serio/i8042.c: fa <- i8042 (interrupt, kbd, 1) [192247]

drivers/input/serio/i8042.c: ab <- i8042 (interrupt, kbd, 1) [192329]

drivers/input/serio/i8042.c: 41 <- i8042 (interrupt, kbd, 1) [192410]

drivers/input/serio/i8042.c: ed -> i8042 (kbd-data) [192491]

drivers/input/serio/i8042.c: fa <- i8042 (interrupt, kbd, 1) [192565]

drivers/input/serio/i8042.c: 00 -> i8042 (kbd-data) [192646]

drivers/input/serio/i8042.c: fa <- i8042 (interrupt, kbd, 1) [192719]

drivers/input/serio/i8042.c: f3 -> i8042 (kbd-data) [192801]

drivers/input/serio/i8042.c: fa <- i8042 (interrupt, kbd, 1) [192874]

drivers/input/serio/i8042.c: 00 -> i8042 (kbd-data) [192956]

drivers/input/serio/i8042.c: fa <- i8042 (interrupt, kbd, 1) [193029]

drivers/input/serio/i8042.c: f4 -> i8042 (kbd-data) [193110]

drivers/input/serio/i8042.c: fa <- i8042 (interrupt, kbd, 1) [193184]

input: AT Translated Set 2 keyboard on isa0060/serio0

This, because it checks in i8042_interrupt to see if the nefarious STR_AUXDATA is set, which it is... According to your hypothesis, plugging the keyboard in and hitting a few keys would have cleared the AUXDATA bit, so the next time around it works fine.

Thanks,
--
David N. Welton
davidw@xxxxxxxxxxx
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/