2003-09-28 15:03:27

by Russell King

[permalink] [raw]
Subject: CONFIG_I8042

How can we turn this option off on non-x86 and without selecting
CONFIG_EMBEDDED? It seems that as the configuration files stand,
it is impossible to deselect this option:

config SERIO_I8042
tristate "i8042 PC Keyboard controller" if EMBEDDED || !X86
default y
select SERIO

It seems that in menuconfig, it isn't possible to change this option
either:

x x --- Serial i/o support x x
x x --- i8042 PC Keyboard controller x x
x x <M> Serial port line discipline x x

Maybe "!X86" doesn't mean "not X86 architectures" when it isn't
defined?

This means that all architectures which do not support 8042 get
8042 support forced in them. In my case, this is the result:

Unable to handle kernel NULL pointer dereference at virtual address 00000064
pgd = c0204000
[00000064] *pgd=00000000
Internal error: Oops: c0207005 [#1]
CPU: 0
PC is at i8042_flush+0x20/0x58
LR is at i8042_controller_init+0x14/0x168
pc : [<c0330fc8>] lr : [<c02159cc>] Not tainted
sp : c01e1f84 ip : 00000064 fp : c01e1f90
r10: 00000000 r9 : 00000000 r8 : 00000000
r7 : c021bee4 r6 : 00000000 r5 : c021bec0 r4 : c01e0000
r3 : a0000093 r2 : 0000000c r1 : a0000013 r0 : 00000000
Flags: NzCv IRQs off FIQs on Mode SVC_32 Segment kernel
Control: C020717F Table: C020717F DAC: 0000001D
Process swapper (pid: 1, stack limit = 0xc01e00ec)
Stack: (0xc01e1f84 to 0xc01e2000)
1f80: c01e1fa8 c01e1f94 c02159cc c0330fb4 00000000 c01e0000 c01e1fc4
1fa0: c01e1fac c021606c c02159c4 c01e0000 c021bec0 00000000 c01e1fe4 c01e1fc8
1fc0: c0208774 c0216024 00000000 00000000 00000000 00000000 c01e1ff4 c01e1fe8
1fe0: c021c0a0 c0208738 00000000 c01e1ff8 c023ae48 c021c084 5a5a5a5a 5a5a5a5a
Backtrace:
[<c0330fa8>] (i8042_flush+0x0/0x58) from [<c02159cc>] (i8042_controller_init+0x14/0x168)
[<c02159b8>] (i8042_controller_init+0x0/0x168) from [<c021606c>] (i8042_init+0x54/0x1ac)
[<c0216018>] (i8042_init+0x0/0x1ac) from [<c0208774>] (do_initcalls+0x48/0xb8)
[<c020872c>] (do_initcalls+0x0/0xb8) from [<c021c0a0>] (init+0x28/0xc8)
[<c021c078>] (init+0x0/0xc8) from [<c023ae48>] (do_exit+0x0/0x398)
Code: e10f1000 e3813080 e121f003 e3a0c064 (e5dc3000)
0>Kernel panic: Attempted to kill init!

--
Russell King ([email protected]) http://www.arm.linux.org.uk/personal/
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core


2003-09-28 15:11:10

by Russell King

[permalink] [raw]
Subject: Re: CONFIG_I8042

Correction - it is due to this change:

| --- 1.7/drivers/input/keyboard/Kconfig Fri Sep 19 12:51:31 2003
| +++ 1.8/drivers/input/keyboard/Kconfig Sun Sep 21 03:44:11 2003
| @@ -13,9 +13,9 @@
|
| config KEYBOARD_ATKBD
| tristate "AT keyboard support" if EMBEDDED || !X86
| - default y if INPUT=y && INPUT_KEYBOARD=y && SERIO=y
| - default m
| - depends on INPUT && INPUT_KEYBOARD && SERIO
| + default y
| + depends on INPUT && INPUT_KEYBOARD
| + select SERIO_I8042
| help
| Say Y here if you want to use a standard AT or PS/2 keyboard. Usually
| you'll need this, unless you have a different type keyboard (USB, ADB

If we have an AT Keyboard, that does _NOT_ mean that we have an I8042.

Linus, since you're the owner of this change, how do you want this fixed?
My personal perference is to drop the "select SERIO_I8042" clause since
it makes no sense on non-x86 platforms.

===== drivers/input/keyboard/Kconfig 1.9 vs edited =====
--- 1.9/drivers/input/keyboard/Kconfig Thu Sep 25 04:34:24 2003
+++ edited/drivers/input/keyboard/Kconfig Sun Sep 28 16:10:24 2003
@@ -15,7 +15,6 @@
tristate "AT keyboard support" if EMBEDDED || !X86
default y
depends on INPUT && INPUT_KEYBOARD
- select SERIO_I8042
help
Say Y here if you want to use a standard AT or PS/2 keyboard. Usually
you'll need this, unless you have a different type keyboard (USB, ADB


On Sun, Sep 28, 2003 at 04:03:14PM +0100, Russell King wrote:
> How can we turn this option off on non-x86 and without selecting
> CONFIG_EMBEDDED? It seems that as the configuration files stand,
> it is impossible to deselect this option:
>
> config SERIO_I8042
> tristate "i8042 PC Keyboard controller" if EMBEDDED || !X86
> default y
> select SERIO
>
> It seems that in menuconfig, it isn't possible to change this option
> either:
>
> x x --- Serial i/o support x x
> x x --- i8042 PC Keyboard controller x x
> x x <M> Serial port line discipline x x
>
> Maybe "!X86" doesn't mean "not X86 architectures" when it isn't
> defined?
>
> This means that all architectures which do not support 8042 get
> 8042 support forced in them. In my case, this is the result:
>
> Unable to handle kernel NULL pointer dereference at virtual address 00000064
> pgd = c0204000
> [00000064] *pgd=00000000
> Internal error: Oops: c0207005 [#1]
> CPU: 0
> PC is at i8042_flush+0x20/0x58
> LR is at i8042_controller_init+0x14/0x168
> pc : [<c0330fc8>] lr : [<c02159cc>] Not tainted
> sp : c01e1f84 ip : 00000064 fp : c01e1f90
> r10: 00000000 r9 : 00000000 r8 : 00000000
> r7 : c021bee4 r6 : 00000000 r5 : c021bec0 r4 : c01e0000
> r3 : a0000093 r2 : 0000000c r1 : a0000013 r0 : 00000000
> Flags: NzCv IRQs off FIQs on Mode SVC_32 Segment kernel
> Control: C020717F Table: C020717F DAC: 0000001D
> Process swapper (pid: 1, stack limit = 0xc01e00ec)
> Stack: (0xc01e1f84 to 0xc01e2000)
> 1f80: c01e1fa8 c01e1f94 c02159cc c0330fb4 00000000 c01e0000 c01e1fc4
> 1fa0: c01e1fac c021606c c02159c4 c01e0000 c021bec0 00000000 c01e1fe4 c01e1fc8
> 1fc0: c0208774 c0216024 00000000 00000000 00000000 00000000 c01e1ff4 c01e1fe8
> 1fe0: c021c0a0 c0208738 00000000 c01e1ff8 c023ae48 c021c084 5a5a5a5a 5a5a5a5a
> Backtrace:
> [<c0330fa8>] (i8042_flush+0x0/0x58) from [<c02159cc>] (i8042_controller_init+0x14/0x168)
> [<c02159b8>] (i8042_controller_init+0x0/0x168) from [<c021606c>] (i8042_init+0x54/0x1ac)
> [<c0216018>] (i8042_init+0x0/0x1ac) from [<c0208774>] (do_initcalls+0x48/0xb8)
> [<c020872c>] (do_initcalls+0x0/0xb8) from [<c021c0a0>] (init+0x28/0xc8)
> [<c021c078>] (init+0x0/0xc8) from [<c023ae48>] (do_exit+0x0/0x398)
> Code: e10f1000 e3813080 e121f003 e3a0c064 (e5dc3000)
> 0>Kernel panic: Attempted to kill init!
>
> --
> Russell King ([email protected]) http://www.arm.linux.org.uk/personal/
> Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
> maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
> 2.6 Serial core
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

--
Russell King ([email protected]) http://www.arm.linux.org.uk/personal/
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core

2003-09-28 17:18:34

by Michael Frank

[permalink] [raw]
Subject: Re: CONFIG_I8042

On Sunday 28 September 2003 23:03, Russell King wrote:
> How can we turn this option off on non-x86 and without selecting
> CONFIG_EMBEDDED? It seems that as the configuration files stand,
> it is impossible to deselect this option:
>
> config SERIO_I8042
> tristate "i8042 PC Keyboard controller" if EMBEDDED || !X86
> default y
> select SERIO
>
> It seems that in menuconfig, it isn't possible to change this option
> either:
>
> x x --- Serial i/o support x x
> x x --- i8042 PC Keyboard controller x x
> x x <M> Serial port line discipline x x
>
> Maybe "!X86" doesn't mean "not X86 architectures" when it isn't
> defined?

Yeah, to make X86 under-donkey proof...

One can't make i8042 a module either.

Michael

2003-09-28 17:33:50

by Michael Frank

[permalink] [raw]
Subject: Re: CONFIG_I8042

On Sunday 28 September 2003 23:10, Russell King wrote:

> Correction - it is due to this change:
>
> | --- 1.7/drivers/input/keyboard/Kconfig Fri Sep 19 12:51:31 2003
> | +++ 1.8/drivers/input/keyboard/Kconfig Sun Sep 21 03:44:11 2003
> | @@ -13,9 +13,9 @@
> |
> | config KEYBOARD_ATKBD
> | tristate "AT keyboard support" if EMBEDDED || !X86
> | - default y if INPUT=y && INPUT_KEYBOARD=y && SERIO=y
> | - default m
> | - depends on INPUT && INPUT_KEYBOARD && SERIO
> | + default y
> | + depends on INPUT && INPUT_KEYBOARD
> | + select SERIO_I8042
> | help
> | Say Y here if you want to use a standard AT or PS/2 keyboard. Usually
> | you'll need this, unless you have a different type keyboard (USB, ADB
>

Could there be another menu to select system type when x86

-Standard-PC EMBEDDED=0 X86=1, MMU=1, VID16=1, SBUS=0, GENERIC_ISA_DMA=1

Use this for ease of configuration in most PC applications.

-Custom-PC EMBEDDED=0 X86=0, MMU=1, VID16=1, SBUS=0, GENERIC_ISA_DMA=1

Use this in specialized PC applications to enable less
frequently used configuration options.
Beware that this requires more intricate knowledge of PC
hardware and the kernel subsystems

-Embedded EMBEDDED=1 X86=0, MMU=user, VID16=user, SBUS=user, GENERIC_ISA_DMA=user

Use this option when running the kernel on an embedded system to
maximize configuration capability. This option is generally unsuitable
in PC applications.

Regards
Michael

2003-09-28 18:37:30

by Linus Torvalds

[permalink] [raw]
Subject: Re: CONFIG_I8042


On Sun, 28 Sep 2003, Russell King wrote:
>
> If we have an AT Keyboard, that does _NOT_ mean that we have an I8042.

Well, it does require us to have at least SERIO. Also, we need to have
some way to make sure that I8042 does get selected on a PC.

Apart from that, it doesn't matter how it's solved..

Linus

2003-09-28 18:49:53

by Linus Torvalds

[permalink] [raw]
Subject: Re: CONFIG_I8042


On Sun, 28 Sep 2003, Russell King wrote:
>
> It appears that "select" doesn't accept conditionals as the kconfig
> language stands - jejb also ran into this issue, and tried various
> ways around. The only solution which seems to work is to remove this
> select line entirely.

That is WRONG.

At least it should unconditionally select "SERIO", since the damn driver
won't link without it.

The fact that it also requires a I8042 driver to actually _work_ on a PC
is a separate issue, but one that needs to also be resolved some way.

Linus

2003-09-28 18:45:22

by Russell King

[permalink] [raw]
Subject: Re: CONFIG_I8042

On Sun, Sep 28, 2003 at 11:37:18AM -0700, Linus Torvalds wrote:
> On Sun, 28 Sep 2003, Russell King wrote:
> > If we have an AT Keyboard, that does _NOT_ mean that we have an I8042.
>
> Well, it does require us to have at least SERIO. Also, we need to have
> some way to make sure that I8042 does get selected on a PC.
>
> Apart from that, it doesn't matter how it's solved..

It appears that "select" doesn't accept conditionals as the kconfig
language stands - jejb also ran into this issue, and tried various
ways around. The only solution which seems to work is to remove this
select line entirely.

Maybe RZ can comment further.

(Problem Summary: several architectures need to be able to select
KEYBOARD_ATKBD without automatically selecting I8042.)

--
Russell King ([email protected]) http://www.arm.linux.org.uk/personal/
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core

2003-09-28 19:21:48

by Roman Zippel

[permalink] [raw]
Subject: Re: CONFIG_I8042

Hi,

On Sun, 28 Sep 2003, Russell King wrote:

> > Well, it does require us to have at least SERIO. Also, we need to have
> > some way to make sure that I8042 does get selected on a PC.
> >
> > Apart from that, it doesn't matter how it's solved..
>
> It appears that "select" doesn't accept conditionals as the kconfig
> language stands - jejb also ran into this issue, and tried various
> ways around. The only solution which seems to work is to remove this
> select line entirely.

What did you try? E.g. "select SERIO_I8042 if !EMBEDDED && X86" works fine
here.

bye, Roman

2003-09-28 19:15:23

by Russell King

[permalink] [raw]
Subject: Re: CONFIG_I8042

On Sun, Sep 28, 2003 at 11:49:45AM -0700, Linus Torvalds wrote:
>
> On Sun, 28 Sep 2003, Russell King wrote:
> >
> > It appears that "select" doesn't accept conditionals as the kconfig
> > language stands - jejb also ran into this issue, and tried various
> > ways around. The only solution which seems to work is to remove this
> > select line entirely.
>
> That is WRONG.

I don't think you've interpreted what I've said correctly. I'm not
arguing at all about SERIO itself. In fact, I completely agree that
selecting KEYBOARD_ATKBD should automatically select SERIO since
atkbd.c uses serio.c.

The information I received today from James Bottomley, who is also
seeing this issue, is that the following construct resulted in
I8042 being unconditionally selected:

config KEYBOARD_ATKBD
...
select SERIO
select SERIO_I8042 if X86

However, I've just decided to try it myself, and it does indeed work
as expected. Here's a (tested on non-x86) patch which fixes this issue
and gives us the correct behaviour for non-x86 platforms, and should
also give the desired behaviour for x86 and embedded platforms.

--- orig/drivers/input/keyboard/Kconfig Sun Sep 28 09:54:29 2003
+++ linux/drivers/input/keyboard/Kconfig Sun Sep 28 20:06:40 2003
@@ -15,7 +15,8 @@
tristate "AT keyboard support" if EMBEDDED || !X86
default y
depends on INPUT && INPUT_KEYBOARD
- select SERIO_I8042
+ select SERIO
+ select SERIO_I8042 if !EMBEDDED && X86
help
Say Y here if you want to use a standard AT or PS/2 keyboard. Usually
you'll need this, unless you have a different type keyboard (USB, ADB


--
Russell King ([email protected]) http://www.arm.linux.org.uk/personal/
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core

2003-09-28 19:30:39

by Russell King

[permalink] [raw]
Subject: Re: CONFIG_I8042

On Sun, Sep 28, 2003 at 09:21:15PM +0200, Roman Zippel wrote:
> What did you try? E.g. "select SERIO_I8042 if !EMBEDDED && X86" works fine
> here.

My information concerning this aspect of the problem came from jejb -
I should have verified it myself before posting.

--
Russell King ([email protected]) http://www.arm.linux.org.uk/personal/
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core