On Monday, May 19, 2014 11:59:11 AM Viresh Kumar wrote:
All drivers expecting CPU's OPPs from device tree initialize OPP table using of_init_opp_table() and there is nothing driver specific in that. They all do it in the same way adding to code redundancy.
It would be better if we can get rid of code redundancy by initializing CPU OPPs from core code for all CPUs that have a "operating-points" property defined in their node.
This patch initializes OPPs as soon as CPU device is registered in register_cpu().
Cc: Greg Kroah-Hartman gregkh@linuxfoundation.org Cc: Amit Daniel Kachhap amit.daniel@samsung.com Cc: Kukjin Kim kgene.kim@samsung.com Cc: Shawn Guo shawn.guo@linaro.org Cc: Sudeep Holla sudeep.holla@arm.com Signed-off-by: Viresh Kumar viresh.kumar@linaro.org
V1-V2: A colleague spotted some extra debug prints in my first mail :(
Replace
- pr_err("****%s: failed to init OPP table for cpu%d, err: %d\n",
with
- pr_err("%s: failed to init OPP table for cpu%d, err: %d\n",
drivers/base/cpu.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c index 006b1bc..74ce944 100644 --- a/drivers/base/cpu.c +++ b/drivers/base/cpu.c @@ -16,6 +16,7 @@ #include <linux/acpi.h> #include <linux/of.h> #include <linux/cpufeature.h> +#include <linux/pm_opp.h> #include "base.h" @@ -349,11 +350,20 @@ int register_cpu(struct cpu *cpu, int num) if (cpu->hotpluggable) cpu->dev.groups = hotplugable_cpu_attr_groups; error = device_register(&cpu->dev);
- if (!error)
What about
if (error) return error;
and then you'd save an indentation level?
Anyway, I find adding of_node* stuff directly to the driver core this way kind of disgusting as there still are platforms that don't use it.
Can we have a call to a function that will change into an empty stub on such platforms here, please?
- if (!error) { per_cpu(cpu_sys_devices, num) = &cpu->dev;
- if (!error) register_cpu_under_node(num, cpu_to_node(num));
/* Initialize CPUs OPP table */
if (of_node_get(cpu->dev.of_node)) {
error = of_init_opp_table(&cpu->dev);
if (error && error != -ENODEV)
pr_err("%s: failed to init OPP table for cpu%d, err: %d\n",
__func__, num, error);
of_node_put(cpu->dev.of_node);
}
- }
- return error;
}