[U-Boot] [PATCH V3+] I2C: mxc_i2c rework

Marek Vasut marek.vasut at gmail.com
Thu Sep 15 06:07:45 CEST 2011


On Thursday, September 15, 2011 04:26:17 AM Jason Hui wrote:
> On Thu, Sep 15, 2011 at 10:07 AM, Marek Vasut <marek.vasut at gmail.com> wrote:
> > On Thursday, September 15, 2011 03:43:42 AM Jason Hui wrote:
> >> On Thu, Sep 15, 2011 at 3:39 AM, Marek Vasut <marek.vasut at gmail.com> wrote:
> >> > On Friday, July 29, 2011 08:55:14 AM Jason Hui wrote:
> >> >> Hi, Marek,
> >> >> 
> >> >> On Thu, Jul 14, 2011 at 5:58 AM, Marek Vasut <marek.vasut at gmail.com> 
wrote:
> >> >> > Rewrite the mxc_i2c driver.
> >> >> >  * This version is much closer to Linux implementation.
> >> >> >  * Fixes IPG_PERCLK being incorrectly used as clock source
> >> >> >  * Fixes behaviour of the driver on iMX51
> >> >> >  * Clean up coding style a bit ;-)
> >> >> 
> >> >> why you change i2c clock from IPG_PERCLK to IPG_CLK?
> >> >> 
> >> >> [...]
> >> > 
> >> > Ok, I investigated a bit deeper and I suspect the clock.c is the
> >> > culprit.
> >> > 
> >> > Apparently, the PERCLK doesn't run at the frequency the clock.c
> >> > reports it runs on. Therefore, the i2c miscalculates the divider etc
> >> > -- falling crap model (waterfall model).
> >> 
> >> But apparently, the i2c function clock should be IPG_PERCLK not IPG
> >> clock. And Linux also fix it already.
> > 
> > Then there's bulls**t in your mx51 and mx53 datasheet or what ?
> 
> Please refer to MCIMX51RM.PDF, page 305,
> Table 7-41. PERCLK-dependent Module Clock Sources
> PERCLK-dependent Module Clocks Associated CCGR Register
> uart1_perclk
> CCGR1
> uart2_perclk
> uart3_perclk
> i2c1 clocks
> i2c2 clocks
> epit1_highfreq
> CCGR2
> epit2_highfreq
> pwm1_highfreq
> pwm2_highfreq
> gpt_highfreq
> owire clocks

You see ... I'm starting to understand what is actually going wrong. The 
lowlevel_init.S is bloated with crap (why? why can't that be in cpu init C code 
?) and there is this one part, where CBCDR is overwritten with a configurable 
value instead of hardcoded value.

No documentation about that at all, but it's there ... and that's -- amongst 
other bugs -- my problem I assume. So I need to set this CONFIG_SYS_CLKTL_CBCDR 
to another magic value, now I get it.

> 
> > besides, PERCLK
> > is faster than IPGCLK on MX51 so it makes even less sense!
> 
> I don't think PERCLK is always faster than IPG clock, it's configurable.
> please refer to MCIMX51RM.PDF, page 307.

Yea ... it's configurable via some undocumented macro in assembler code. Damn.

Can you please comment on the other patches?

Thanks

> 
> >Can you please talk
> >
> > to the HW guys or whatever to clear this once and for all ? I smell noone
> > really knows where the clock are sourced from and all this crap is just
> > blind guessing.
> 
> I have asked the IC module owner again. It confirms that I2C function
> clock is ipg_perclk.
> 
> Jason


More information about the U-Boot mailing list