Re: [PATCH v5 3/6] powercap/drivers/dtpm: Add CPU DT initialization support
From: Ulf Hansson
Date: Fri Dec 31 2021 - 08:47:38 EST
On Sat, 18 Dec 2021 at 14:00, Daniel Lezcano <daniel.lezcano@xxxxxxxxxx> wrote:
>
> Based on the previous DT changes in the core code, use the 'setup'
> callback to initialize the CPU DTPM backend.
>
> Code is reorganized to stick to the DTPM table description. No
> functional changes.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
As I stated for patch2 an option that might be preferred, could be to
squash this one into it.
Nevertheless, feel free to add:
Reviewed-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
Kind regards
Uffe
> ---
> drivers/powercap/dtpm_cpu.c | 37 ++++++++++++++++++++++++++++++-------
> 1 file changed, 30 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/powercap/dtpm_cpu.c b/drivers/powercap/dtpm_cpu.c
> index 6bffb44c75aa..ca605911523b 100644
> --- a/drivers/powercap/dtpm_cpu.c
> +++ b/drivers/powercap/dtpm_cpu.c
> @@ -21,6 +21,7 @@
> #include <linux/cpuhotplug.h>
> #include <linux/dtpm.h>
> #include <linux/energy_model.h>
> +#include <linux/of.h>
> #include <linux/pm_qos.h>
> #include <linux/slab.h>
> #include <linux/units.h>
> @@ -176,6 +177,17 @@ static int cpuhp_dtpm_cpu_offline(unsigned int cpu)
> }
>
> static int cpuhp_dtpm_cpu_online(unsigned int cpu)
> +{
> + struct dtpm_cpu *dtpm_cpu;
> +
> + dtpm_cpu = per_cpu(dtpm_per_cpu, cpu);
> + if (dtpm_cpu)
> + return dtpm_update_power(&dtpm_cpu->dtpm);
> +
> + return 0;
> +}
> +
> +static int __dtpm_cpu_setup(int cpu, struct dtpm *parent)
> {
> struct dtpm_cpu *dtpm_cpu;
> struct cpufreq_policy *policy;
> @@ -183,6 +195,10 @@ static int cpuhp_dtpm_cpu_online(unsigned int cpu)
> char name[CPUFREQ_NAME_LEN];
> int ret = -ENOMEM;
>
> + dtpm_cpu = per_cpu(dtpm_per_cpu, cpu);
> + if (dtpm_cpu)
> + return 0;
> +
> policy = cpufreq_cpu_get(cpu);
> if (!policy)
> return 0;
> @@ -191,10 +207,6 @@ static int cpuhp_dtpm_cpu_online(unsigned int cpu)
> if (!pd)
> return -EINVAL;
>
> - dtpm_cpu = per_cpu(dtpm_per_cpu, cpu);
> - if (dtpm_cpu)
> - return dtpm_update_power(&dtpm_cpu->dtpm);
> -
> dtpm_cpu = kzalloc(sizeof(*dtpm_cpu), GFP_KERNEL);
> if (!dtpm_cpu)
> return -ENOMEM;
> @@ -207,7 +219,7 @@ static int cpuhp_dtpm_cpu_online(unsigned int cpu)
>
> snprintf(name, sizeof(name), "cpu%d-cpufreq", dtpm_cpu->cpu);
>
> - ret = dtpm_register(name, &dtpm_cpu->dtpm, NULL);
> + ret = dtpm_register(name, &dtpm_cpu->dtpm, parent);
> if (ret)
> goto out_kfree_dtpm_cpu;
>
> @@ -231,7 +243,18 @@ static int cpuhp_dtpm_cpu_online(unsigned int cpu)
> return ret;
> }
>
> -static int __init dtpm_cpu_init(void)
> +static int dtpm_cpu_setup(struct dtpm *dtpm, struct device_node *np)
> +{
> + int cpu;
> +
> + cpu = of_cpu_node_to_id(np);
> + if (cpu < 0)
> + return 0;
> +
> + return __dtpm_cpu_setup(cpu, dtpm);
> +}
> +
> +static int dtpm_cpu_init(void)
> {
> int ret;
>
> @@ -269,4 +292,4 @@ static int __init dtpm_cpu_init(void)
> return 0;
> }
>
> -DTPM_DECLARE(dtpm_cpu, dtpm_cpu_init, NULL);
> +DTPM_DECLARE(dtpm_cpu, dtpm_cpu_init, dtpm_cpu_setup);
> --
> 2.25.1
>