2007-01-04 00:53:52

by Stephen Hemminger

[permalink] [raw]
Subject: Why to I2c drivers not autoload like other PCI devices?

Is there some missing magic (udev rule?) that keeps i2c device modules
from loading? For example: the Intel i2c-i801 module ought to get loaded
automatically on boot up since it has a set of PCI id's that generate
the necessary module aliases. It would be better if I2C device's autoloaded
like other PCI devices.


--
Stephen Hemminger <[email protected]>


2007-01-04 00:56:41

by Greg KH

[permalink] [raw]
Subject: Re: Why to I2c drivers not autoload like other PCI devices?

On Wed, Jan 03, 2007 at 04:50:20PM -0800, Stephen Hemminger wrote:
> Is there some missing magic (udev rule?) that keeps i2c device modules
> from loading? For example: the Intel i2c-i801 module ought to get loaded
> automatically on boot up since it has a set of PCI id's that generate
> the necessary module aliases. It would be better if I2C device's autoloaded
> like other PCI devices.

No, it should autoload, if it has a MODULE_DEVICE_TABLE() in it. In
fact, the i2c-i801 autoloads on one of my machines just fine. Are you
sure your pci ids match properly?

thanks,

greg k-h

2007-01-04 01:33:19

by Stephen Hemminger

[permalink] [raw]
Subject: Re: Why to I2c drivers not autoload like other PCI devices?

On Wed, 3 Jan 2007 16:56:00 -0800
Greg KH <[email protected]> wrote:

> On Wed, Jan 03, 2007 at 04:50:20PM -0800, Stephen Hemminger wrote:
> > Is there some missing magic (udev rule?) that keeps i2c device modules
> > from loading? For example: the Intel i2c-i801 module ought to get loaded
> > automatically on boot up since it has a set of PCI id's that generate
> > the necessary module aliases. It would be better if I2C device's autoloaded
> > like other PCI devices.
>
> No, it should autoload, if it has a MODULE_DEVICE_TABLE() in it. In
> fact, the i2c-i801 autoloads on one of my machines just fine. Are you
> sure your pci ids match properly?
>
> thanks,
>
> greg k-h

This laptop is running Ubuntu Edgy (6.10) and it doesn't autoload.
Everything works fine if I manually load the module with modprobe.

This device should match:

00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)
00: 86 80 da 27 01 00 80 02 02 00 05 0c 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: a1 18 00 00 00 00 00 00 00 00 00 00 cf 10 88 13
30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 02 00 00

This driver modinfo:

filename: /lib/modules/2.6.20-rc3/kernel/drivers/i2c/busses/i2c-i801.ko
author: Frodo Looijaard <[email protected]>, Philip Edelbrock <[email protected]>, and Mark D. Studebaker <[email protected]>
description: I801 SMBus driver
license: GPL
vermagic: 2.6.20-rc3 mod_unload PENTIUMM 4KSTACKS
depends: i2c-core
alias: pci:v00008086d00002413sv*sd*bc*sc*i*
alias: pci:v00008086d00002423sv*sd*bc*sc*i*
alias: pci:v00008086d00002443sv*sd*bc*sc*i*
alias: pci:v00008086d00002483sv*sd*bc*sc*i*
alias: pci:v00008086d000024C3sv*sd*bc*sc*i*
alias: pci:v00008086d000024D3sv*sd*bc*sc*i*
alias: pci:v00008086d000025A4sv*sd*bc*sc*i*
alias: pci:v00008086d0000266Asv*sd*bc*sc*i*
alias: pci:v00008086d000027DAsv*sd*bc*sc*i* <------- should match
alias: pci:v00008086d0000269Bsv*sd*bc*sc*i*
alias: pci:v00008086d0000283Esv*sd*bc*sc*i*
alias: pci:v00008086d00002930sv*sd*bc*sc*i*

Table in drivers/i2c/busses/i2c-i801.c

static struct pci_device_id i801_ids[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_3) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_3) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_2) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_3) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_3) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_3) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_4) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_16) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) }, <------ should match
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
{ 0, }
};

MODULE_DEVICE_TABLE (pci, i801_ids);




--
Stephen Hemminger <[email protected]>

2007-01-04 05:52:08

by Greg KH

[permalink] [raw]
Subject: Re: Why to I2c drivers not autoload like other PCI devices?

On Wed, Jan 03, 2007 at 05:29:16PM -0800, Stephen Hemminger wrote:
> On Wed, 3 Jan 2007 16:56:00 -0800
> Greg KH <[email protected]> wrote:
>
> > On Wed, Jan 03, 2007 at 04:50:20PM -0800, Stephen Hemminger wrote:
> > > Is there some missing magic (udev rule?) that keeps i2c device modules
> > > from loading? For example: the Intel i2c-i801 module ought to get loaded
> > > automatically on boot up since it has a set of PCI id's that generate
> > > the necessary module aliases. It would be better if I2C device's autoloaded
> > > like other PCI devices.
> >
> > No, it should autoload, if it has a MODULE_DEVICE_TABLE() in it. In
> > fact, the i2c-i801 autoloads on one of my machines just fine. Are you
> > sure your pci ids match properly?
> >
> > thanks,
> >
> > greg k-h
>
> This laptop is running Ubuntu Edgy (6.10) and it doesn't autoload.
> Everything works fine if I manually load the module with modprobe.
>
> This device should match:
>
> 00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)
> 00: 86 80 da 27 01 00 80 02 02 00 05 0c 00 00 00 00
> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 20: a1 18 00 00 00 00 00 00 00 00 00 00 cf 10 88 13
> 30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 02 00 00
>
> This driver modinfo:
>
> filename: /lib/modules/2.6.20-rc3/kernel/drivers/i2c/busses/i2c-i801.ko

What does:
modprobe --show-depends `cat /sys/bus/pci/0000:00:1f.3/modalias`
show?

Is it different from:
modprobe --config /dev/null --show-depends `cat /sys/bus/pci/0000:00:1f.3/modalias`
?

> author: Frodo Looijaard <[email protected]>, Philip Edelbrock <[email protected]>, and Mark D. Studebaker <[email protected]>
> description: I801 SMBus driver
> license: GPL
> vermagic: 2.6.20-rc3 mod_unload PENTIUMM 4KSTACKS
> depends: i2c-core
> alias: pci:v00008086d00002413sv*sd*bc*sc*i*
> alias: pci:v00008086d00002423sv*sd*bc*sc*i*
> alias: pci:v00008086d00002443sv*sd*bc*sc*i*
> alias: pci:v00008086d00002483sv*sd*bc*sc*i*
> alias: pci:v00008086d000024C3sv*sd*bc*sc*i*
> alias: pci:v00008086d000024D3sv*sd*bc*sc*i*
> alias: pci:v00008086d000025A4sv*sd*bc*sc*i*
> alias: pci:v00008086d0000266Asv*sd*bc*sc*i*
> alias: pci:v00008086d000027DAsv*sd*bc*sc*i* <------- should match

Yeah, I would think so. What does:
cat /sys/bus/pci/0000:00:1f.3/modalias
show?

thanks,

greg k-h

2007-01-04 16:54:17

by Jean Delvare

[permalink] [raw]
Subject: Re: [i2c] Why to I2c drivers not autoload like other PCI devices?

On Wed, 3 Jan 2007 21:51:28 -0800, Greg KH wrote:
> On Wed, Jan 03, 2007 at 05:29:16PM -0800, Stephen Hemminger wrote:
> > On Wed, 3 Jan 2007 16:56:00 -0800
> > Greg KH <[email protected]> wrote:
> >
> > > On Wed, Jan 03, 2007 at 04:50:20PM -0800, Stephen Hemminger wrote:
> > > > Is there some missing magic (udev rule?) that keeps i2c device modules
> > > > from loading? For example: the Intel i2c-i801 module ought to get loaded
> > > > automatically on boot up since it has a set of PCI id's that generate
> > > > the necessary module aliases. It would be better if I2C device's autoloaded
> > > > like other PCI devices.
> > >
> > > No, it should autoload, if it has a MODULE_DEVICE_TABLE() in it. In
> > > fact, the i2c-i801 autoloads on one of my machines just fine. Are you
> > > sure your pci ids match properly?
> > >
> > > thanks,
> > >
> > > greg k-h
> >
> > This laptop is running Ubuntu Edgy (6.10) and it doesn't autoload.
> > Everything works fine if I manually load the module with modprobe.
> >
> > This device should match:
> >
> > 00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)
> > 00: 86 80 da 27 01 00 80 02 02 00 05 0c 00 00 00 00
> > 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > 20: a1 18 00 00 00 00 00 00 00 00 00 00 cf 10 88 13
> > 30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 02 00 00
> >
> > This driver modinfo:
> >
> > filename: /lib/modules/2.6.20-rc3/kernel/drivers/i2c/busses/i2c-i801.ko
>
> What does:
> modprobe --show-depends `cat /sys/bus/pci/0000:00:1f.3/modalias`
> show?

