Re: i2c-related 1-minute hang during bootup



Hi Karel,

I upgraded my kernel from 2.6.12 to 2.6.16.11 using make oldconfig.
My machine is DELL Inspiron 510m laptop. Before everything was OK.
Now the kernel hangs for a minute during bootup between the messages
"input: AlpsPS/2 ALPS GlidePoint as /class/input/input2"
and "Advanced Linux Sound Architecture Driver Version 1.0.11rc2 (Wed Jan
04 08:57:20 2006 UTC)."

I'd suggest that you read the following thread, which relates a very
similar story:
http://marc.theaimsgroup.com/?t=114224591800003&r=1&w=2
http://marc.theaimsgroup.com/?t=114360452300050&r=1&w=2

During the bootup nothing is printed during the hang, but dmesg contains
this at that point:
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x51
i2c_adapter i2c-0: master_xfer[0] W, addr=0x51, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x52
i2c_adapter i2c-0: master_xfer[0] W, addr=0x52, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x53
i2c_adapter i2c-0: master_xfer[0] W, addr=0x53, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x54
i2c_adapter i2c-0: master_xfer[0] W, addr=0x54, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x55
i2c_adapter i2c-0: master_xfer[0] W, addr=0x55, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x56
i2c_adapter i2c-0: master_xfer[0] W, addr=0x56, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x57
i2c_adapter i2c-0: master_xfer[0] W, addr=0x57, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c-core: driver [pcf8574] registered
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x20
i2c_adapter i2c-0: master_xfer[0] W, addr=0x20, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x21
i2c_adapter i2c-0: master_xfer[0] W, addr=0x21, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x22
i2c_adapter i2c-0: master_xfer[0] W, addr=0x22, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x23
i2c_adapter i2c-0: master_xfer[0] W, addr=0x23, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x24
i2c_adapter i2c-0: master_xfer[0] W, addr=0x24, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x25
i2c_adapter i2c-0: master_xfer[0] W, addr=0x25, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x26
i2c_adapter i2c-0: master_xfer[0] W, addr=0x26, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x27
i2c_adapter i2c-0: master_xfer[0] W, addr=0x27, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x38
i2c_adapter i2c-0: master_xfer[0] W, addr=0x38, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x39
i2c_adapter i2c-0: master_xfer[0] W, addr=0x39, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x3a
i2c_adapter i2c-0: master_xfer[0] W, addr=0x3a, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x3b
i2c_adapter i2c-0: master_xfer[0] W, addr=0x3b, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x3c
i2c_adapter i2c-0: master_xfer[0] W, addr=0x3c, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x3d
i2c_adapter i2c-0: master_xfer[0] W, addr=0x3d, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x3e
i2c_adapter i2c-0: master_xfer[0] W, addr=0x3e, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x3f
i2c_adapter i2c-0: master_xfer[0] W, addr=0x3f, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c-core: driver [pcf8591] registered
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x48
i2c_adapter i2c-0: master_xfer[0] W, addr=0x48, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x49
i2c_adapter i2c-0: master_xfer[0] W, addr=0x49, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x4a
i2c_adapter i2c-0: master_xfer[0] W, addr=0x4a, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x4b
i2c_adapter i2c-0: master_xfer[0] W, addr=0x4b, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x4c
i2c_adapter i2c-0: master_xfer[0] W, addr=0x4c, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x4d
i2c_adapter i2c-0: master_xfer[0] W, addr=0x4d, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x4e
i2c_adapter i2c-0: master_xfer[0] W, addr=0x4e, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x4f
i2c_adapter i2c-0: master_xfer[0] W, addr=0x4f, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff
i2c-core: driver [RTC8564] registered
i2c_adapter i2c-0: found normal entry for adapter 0, addr 0x51
i2c_adapter i2c-0: master_xfer[0] W, addr=0x51, len=0
i2c_adapter i2c-0: bus is not idle. status is 0xff

Is it normal that the kernel doesn't print all messages to the screen?

Yes. These are debugging messages, and you only see info and higher
level messages on the console.

What do these messages mean? What should I do to get rid of the delay?

The "bus is not idle" messages are from i2c-algo-pca, which itself is
only used by i2c-pca-isa, so you must have compiled it into your
kernel. The other messages are from i2c-core, and suggest that you have
the eeprom, pcf8574, pcf8591 and rtc8564 drivers compiled in as well.

The problem is that you don't have any of these devices. The
i2c-pca-isa device is almost undetectable, so the driver will register
one nevertheless, and then any access to it will fail after a timeout.
Due to the number of i2c chip drivers which you also compiled in, there
are many such accesses at boot time (when trying to detect the chips),
which cumulated give you the one minute delay you observe.

So, you should simply fix your kernel configuration. In the I2C support
section, say N to "PCA9564 on an ISA bus", "Philips PCF8574 and
PCF8574A", "Philips PCF8591" and "Epson 8564 RTC chip". In fact, don't
say Y to any I2C bus or chip driver unless you know for sure that you
have that device (and even then, M is usually prefered). This should
solve the long boot delay.

I'll submit a patch to let the user know about the problem in the
i2c-pca-isa Kconfig help text.

--
Jean Delvare
-
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/



Relevant Pages