Dear Nikita Kiryanov, On Thu, 28 Nov 2013 18:04:42 +0200, Nikita Kiryanov wrote: > Writing zero into I2Ci.I2C_CNT register causes random I2C failures in OMAP3 > based devices. This seems to be related to the following advisory which > apears in multiple erratas for OMAP3 SoCs (OMAP35xx, DM37xx), as well as > OMAP4430 TRM: > > Advisory: > I2C Module Does Not Allow 0-Byte Data Requests > Details: > When configured as the master, the I2C module does not allow 0-byte data > transfers. Note: Programming I2Ci.I2C_CNT[15:0]: DCOUNT = 0 will cause > undefined behavior. > Workaround(s): > No workaround. Do not use 0-byte data requests. > > The writes in question are unnecessary from a functional point of view. > Most of them are done after I/O has finished, and the only one that preceds > I/O (in i2c_probe()) is also unnecessary because a stop bit is sent before > actual data transmission takes place. > > Therefore, remove all writes that zero the cnt register. > > Cc: Heiko Schocher <[email protected]> > Cc: Thomas Petazzoni <[email protected]> > Cc: Tom Rini <[email protected]> > Cc: Lubomir Popov <[email protected]> > Cc: Enric Balletbo Serra <[email protected]> > Signed-off-by: Nikita Kiryanov <[email protected]> > --- > Changes in V2: > Removed all instances of writew(0, &i2c_base->cnt) instead of just the > one in i2c_write (following a test of V1 by Thomas Petazzoni).
Tested-by: Thomas Petazzoni <[email protected]> On IGEPv2, OMAP36XX/37XX-GP ES1.2. Thanks a lot! Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

