Thread (58 messages) flat view 58 messages, 11 authors, 2014-07-08

Re: [PATCH v4 3/8] clk: samsung: add infrastructure to register cpu clocks

From: Heiko Stübner <heiko@sntech.de>
Date: 2014-05-15 19:17:20
Also in: linux-arm-kernel, linux-samsung-soc

Am Donnerstag, 15. Mai 2014, 11:18:44 schrieb Doug Anderson:
Thomas,

On Tue, May 13, 2014 at 6:11 PM, Thomas Abraham [off-list ref] wrote:
quoted
From: Thomas Abraham <redacted>
+static int exynos4210_armclk_pre_rate_change(struct clk_notifier_data
*ndata, +                       struct exynos_cpuclk *armclk, void
__iomem *base) +{
+       struct exynos4210_armclk_data *armclk_data = armclk->data;
+       unsigned long alt_prate = clk_get_rate(armclk->alt_parent);
+       unsigned long alt_div, div0, div1, tdiv0, mux_reg;
+       unsigned long cur_armclk_rate, timeout;
+       unsigned long flags;
+
+       /* find out the divider values to use for clock data */
+       while (armclk_data->prate != ndata->new_rate) {
+               if (armclk_data->prate == 0)
+                       return -EINVAL;
+               armclk_data++;
+       }
+
+       div0 = armclk_data->div0;
+       div1 = armclk_data->div1;
+       if (readl(base + SRC_CPU) & EXYNOS4210_MUX_HPM_MASK) {
+               div1 = readl(base + DIV_CPU1) & EXYNOS4210_DIV1_HPM_MASK;
+               div1 |= ((armclk_data->div1) & ~EXYNOS4210_DIV1_HPM_MASK);
+       }
+
+       /*
+        * if the new and old parent clock speed is less than the clock
speed +        * of the alternate parent, then it should be ensured that
at no point +        * the armclk speed is more than the old_prate until
the dividers are +        * set.
+        */
+       tdiv0 = readl(base + DIV_CPU0);
+       cur_armclk_rate = ndata->old_rate / EXYNOS4210_ARM_DIV1(tdiv0) /
+                               EXYNOS4210_ARM_DIV2(tdiv0);
+       if (alt_prate > cur_armclk_rate) {
+               alt_div = _calc_div(alt_prate, cur_armclk_rate);
+               _exynos4210_set_armclk_div(base, alt_div);
+               div0 |= alt_div;
Don't you need to up the voltage here, too?  ...I haven't reviewed
this whole patch (so perhaps it's elsewhere in the patch or in the
series), but I stumbled upon this while trying to solve a different
problem and figured I'd check...
setting the voltage should be done by the cpufreq driver like cpufreq-cpu0 - 
whose usage this series intents to allow.

As I've hijacked Thomas' concept for my current rockchip clock work, I've 
already seen this working nicely :-) .


Heiko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help