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

Michael Trimarchi
2013-11-27T15:45:01Z

Hi Thomas

On Wed, Nov 27, 2013 at 4:35 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Dear Tom Rini,
>
> On Wed, 27 Nov 2013 09:45:55 -0500, Tom Rini wrote:
>
>> > 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.
>>
>> I don't see this problem on my omap3_beagle, but I don't have that in
>> heavy rotation either. Looking things over, can you try the following
>> patch, which just drops the extra sanity check for unconfigured pads.
>> The kernel doesn't have any logic like this and I suspect that while
>> it's reliable enough of a check on some platforms, it's only true for
>> the OMAP4+ variant of the block.
>
> Seems a little bit better with this patch. But now, amongst
> approximately 12 boots, I had two boots that failed with:
>
> OMAP36XX/37XX-GP ES1.2, CPU-OPP2, L3-200MHz, Max CPU Clock 1 Ghz
> IGEPv2 + LPDDR/NAND
> I2C: ready
> DRAM: 512 MiB
> NAND: 512 MiB
> MMC: OMAP SD/MMC: 0
> *** Warning - bad CRC, using default environment
>
> Timed out in wait_for_event: status=0000
> Check if pads/pull-ups of bus 0 are properly configured
> i2c_write: error waiting for addr ACK (status=0x0)
> Timed out in wait_for_event: status=0000
> Check if pads/pull-ups of bus 0 are properly configured
> i2c_write: error waiting for addr ACK (status=0x0)
> Timed out in wait_for_event: status=0000
> Check if pads/pull-ups of bus 0 are properly configured
> i2c_write: error waiting for addr ACK (status=0x0)
> Timed out in wait_for_event: status=0000
> Check if pads/pull-ups of bus 0 are properly configured
> i2c_write: error waiting for addr ACK (status=0x0)
> Timed out in wait_for_event: status=0000
> Check if pads/pull-ups of bus 0 are properly configured
> i2c_write: error waiting for addr ACK (status=0x0)
> Timed out in wait_for_event: status=0000
> Check if pads/pull-ups of bus 0 are properly configured
> i2c_read: error waiting for addr ACK (status=0x0)
> TWL4030:USB:Read[0xfd] Error 1
> [... more of the same stuff indefinitely ...]
>

I had a problem in the past with fail communication with twl.
Can you try the following code?

struct control_prog_io *prog_io_base;

prog_io_base = (struct control_prog_io *)OMAP34XX_CTRL_BASE;

/* Enable i2c2 pullup resisters */
writel(~(PRG_I2C2_PULLUPRESX | PRG_I2C1_PULLUPRESX),
&prog_io_base->io1);

The pullup for twl bus should be enable by default on reset but for some
reason that I had no time to investigate I found it asserted

Michael

> Thanks!
>
> Thomas
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot