diff mbox series

[v14,2/3] cpufreq: Add of_perf_domain_get_sharing_cpumask

Message ID 1630162872-25452-3-git-send-email-hector.yuan@mediatek.com
State New
Headers show
Series [v14,1/3] ndings: cpufreq: add bindings for MediaTek cpufreq HW | expand

Commit Message

Hector Yuan Aug. 28, 2021, 3:01 p.m. UTC
From: "Hector.Yuan" <hector.yuan@mediatek.com>

Add of_perf_domain_get_sharing_cpumask function to group cpu
to specific performance domain.

Signed-off-by: Hector.Yuan <hector.yuan@mediatek.com>
---
 include/linux/cpufreq.h |   39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

Comments

Viresh Kumar Aug. 30, 2021, 5:04 a.m. UTC | #1
On 28-08-21, 23:01, Hector Yuan wrote:
> From: "Hector.Yuan" <hector.yuan@mediatek.com>
> 
> Add of_perf_domain_get_sharing_cpumask function to group cpu
> to specific performance domain.
> 
> Signed-off-by: Hector.Yuan <hector.yuan@mediatek.com>
> ---
>  include/linux/cpufreq.h |   39 +++++++++++++++++++++++++++++++++++++++
>  1 file changed, 39 insertions(+)
> 
> diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
> index 9fd7194..4916d70 100644
> --- a/include/linux/cpufreq.h
> +++ b/include/linux/cpufreq.h
> @@ -13,6 +13,8 @@
>  #include <linux/completion.h>
>  #include <linux/kobject.h>
>  #include <linux/notifier.h>
> +#include <linux/of.h>
> +#include <linux/of_device.h>
>  #include <linux/pm_qos.h>
>  #include <linux/spinlock.h>
>  #include <linux/sysfs.h>
> @@ -1036,6 +1038,43 @@ void arch_set_freq_scale(const struct cpumask *cpus,
>  }
>  #endif
>  
> +#ifdef CONFIG_CPU_FREQ
> +static inline int of_perf_domain_get_sharing_cpumask(int index, const char *list_name,
> +						     const char *cell_name,
> +						     struct cpumask *cpumask)

What happened with the discussion we had about returning index and passing CPU
there ?
Hector Yuan Aug. 30, 2021, 9:08 a.m. UTC | #2
On Mon, 2021-08-30 at 10:34 +0530, Viresh Kumar wrote:
> On 28-08-21, 23:01, Hector Yuan wrote:

> > From: "Hector.Yuan" <hector.yuan@mediatek.com>

> > 

> > Add of_perf_domain_get_sharing_cpumask function to group cpu

> > to specific performance domain.

> > 

> > Signed-off-by: Hector.Yuan <hector.yuan@mediatek.com>

> > ---

> >  include/linux/cpufreq.h |   39

> > +++++++++++++++++++++++++++++++++++++++

> >  1 file changed, 39 insertions(+)

> > 

> > diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h

> > index 9fd7194..4916d70 100644

> > --- a/include/linux/cpufreq.h

> > +++ b/include/linux/cpufreq.h

> > @@ -13,6 +13,8 @@

> >  #include <linux/completion.h>

> >  #include <linux/kobject.h>

> >  #include <linux/notifier.h>

> > +#include <linux/of.h>

> > +#include <linux/of_device.h>

> >  #include <linux/pm_qos.h>

> >  #include <linux/spinlock.h>

> >  #include <linux/sysfs.h>

> > @@ -1036,6 +1038,43 @@ void arch_set_freq_scale(const struct

> > cpumask *cpus,

> >  }

> >  #endif

> >  

> > +#ifdef CONFIG_CPU_FREQ

> > +static inline int of_perf_domain_get_sharing_cpumask(int index,

> > const char *list_name,

> > +						     const char

> > *cell_name,

> > +						     struct cpumask

> > *cpumask)

> 

> What happened with the discussion we had about returning index and

> passing CPU

> there ?

> 

Hi, Viresh, sorry for this, I didn't upload the correct version of
cpufreq.h. Should I just go v15 or you want to do some review for other
part of my patches? Thanks.
diff mbox series

Patch

diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 9fd7194..4916d70 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -13,6 +13,8 @@ 
 #include <linux/completion.h>
 #include <linux/kobject.h>
 #include <linux/notifier.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 #include <linux/pm_qos.h>
 #include <linux/spinlock.h>
 #include <linux/sysfs.h>
@@ -1036,6 +1038,43 @@  void arch_set_freq_scale(const struct cpumask *cpus,
 }
 #endif
 
+#ifdef CONFIG_CPU_FREQ
+static inline int of_perf_domain_get_sharing_cpumask(int index, const char *list_name,
+						     const char *cell_name,
+						     struct cpumask *cpumask)
+{
+	struct device_node *cpu_np;
+	struct of_phandle_args args;
+	int cpu, ret;
+
+	for_each_possible_cpu(cpu) {
+		cpu_np = of_cpu_device_node_get(cpu);
+		if (!cpu_np)
+			continue;
+
+		ret = of_parse_phandle_with_args(cpu_np, list_name,
+						 cell_name, 0,
+						 &args);
+
+		of_node_put(cpu_np);
+		if (ret < 0)
+			continue;
+
+		if (index == args.args[0])
+			cpumask_set_cpu(cpu, cpumask);
+	}
+
+	return 0;
+}
+#else
+static inline int of_perf_domain_get_sharing_cpumask(int index, const char *list_name,
+						     const char *cell_name,
+						     struct cpumask *cpumask)
+{
+	return 0;
+}
+#endif
+
 /* the following are really really optional */
 extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
 extern struct freq_attr cpufreq_freq_attr_scaling_boost_freqs;