Greg really means:
modprobe --show-depends `cat /sys/bus/pci/devices/0000:00:1f.3/modalias`
and same for the other commands below.

>
> Is it different from:
> modprobe --config /dev/null --show-depends `cat /sys/bus/pci/0000:00:1f.3/modalias`
> ?
>
> > author: Frodo Looijaard <[email protected]>, Philip Edelbrock <[email protected]>, and Mark D. Studebaker <[email protected]>
> > description: I801 SMBus driver
> > license: GPL
> > vermagic: 2.6.20-rc3 mod_unload PENTIUMM 4KSTACKS
> > depends: i2c-core
> > alias: pci:v00008086d00002413sv*sd*bc*sc*i*
> > alias: pci:v00008086d00002423sv*sd*bc*sc*i*
> > alias: pci:v00008086d00002443sv*sd*bc*sc*i*
> > alias: pci:v00008086d00002483sv*sd*bc*sc*i*
> > alias: pci:v00008086d000024C3sv*sd*bc*sc*i*
> > alias: pci:v00008086d000024D3sv*sd*bc*sc*i*
> > alias: pci:v00008086d000025A4sv*sd*bc*sc*i*
> > alias: pci:v00008086d0000266Asv*sd*bc*sc*i*
> > alias: pci:v00008086d000027DAsv*sd*bc*sc*i* <------- should match
>
> Yeah, I would think so. What does:
> cat /sys/bus/pci/0000:00:1f.3/modalias
> show?
>
> thanks,
>
> greg k-h
>
> _______________________________________________
> i2c mailing list
> [email protected]
> http://lists.lm-sensors.org/mailman/listinfo/i2c


--
Jean Delvare

2007-01-04 17:58:30

by Stephen Hemminger

[permalink] [raw]
Subject: Re: [i2c] Why to I2c drivers not autoload like other PCI devices?

On Thu, 4 Jan 2007 17:54:12 +0100
Jean Delvare <[email protected]> wrote:

> On Wed, 3 Jan 2007 21:51:28 -0800, Greg KH wrote:
> > On Wed, Jan 03, 2007 at 05:29:16PM -0800, Stephen Hemminger wrote:
> > > On Wed, 3 Jan 2007 16:56:00 -0800
> > > Greg KH <[email protected]> wrote:
> > >
> > > > On Wed, Jan 03, 2007 at 04:50:20PM -0800, Stephen Hemminger wrote:
> > > > > Is there some missing magic (udev rule?) that keeps i2c device modules
> > > > > from loading? For example: the Intel i2c-i801 module ought to get loaded
> > > > > automatically on boot up since it has a set of PCI id's that generate
> > > > > the necessary module aliases. It would be better if I2C device's autoloaded
> > > > > like other PCI devices.
> > > >
> > > > No, it should autoload, if it has a MODULE_DEVICE_TABLE() in it. In
> > > > fact, the i2c-i801 autoloads on one of my machines just fine. Are you
> > > > sure your pci ids match properly?
> > > >
> > > > thanks,
> > > >
> > > > greg k-h
> > >
> > > This laptop is running Ubuntu Edgy (6.10) and it doesn't autoload.
> > > Everything works fine if I manually load the module with modprobe.
> > >
> > > This device should match:
> > >
> > > 00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)
> > > 00: 86 80 da 27 01 00 80 02 02 00 05 0c 00 00 00 00
> > > 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > > 20: a1 18 00 00 00 00 00 00 00 00 00 00 cf 10 88 13
> > > 30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 02 00 00
> > >
> > > This driver modinfo:
> > >
> > > filename: /lib/modules/2.6.20-rc3/kernel/drivers/i2c/busses/i2c-i801.ko
> >
> > What does:
> > modprobe --show-depends `cat /sys/bus/pci/0000:00:1f.3/modalias`
> > show?
>
> Greg really means:
> modprobe --show-depends `cat /sys/bus/pci/devices/0000:00:1f.3/modalias`
> and same for the other commands below.


Ahak
$ modprobe --show-depends `cat /sys/bus/pci/devices/0000:00:1f.3/modalias`
WARNING: Not loading blacklisted module i2c_i801
FATAL: Module pci:v00008086d000027DAsv000010CFsd00001388bc0Csc05i00 not found.

And the blacklist entry is:

# causes failure to suspend on HP compaq nc6000 (Ubuntu: #10306)
blacklist i2c_i801

Looks like Ubuntu decided to wallpaper over a problem rather than fixing it

2007-01-04 19:32:55

by Greg KH

[permalink] [raw]
Subject: Re: [i2c] Why to I2c drivers not autoload like other PCI devices?

