[PATCH-V3 3/3] ARM: OMAP3+: clock33xx: Add AM33XX clock tree data

Paul Walmsley paul at pwsan.com
Thu Apr 26 04:11:56 EDT 2012


On Thu, 26 Apr 2012, Hiremath, Vaibhav wrote:

> On Thu, Apr 26, 2012 at 12:06:00, Paul Walmsley wrote:
> > On Thu, 26 Apr 2012, Hiremath, Vaibhav wrote:
> > 
> > > Unfortunately, this is fractional divider, assuming input clock of 24MHz.
> > > 
> > > 24MHz / 732.4219 = 32KHz (Normal OPP100)
> > > 24MHz / 366.2109 = 32KHz (OPP50)
> > 
> > Yes, I already saw that in the TRM.  The question is, how is the 
> > fractional divider implemented in the hardware?  Is it implemented as an 
> > M,N counter?  It's rather unlikely to be dividing by 732.4219 directly -- 
> > in fact that value isn't even accurate.
> 
> Not sure how it is implemented in HW, in any case we do not have control 
> over it. The control is only provided using,
> 	- MODULEMODE (module enable/disable)
> 	- CONTROL_CLK32K_DIVRATIO_CTRL (divisor selection)

Right, but the goal is to make the clock tree rate computation independent 
of the assumptions of the OPP settings.

So placing a fixed clock rate -- one that supposedly does not depend on a 
parent rate -- in the middle of a clock tree is something we wish to 
avoid, if possible.  It is a hack.  Especially considering that the 
clock's input rate does appear to depend on its parent's rate.

So, could you please double-check to find out if the appropriate 
abstraction is as an M,N counter?  If the public forum is an issue, then 
if you prefer, you can E-mail me privately with the results.

> > > > - This clock is feeding downstream clocks, but it's using the MODULEMODE 
> > > > control interface, as if it were a standalone IP block.  Do you know why 
> > > > it's using the MODULEMODE control method rather than some optional clock 
> > > > control bits, like OMAP4 does?
> > > 
> > > Yes, this clock is feeding to timers, gpio debounce clocks, etc...
> > > Honestly, I do not know the answer to why part of it.
> > > (May be another integration/design issue)
> > 
> > Could you please check with the AM335x PRCM designers about this to find 
> > out what that MODULEMODE bit is actually doing (i.e., is it actually 
> > enabling the clock, and if so, why did they not use the OPTFCLKEN bits) ?  
> > The AM335x TRM has almost no documentation on what those MODULEMODE bits 
> > are doing in this case.
> 
> I can check, I am certain that, the answer would be to consider this as a 
> separate independent module.

Yes, please check with the hardware team.  The questions would be:

- What does changing the CLKDIV32K_CLKCTRL.MODULEMODE bits do?

- Is it necessary for the MODULEMODE bits to be set to 2 (ENABLE) to 
generate a clock to the clock nodes downstream of CLKDIV32K, or does the 
MODULEMODE just affect some other register access by the MPU?

- Will setting the CLKDIV32K_CLKCTRL.MODULEMODE bits to 0 disable the 
clock from being provided to downstream nodes of the CLKDIV32K, or does it 
simply affect register access?

- Is it necessary to follow the clockdomain enable sequence before 
enabling the CLKDIV32K MODULEMODE?

- What clockdomain does the CLKDIV32K module belong to?

> And same as other modules, control is provided to the SW.

The problem is that CLKDIV32K does not appear to be a distinct, leaf IP 
block from a clocking perspective, unlike the other uses of the 
*_CLKCTRL.MODULEMODE bits in the AM335x and OMAP4 clock trees.  So 
something is very unusual here.

If one of our core framework assumptions for OMAP4+ devices is incorrect, 
it would be useful for us to know as soon as possible, to avoid churn and 
broken code.


- Paul



More information about the linux-arm-kernel mailing list