linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andries Brouwer <aebr@win.tue.nl>
To: Pete Zaitcev <zaitcev@redhat.com>
Cc: Chris Heath <chris@heathens.co.nz>, linux-kernel@vger.kernel.org
Subject: Re: i8042 problem
Date: Sun, 27 Jul 2003 12:47:26 +0200	[thread overview]
Message-ID: <20030727104726.GA1313@win.tue.nl> (raw)
In-Reply-To: <20030727020621.A11637@devserv.devel.redhat.com>

On Sun, Jul 27, 2003 at 02:06:21AM -0400, Pete Zaitcev wrote:
> > Date: Sat, 26 Jul 2003 21:41:32 -0400
> > From: Chris Heath <chris@heathens.co.nz>
> 
> > > > drivers/input/serio/i8042.c: 00 -> i8042 (kbd-data) [40] 
> > > > drivers/input/serio/i8042.c: 60 -> i8042 (command) [50] 
> > > > drivers/input/serio/i8042.c: 44 -> i8042 (parameter) [50] 
> > > > drivers/input/serio/i8042.c: fa <- i8042 (interrupt, kbd, 1) [51] 
> > > > serio: i8042 KBD port at 0x60,0x64 irq 1 
> > > > <------------- This is it, keyboard is dead. 
> > > 
> > > Writing 44 to the command byte disables IRQ1. 
> > 
> > It looks like a timeout problem.  The ack (fa) arrived 11 ticks after
> > the byte (00) was sent, but it looks like the timeout is only 10 ticks.
> > 
> > Try playing with the timeout in atkbd_sendbyte (line 217 of
> > drivers/input/keyboard/atkbd.c).
> 
> Playing with timeout does not help, but on second thought
> I suspect that atkbd fails to open the port for some reason,
> that's why interrupts stay disabled.

Well, Chris is right, of course.

As I said, writing 44 to the command byte disables IRQ1.
So, the question is, who does that. Read the code:

We do i8042_init, detect a PS/2 keyboard/mouse controller, and call
i8042_port_register() first for mouse, then for keyboard.
This i8042_port_register() does
	serio_register_port(port);
and then happily reports
	printk(KERN_INFO "serio: i8042 %s port at %#lx,%#lx irq %d\n"

This serio_register_port(port) probes connected devices.
It calls atkbd_connect(), which calls atkbd_probe(), and
the latter fails.
Now atkbd_connect() does serio_close() which does
i8042_close() and we see
	i8042_ctr &= ~values->irqen;
	i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR);
that the IRQ is disabled.

So the culprit is the failing of atkbd_probe().
It does a ATKBD_CMD_GETID, but gets no answer, then a
ATKBD_CMD_SETLEDS, and that command fails.
It sends the 0xed, gets an ACK, sends the 0x00 and times out.

And it times out because atkbd_sendbyte has a timeout of 10 msec
while the reply came after 11 msec.

So, apart from other things you might try, it seems to me that
changing the timeout in atkbd_sendbyte from the 10000 that is
there to the 100000 that the comment implies, should help.

Andries


-         int timeout = 10000; /* 100 msec */
+         int timeout = 100000; /* 100 msec */


  reply	other threads:[~2003-07-27 10:32 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-26  6:11 i8042 problem Pete Zaitcev
2003-07-26  9:36 ` Andries Brouwer
2003-07-27  1:41   ` Chris Heath
2003-07-27  6:06     ` Pete Zaitcev
2003-07-27 10:47       ` Andries Brouwer [this message]
2003-07-28  1:55         ` Pete Zaitcev
2003-07-28 11:25           ` Alan Cox
2003-07-28 11:59             ` Andries Brouwer
2003-07-28 14:01               ` Maciej W. Rozycki
2003-07-28 14:54                 ` Andries Brouwer
2003-07-28 15:43                   ` Maciej W. Rozycki
2003-07-28 15:51                     ` Andries Brouwer
2003-07-29 18:29                       ` Maciej W. Rozycki
2003-08-12 20:46                         ` Vojtech Pavlik
2003-08-13 13:44                           ` Maciej W. Rozycki
2003-07-28 16:07             ` Pete Zaitcev
2003-08-12 20:47               ` Vojtech Pavlik
2003-08-12 20:42         ` Vojtech Pavlik
2003-08-12 23:06           ` Andries Brouwer

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=20030727104726.GA1313@win.tue.nl \
    --to=aebr@win.tue.nl \
    --cc=chris@heathens.co.nz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=zaitcev@redhat.com \
    /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;
as well as URLs for NNTP newsgroup(s).