On Thu, Jan 04, 2007 at 09:54:12AM -0800, Stephen Hemminger wrote:
> On Thu, 4 Jan 2007 17:54:12 +0100
> Jean Delvare <[email protected]> wrote:
>
> > On Wed, 3 Jan 2007 21:51:28 -0800, Greg KH wrote:
> > > On Wed, Jan 03, 2007 at 05:29:16PM -0800, Stephen Hemminger wrote:
> > > > On Wed, 3 Jan 2007 16:56:00 -0800
> > > > Greg KH <[email protected]> wrote:
> > > >
> > > > > On Wed, Jan 03, 2007 at 04:50:20PM -0800, Stephen Hemminger wrote:
> > > > > > Is there some missing magic (udev rule?) that keeps i2c device modules
> > > > > > from loading? For example: the Intel i2c-i801 module ought to get loaded
> > > > > > automatically on boot up since it has a set of PCI id's that generate
> > > > > > the necessary module aliases. It would be better if I2C device's autoloaded
> > > > > > like other PCI devices.
> > > > >
> > > > > No, it should autoload, if it has a MODULE_DEVICE_TABLE() in it. In
> > > > > fact, the i2c-i801 autoloads on one of my machines just fine. Are you
> > > > > sure your pci ids match properly?
> > > > >
> > > > > thanks,
> > > > >
> > > > > greg k-h
> > > >
> > > > This laptop is running Ubuntu Edgy (6.10) and it doesn't autoload.
> > > > Everything works fine if I manually load the module with modprobe.
> > > >
> > > > This device should match:
> > > >
> > > > 00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)
> > > > 00: 86 80 da 27 01 00 80 02 02 00 05 0c 00 00 00 00
> > > > 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > > > 20: a1 18 00 00 00 00 00 00 00 00 00 00 cf 10 88 13
> > > > 30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 02 00 00
> > > >
> > > > This driver modinfo:
> > > >
> > > > filename: /lib/modules/2.6.20-rc3/kernel/drivers/i2c/busses/i2c-i801.ko
> > >
> > > What does:
> > > modprobe --show-depends `cat /sys/bus/pci/0000:00:1f.3/modalias`
> > > show?
> >
> > Greg really means:
> > modprobe --show-depends `cat /sys/bus/pci/devices/0000:00:1f.3/modalias`
> > and same for the other commands below.
>
>
> Ahak
> $ modprobe --show-depends `cat /sys/bus/pci/devices/0000:00:1f.3/modalias`
> WARNING: Not loading blacklisted module i2c_i801
> FATAL: Module pci:v00008086d000027DAsv000010CFsd00001388bc0Csc05i00 not found.
>
> And the blacklist entry is:
>
> # causes failure to suspend on HP compaq nc6000 (Ubuntu: #10306)
> blacklist i2c_i801
>
> Looks like Ubuntu decided to wallpaper over a problem rather than fixing it

I figured it was something like that, not a kernel issue at all :)

good luck convincing ubuntu to remove the blacklist.

greg k-h

2007-01-04 20:47:27

by Jean Delvare

[permalink] [raw]
Subject: Re: [i2c] Why to I2c drivers not autoload like other PCI devices?

Hi Greg, Stephen,

On Thu, 4 Jan 2007 11:32:20 -0800, Greg KH wrote:
> On Thu, Jan 04, 2007 at 09:54:12AM -0800, Stephen Hemminger wrote:
> > Ahak
> > $ modprobe --show-depends `cat /sys/bus/pci/devices/0000:00:1f.3/modalias`
> > WARNING: Not loading blacklisted module i2c_i801
> > FATAL: Module pci:v00008086d000027DAsv000010CFsd00001388bc0Csc05i00 not found.
> >
> > And the blacklist entry is:
> >
> > # causes failure to suspend on HP compaq nc6000 (Ubuntu: #10306)
> > blacklist i2c_i801
> >
> > Looks like Ubuntu decided to wallpaper over a problem rather than fixing it
>
> I figured it was something like that, not a kernel issue at all :)
>
> good luck convincing ubuntu to remove the blacklist.

This is the same bug as:
http://bugzilla.kernel.org/show_bug.cgi?id=6449

Which should be "fixed" since 2.6.17 (and late 2.6.16.y), because the
SMBus unhiding quirk which this laptop needs was disabled when the
kernel is built with suspend support. The real fix was provided by Alan
Cox and will be in 2.6.20 if anyone could try the RCs and report.

So the blacklisting should no longer be necessary for any version of
Ubuntu which comes with a kernel >= 2.6.16.18.

--
Jean Delvare