]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cpufreq: spear: Use of_property_for_each_u32() instead of open coding
authorRob Herring (Arm) <robh@kernel.org>
Wed, 31 Jul 2024 20:16:15 +0000 (14:16 -0600)
committerViresh Kumar <viresh.kumar@linaro.org>
Wed, 7 Aug 2024 06:41:45 +0000 (12:11 +0530)
Use of_property_count_u32_elems() and of_property_for_each_u32() instead
of of_find_property() and open coding the property parsing.

This is part of a larger effort to remove callers of of_find_property()
and similar functions. of_find_property() leaks the DT struct property
and data pointers which is a problem for dynamically allocated nodes
which may be freed.

Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
[Viresh: Fixed build failure and initialize / increment 'i']
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/spear-cpufreq.c

index 78b875db6b66916666fff2f63089aeaea6b85268..d8ab5b01d46d0482900ea33d12474a857cb47481 100644 (file)
@@ -171,10 +171,9 @@ static struct cpufreq_driver spear_cpufreq_driver = {
 static int spear_cpufreq_probe(struct platform_device *pdev)
 {
        struct device_node *np;
-       const struct property *prop;
        struct cpufreq_frequency_table *freq_tbl;
-       const __be32 *val;
-       int cnt, i, ret;
+       u32 val;
+       int cnt, ret, i = 0;
 
        np = of_cpu_device_node_get(0);
        if (!np) {
@@ -186,26 +185,23 @@ static int spear_cpufreq_probe(struct platform_device *pdev)
                                &spear_cpufreq.transition_latency))
                spear_cpufreq.transition_latency = CPUFREQ_ETERNAL;
 
-       prop = of_find_property(np, "cpufreq_tbl", NULL);
-       if (!prop || !prop->value) {
+       cnt = of_property_count_u32_elems(np, "cpufreq_tbl");
+       if (cnt <= 0) {
                pr_err("Invalid cpufreq_tbl\n");
                ret = -ENODEV;
                goto out_put_node;
        }
 
-       cnt = prop->length / sizeof(u32);
-       val = prop->value;
-
        freq_tbl = kcalloc(cnt + 1, sizeof(*freq_tbl), GFP_KERNEL);
        if (!freq_tbl) {
                ret = -ENOMEM;
                goto out_put_node;
        }
 
-       for (i = 0; i < cnt; i++)
-               freq_tbl[i].frequency = be32_to_cpup(val++);
+       of_property_for_each_u32(np, "cpufreq_tbl", val)
+               freq_tbl[i++].frequency = val;
 
-       freq_tbl[i].frequency = CPUFREQ_TABLE_END;
+       freq_tbl[cnt].frequency = CPUFREQ_TABLE_END;
 
        spear_cpufreq.freq_tbl = freq_tbl;