Re: [PATCH V4 3/3] cpufreq: Tegra: implement intermediate frequency callbacks

Viresh Kumar
2014-06-02T10:01:23Z

On 29 May 2014 23:12, Stephen Warren <swarren@wwwdotorg.org> wrote:

> E.g. in the following code after the series is applied:
>
>> ret = clk_set_rate(pll_x_clk, rate * 1000);
>> /* Restore to earlier frequency on error, i.e. pll_x */
>> if (ret)
>> pr_err("Failed to change pll_x to %lu\n", rate);
>>
>> ret = clk_set_parent(cpu_clk, pll_x_clk);
>
> If the clk_set_rate() failed, we have no idea what the pll_x rate is; I
> don't think the clock API guarantees that zero HW changes have been made
> if the function fails. Yet the code switches the CPU clock back to pll_x
> without attempting to fix the pll_x rate to be the old rate. Perhaps
> there's not much that can be done here though, since if one
> clk_set_rate() failed, perhaps the one to fix it will too.

This was the case here with the existing driver as well. CPUFreq core
expects this today as well and so sends reverse notification in case of
failures.

> I suspect there are other issues, like switching between pll_p/pllx
> might not be restored on error

Another example would be useful..

> and the EMC frequency isn't switched back, etc.

It wasn't in the existing code as well and so left it as is..