[PATCH v2] cpufreq: Add S3C2416/S3C2450 cpufreq driver

Heiko Stübner heiko at sntech.de
Thu Feb 16 07:42:16 EST 2012


Hi Kgene,

Am Donnerstag, 16. Februar 2012, 13:08:57 schrieben Sie:
> On 02/16/12 19:42, Heiko Stübner wrote:
> > The S3C2416/S3C2450 SoCs support two sources for the armclk.
> > 
> > The first source is the so called armdiv which divides the msysclk down
> > to provide necessary cpu rates. In this mode the core voltage must be
> > always at 1.3V. The frequency from the armdiv is not allowed to be
> > lower than the hclk frequency.
> > 
> > In the second mode the armclk can be sourced directly from the hclk in
> > the so called "dynamic voltags scaling" (dvs) mode. Here the armdiv
> > isn't used at all. Also in this mode the core voltage may be lowered.
> > Existing hardware and tests with it suggest 1.0V as sufficient.
> > 
> > When changing the clock source to the armdiv from the hclk, the SoC
> > shows stability issues if the new frequency is higher than the current
> > hclk frequency. Hence the driver always forces the armdiv to the hclk
> > frequency before the source change and lets the cpufreq issue another
> > set_target call for higher frequencies.
> > 
> > To mark the hclk frequency as lower as the corresponding armdiv
> > frequency it is set 1MHz below the real frequency. This lets the cpufreq
> > framework change between 133MHz based on hclk and 133MHz based on armdiv
> > at will.
> > 
> > Signed-off-by: Heiko Stuebner<heiko at sntech.de>
> > Tested-by: Andrey Gusakov<dron0gus at gmail.com>
> > ---
> > changes since v1: correct the frequencies of the S3C2450 variant
> > changes since RFC: reboot-notifier to leave dvs mode on reboot
> > and a lot of cleanups
> > 
> >   drivers/cpufreq/Kconfig.arm       |   22 ++
> >   drivers/cpufreq/Makefile          |    1 +
> >   drivers/cpufreq/s3c2416-cpufreq.c |  542
> >   +++++++++++++++++++++++++++++++++++++ 3 files changed, 565
> >   insertions(+), 0 deletions(-)
> >   create mode 100644 drivers/cpufreq/s3c2416-cpufreq.c
> 
> As you know, I'm working on move cpufreq drivers of s3c2410, s3c2412 and
> s3c2440 into drivers/cpufreq/.
> 
> Now I'm not sure some common function can be used for them and this as
> well. But I think, if so, would be better to us.
> 
> So please wait for some time to finish my working. Maybe next week?
> 
> Then, let me back on this.

With most components there is a dividing line between the SoCs before and 
after S3C2443.

On the SoCs before S3C2443 the fclk comes directly from the pll. Hence when 
one wants to change its frequency the pll has to be reset and frequencies of 
the depending periphal clocks also have to be recalculated.

On SoCs starting from S3C2443 the msysclk (from the mpll) feeds a complete 
separate divider (called armdiv) which supplies exclusivly the armclk. The 
periphal clocks don't need to be touched normally.

Therefore the cpufreq functionality of S3C2416/S3C2443/S3C2450 is more in line 
with the S3C64xx and shows no real commonalities with earlier S3C-SoCs, as the 
clock structure is vastly different and can also do with a much simpler driver 
than the earlier S3C SoCs.


Heiko



More information about the linux-arm-kernel mailing list