[U-Boot] OMAP3 i2c issues on IGEP, u-boot 2013.10

Thomas Petazzoni
2013-11-27T12:19:29Z

Hello,

We've recently updated from u-boot 2013.04 to u-boot 2013.10 on our
IGEP boards (OMAP3 based, U-Boot shows "OMAP36XX/37XX-GP ES1.2"), and
we're seeing random I2C communication problems at startup.

Most of the time it's just:

"""
Out: serial
Err: serial
i2c_write: pads on bus 0 probably not configured (status=0x10)
Could not write grp_sel to reg 96 (2)
Die ID #500400029ff800000168300f0701b011
"""

and the boot goes on fine.

But sometimes it's something like the below (which goes on
indefinitely, preventing the platform from booting):

"""
NAND: 512 MiB
MMC: OMAP SD/MMC: 0
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_write: pads on bus 0 probably not configured (status=0x10)
i2c_read (addr phase): pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Read[0xfd] Error 2
i2c_write: pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Write[0xfd] Error 2
i2c_read (addr phase): pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Read[0xfe] Error 2
i2c_write: pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Write[0xfe] Error 2
i2c_read (addr phase): pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Read[0xfe] Error 2
i2c_write: pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Write[0xfe] Error 2
i2c_read (addr phase): pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Read[0xff] Error 2
i2c_read (addr phase): pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Read[0xff] Error 2
i2c_read (addr phase): pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Read[0xff] Error 2
i2c_read (addr phase): pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Read[0xff] Error 2
i2c_read (addr phase): pads on bus 0 probably not configured (status=0x10)
[... more of these indefinitely ...]
"""

or it can be *some* error messages, but the boot goes on:

"""
NAND: 512 MiB
MMC: OMAP SD/MMC: 0
i2c_write: pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Write[0x6] Error 2
i2c_write: pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Write[0x6] Error 2
i2c_read (addr phase): pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Read[0xfe] Error 2
i2c_write: pads on bus 0 probably not configured (status=0x10)
TWL4030:USB:Write[0xfe] Error 2
In: serial
Out: serial
Err: serial
i2c_write: pads on bus 0 probably not configured (status=0x10)
Could not write vsel to reg 7d (2)
i2c_write: pads on bus 0 probably not configured (status=0x10)
Could not write vsel to reg 91 (2)
i2c_write: pads on bus 0 probably not configured (status=0x10)
Could not write vsel to reg 99 (2)
Die ID #500400029ff800000168300f0701b011
Net: smc911x-0
Hit any key to stop autoboot: 0
U-Boot #
"""

I see that 960187ffa125b3938fec4b827bd9e8c04a204af8 ("ARM: OMAP: I2C:
New read, write and probe functions") has changed significantly the
OMAP I2C driver. And it turns out that reverting this commit actually
fixes the problem. No more error messages, no more hang at boot. The
commit message says that it was tested on OMAP4, OMAP5 and AM335x, but
apparently OMAP3 isn't working all that well with this commit.

Best regards,

Thomas Petazzoni
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering