[PATCH 1/3] ARM: kernel: get cpu clock rate from cpu clock node first

Florian Fainelli f.fainelli at gmail.com
Fri Jun 21 05:42:39 EDT 2013


2013/6/21 Lorenzo Pieralisi <lorenzo.pieralisi at arm.com>:
> On Thu, Jun 20, 2013 at 03:39:04PM +0100, Florian Fainelli wrote:
>> The current topology code will only attempt to parse a "clock-frequency"
>> property for a given CPU node. Some platforms such as the ecx-2000
>> provide a clock node. Change the logic to first look for a clock node,
>> and if we fail, fallback to parsing a "clock-frequency" property. To
>> avoid unnecessary casting, change rate from u32 to unsigned long, and
>> introduce the "prop" variable to hold the contents of the
>> "clock-frequency" property.
>>
>> Signed-off-by: Florian Fainelli <f.fainelli at gmail.com>
>> ---
>>  arch/arm/kernel/topology.c | 23 ++++++++++++++++-------
>>  1 file changed, 16 insertions(+), 7 deletions(-)
>>
>> diff --git a/arch/arm/kernel/topology.c b/arch/arm/kernel/topology.c
>> index c5a5954..8f340a1 100644
>> --- a/arch/arm/kernel/topology.c
>> +++ b/arch/arm/kernel/topology.c
>> @@ -21,6 +21,7 @@
>>  #include <linux/of.h>
>>  #include <linux/sched.h>
>>  #include <linux/slab.h>
>> +#include <linux/clk.h>
>>
>>  #include <asm/cputype.h>
>>  #include <asm/topology.h>
>> @@ -104,7 +105,9 @@ static void __init parse_dt_topology(void)
>>       cpu_capacity = kzalloc(alloc_size, GFP_NOWAIT);
>>
>>       while ((cn = of_find_node_by_type(cn, "cpu"))) {
>> -             const u32 *rate, *reg;
>> +             const u32 *prop, *reg;
>> +             unsigned long rate;
>> +             struct clk *cpu_clk;
>>               int len;
>>
>>               if (cpu >= num_possible_cpus())
>> @@ -117,11 +120,17 @@ static void __init parse_dt_topology(void)
>>               if (cpu_eff->compatible == NULL)
>>                       continue;
>>
>> -             rate = of_get_property(cn, "clock-frequency", &len);
>> -             if (!rate || len != 4) {
>> -                     pr_err("%s missing clock-frequency property\n",
>> -                             cn->full_name);
>> -                     continue;
>> +             cpu_clk = of_clk_get(cn, 0);
>> +             if (IS_ERR(cpu_clk)) {
>> +                     prop = of_get_property(cn, "clock-frequency", &len);
>> +                     if (!prop || len != 4) {
>> +                             pr_err("%s missing clock-frequency property\n",
>> +                                     cn->full_name);
>> +                             continue;
>> +                     }
>> +                     rate = be32_to_cpup(prop);
>> +             } else {
>> +                     rate = clk_get_rate(cpu_clk);
>
> I am not questioning whether adding a "clocks" property is proper or
> not, but let me say cpu related info and parsing are already scattered
> all over the place and this is wrong. We are currently trying to
> consolidate CPU related info in a single structure in the kernel, and
> then this code can become a consumer of that data.

Fine, this makes sense, although it was probably hard to know it
without you telling it first.

> As to the "clocks"
> property as I mentioned in another reply, that requires more thought.

Fair enough.
--
Florian



More information about the linux-arm-kernel mailing list