[PATCH] cpufreq: tegra186: Share policy per cluster

Aaron Kling posted 1 patch 10 months ago
There is a newer version of this series
drivers/cpufreq/tegra186-cpufreq.c | 7 +++++++
1 file changed, 7 insertions(+)
[PATCH] cpufreq: tegra186: Share policy per cluster
Posted by Aaron Kling 10 months ago
This functionally brings tegra186 in line with tegra210 and tegra194,
sharing a cpufreq policy between all cores in a cluster.

Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
---
 drivers/cpufreq/tegra186-cpufreq.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c
index c7761eb99f3cc..c832a1270e688 100644
--- a/drivers/cpufreq/tegra186-cpufreq.c
+++ b/drivers/cpufreq/tegra186-cpufreq.c
@@ -73,11 +73,18 @@ static int tegra186_cpufreq_init(struct cpufreq_policy *policy)
 {
 	struct tegra186_cpufreq_data *data = cpufreq_get_driver_data();
 	unsigned int cluster = data->cpus[policy->cpu].bpmp_cluster_id;
+	u32 cpu;
 
 	policy->freq_table = data->clusters[cluster].table;
 	policy->cpuinfo.transition_latency = 300 * 1000;
 	policy->driver_data = NULL;
 
+	/* set same policy for all cpus in a cluster */
+	for (cpu = 0; cpu < (sizeof(tegra186_cpus)/sizeof(struct tegra186_cpufreq_cpu)); cpu++) {
+		if (data->cpus[cpu].bpmp_cluster_id == cluster)
+			cpumask_set_cpu(cpu, policy->cpus);
+	}
+
 	return 0;
 }
 
-- 
2.48.1
Re: [PATCH] cpufreq: tegra186: Share policy per cluster
Posted by Viresh Kumar 9 months, 1 week ago
On 16-02-25, 10:08, Aaron Kling wrote:
> This functionally brings tegra186 in line with tegra210 and tegra194,
> sharing a cpufreq policy between all cores in a cluster.
> 
> Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
> ---
>  drivers/cpufreq/tegra186-cpufreq.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c
> index c7761eb99f3cc..c832a1270e688 100644
> --- a/drivers/cpufreq/tegra186-cpufreq.c
> +++ b/drivers/cpufreq/tegra186-cpufreq.c
> @@ -73,11 +73,18 @@ static int tegra186_cpufreq_init(struct cpufreq_policy *policy)
>  {
>  	struct tegra186_cpufreq_data *data = cpufreq_get_driver_data();
>  	unsigned int cluster = data->cpus[policy->cpu].bpmp_cluster_id;
> +	u32 cpu;
>  
>  	policy->freq_table = data->clusters[cluster].table;
>  	policy->cpuinfo.transition_latency = 300 * 1000;
>  	policy->driver_data = NULL;
>  
> +	/* set same policy for all cpus in a cluster */
> +	for (cpu = 0; cpu < (sizeof(tegra186_cpus)/sizeof(struct tegra186_cpufreq_cpu)); cpu++) {

Can't you use ARRAY_SIZE here ?

> +		if (data->cpus[cpu].bpmp_cluster_id == cluster)
> +			cpumask_set_cpu(cpu, policy->cpus);
> +	}
> +
>  	return 0;

-- 
viresh
Re: [PATCH] cpufreq: tegra186: Share policy per cluster
Posted by Aaron Kling 9 months, 1 week ago
On Sun, Mar 9, 2025 at 11:45 PM Viresh Kumar <viresh.kumar@linaro.org> wrote:
>
> On 16-02-25, 10:08, Aaron Kling wrote:
> > This functionally brings tegra186 in line with tegra210 and tegra194,
> > sharing a cpufreq policy between all cores in a cluster.
> >
> > Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
> > ---
> >  drivers/cpufreq/tegra186-cpufreq.c | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c
> > index c7761eb99f3cc..c832a1270e688 100644
> > --- a/drivers/cpufreq/tegra186-cpufreq.c
> > +++ b/drivers/cpufreq/tegra186-cpufreq.c
> > @@ -73,11 +73,18 @@ static int tegra186_cpufreq_init(struct cpufreq_policy *policy)
> >  {
> >       struct tegra186_cpufreq_data *data = cpufreq_get_driver_data();
> >       unsigned int cluster = data->cpus[policy->cpu].bpmp_cluster_id;
> > +     u32 cpu;
> >
> >       policy->freq_table = data->clusters[cluster].table;
> >       policy->cpuinfo.transition_latency = 300 * 1000;
> >       policy->driver_data = NULL;
> >
> > +     /* set same policy for all cpus in a cluster */
> > +     for (cpu = 0; cpu < (sizeof(tegra186_cpus)/sizeof(struct tegra186_cpufreq_cpu)); cpu++) {
>
> Can't you use ARRAY_SIZE here ?

I could, just wasn't aware of that macro. Is that enough to send a v2 over?
>
> > +             if (data->cpus[cpu].bpmp_cluster_id == cluster)
> > +                     cpumask_set_cpu(cpu, policy->cpus);
> > +     }
> > +
> >       return 0;
>
> --
> viresh

Sincerely,
Aaron
Re: [PATCH] cpufreq: tegra186: Share policy per cluster
Posted by Viresh Kumar 9 months, 1 week ago
On 10-03-25, 00:08, Aaron Kling wrote:
> On Sun, Mar 9, 2025 at 11:45 PM Viresh Kumar <viresh.kumar@linaro.org> wrote:
> >
> > On 16-02-25, 10:08, Aaron Kling wrote:
> > > This functionally brings tegra186 in line with tegra210 and tegra194,
> > > sharing a cpufreq policy between all cores in a cluster.
> > >
> > > Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
> > > ---
> > >  drivers/cpufreq/tegra186-cpufreq.c | 7 +++++++
> > >  1 file changed, 7 insertions(+)
> > >
> > > diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c
> > > index c7761eb99f3cc..c832a1270e688 100644
> > > --- a/drivers/cpufreq/tegra186-cpufreq.c
> > > +++ b/drivers/cpufreq/tegra186-cpufreq.c
> > > @@ -73,11 +73,18 @@ static int tegra186_cpufreq_init(struct cpufreq_policy *policy)
> > >  {
> > >       struct tegra186_cpufreq_data *data = cpufreq_get_driver_data();
> > >       unsigned int cluster = data->cpus[policy->cpu].bpmp_cluster_id;
> > > +     u32 cpu;
> > >
> > >       policy->freq_table = data->clusters[cluster].table;
> > >       policy->cpuinfo.transition_latency = 300 * 1000;
> > >       policy->driver_data = NULL;
> > >
> > > +     /* set same policy for all cpus in a cluster */
> > > +     for (cpu = 0; cpu < (sizeof(tegra186_cpus)/sizeof(struct tegra186_cpufreq_cpu)); cpu++) {
> >
> > Can't you use ARRAY_SIZE here ?
> 
> I could, just wasn't aware of that macro. Is that enough to send a v2 over?

Yes, please send that and include the tags you received.

-- 
viresh
Re: [PATCH] cpufreq: tegra186: Share policy per cluster
Posted by Viresh Kumar 9 months, 2 weeks ago
On 16-02-25, 10:08, Aaron Kling wrote:
> This functionally brings tegra186 in line with tegra210 and tegra194,
> sharing a cpufreq policy between all cores in a cluster.
> 
> Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
> ---
>  drivers/cpufreq/tegra186-cpufreq.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c
> index c7761eb99f3cc..c832a1270e688 100644
> --- a/drivers/cpufreq/tegra186-cpufreq.c
> +++ b/drivers/cpufreq/tegra186-cpufreq.c
> @@ -73,11 +73,18 @@ static int tegra186_cpufreq_init(struct cpufreq_policy *policy)
>  {
>  	struct tegra186_cpufreq_data *data = cpufreq_get_driver_data();
>  	unsigned int cluster = data->cpus[policy->cpu].bpmp_cluster_id;
> +	u32 cpu;
>  
>  	policy->freq_table = data->clusters[cluster].table;
>  	policy->cpuinfo.transition_latency = 300 * 1000;
>  	policy->driver_data = NULL;
>  
> +	/* set same policy for all cpus in a cluster */
> +	for (cpu = 0; cpu < (sizeof(tegra186_cpus)/sizeof(struct tegra186_cpufreq_cpu)); cpu++) {
> +		if (data->cpus[cpu].bpmp_cluster_id == cluster)
> +			cpumask_set_cpu(cpu, policy->cpus);
> +	}
> +
>  	return 0;
>  }

Thierry / Jonathan,

Any inputs on this ?

-- 
viresh
Re: [PATCH] cpufreq: tegra186: Share policy per cluster
Posted by Thierry Reding 9 months, 2 weeks ago
On Mon, Mar 03, 2025 at 03:33:06PM +0530, Viresh Kumar wrote:
> On 16-02-25, 10:08, Aaron Kling wrote:
> > This functionally brings tegra186 in line with tegra210 and tegra194,
> > sharing a cpufreq policy between all cores in a cluster.
> > 
> > Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
> > ---
> >  drivers/cpufreq/tegra186-cpufreq.c | 7 +++++++
> >  1 file changed, 7 insertions(+)
> > 
> > diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c
> > index c7761eb99f3cc..c832a1270e688 100644
> > --- a/drivers/cpufreq/tegra186-cpufreq.c
> > +++ b/drivers/cpufreq/tegra186-cpufreq.c
> > @@ -73,11 +73,18 @@ static int tegra186_cpufreq_init(struct cpufreq_policy *policy)
> >  {
> >  	struct tegra186_cpufreq_data *data = cpufreq_get_driver_data();
> >  	unsigned int cluster = data->cpus[policy->cpu].bpmp_cluster_id;
> > +	u32 cpu;
> >  
> >  	policy->freq_table = data->clusters[cluster].table;
> >  	policy->cpuinfo.transition_latency = 300 * 1000;
> >  	policy->driver_data = NULL;
> >  
> > +	/* set same policy for all cpus in a cluster */
> > +	for (cpu = 0; cpu < (sizeof(tegra186_cpus)/sizeof(struct tegra186_cpufreq_cpu)); cpu++) {
> > +		if (data->cpus[cpu].bpmp_cluster_id == cluster)
> > +			cpumask_set_cpu(cpu, policy->cpus);
> > +	}
> > +
> >  	return 0;
> >  }
> 
> Thierry / Jonathan,
> 
> Any inputs on this ?

Sumit,

does this look reasonable?

Thanks,
Thierry
Re: [PATCH] cpufreq: tegra186: Share policy per cluster
Posted by Sumit Gupta 9 months, 2 weeks ago

On 03/03/25 21:18, Thierry Reding wrote:
> On Mon, Mar 03, 2025 at 03:33:06PM +0530, Viresh Kumar wrote:
>> On 16-02-25, 10:08, Aaron Kling wrote:
>>> This functionally brings tegra186 in line with tegra210 and tegra194,
>>> sharing a cpufreq policy between all cores in a cluster.
>>>
>>> Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
>>> ---
>>>   drivers/cpufreq/tegra186-cpufreq.c | 7 +++++++
>>>   1 file changed, 7 insertions(+)
>>>
>>> diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c
>>> index c7761eb99f3cc..c832a1270e688 100644
>>> --- a/drivers/cpufreq/tegra186-cpufreq.c
>>> +++ b/drivers/cpufreq/tegra186-cpufreq.c
>>> @@ -73,11 +73,18 @@ static int tegra186_cpufreq_init(struct cpufreq_policy *policy)
>>>   {
>>>   	struct tegra186_cpufreq_data *data = cpufreq_get_driver_data();
>>>   	unsigned int cluster = data->cpus[policy->cpu].bpmp_cluster_id;
>>> +	u32 cpu;
>>>   
>>>   	policy->freq_table = data->clusters[cluster].table;
>>>   	policy->cpuinfo.transition_latency = 300 * 1000;
>>>   	policy->driver_data = NULL;
>>>   
>>> +	/* set same policy for all cpus in a cluster */
>>> +	for (cpu = 0; cpu < (sizeof(tegra186_cpus)/sizeof(struct tegra186_cpufreq_cpu)); cpu++) {
>>> +		if (data->cpus[cpu].bpmp_cluster_id == cluster)
>>> +			cpumask_set_cpu(cpu, policy->cpus);
>>> +	}
>>> +
>>>   	return 0;
>>>   }
>>
>> Thierry / Jonathan,
>>
>> Any inputs on this ?
> 
> Sumit,
> 
> does this look reasonable?
> 
> Thanks,
> Thierry

Looks good to me.

Reviewed-by: Sumit Gupta <sumitg@nvidia.com>


Best Regards,
Sumit Gupta
Re: [PATCH] cpufreq: tegra186: Share policy per cluster
Posted by Thierry Reding 9 months, 2 weeks ago
On Fri, Mar 07, 2025 at 08:45:29PM +0530, Sumit Gupta wrote:
> 
> 
> On 03/03/25 21:18, Thierry Reding wrote:
> > On Mon, Mar 03, 2025 at 03:33:06PM +0530, Viresh Kumar wrote:
> > > On 16-02-25, 10:08, Aaron Kling wrote:
> > > > This functionally brings tegra186 in line with tegra210 and tegra194,
> > > > sharing a cpufreq policy between all cores in a cluster.
> > > > 
> > > > Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
> > > > ---
> > > >   drivers/cpufreq/tegra186-cpufreq.c | 7 +++++++
> > > >   1 file changed, 7 insertions(+)
> > > > 
> > > > diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c
> > > > index c7761eb99f3cc..c832a1270e688 100644
> > > > --- a/drivers/cpufreq/tegra186-cpufreq.c
> > > > +++ b/drivers/cpufreq/tegra186-cpufreq.c
> > > > @@ -73,11 +73,18 @@ static int tegra186_cpufreq_init(struct cpufreq_policy *policy)
> > > >   {
> > > >   	struct tegra186_cpufreq_data *data = cpufreq_get_driver_data();
> > > >   	unsigned int cluster = data->cpus[policy->cpu].bpmp_cluster_id;
> > > > +	u32 cpu;
> > > >   	policy->freq_table = data->clusters[cluster].table;
> > > >   	policy->cpuinfo.transition_latency = 300 * 1000;
> > > >   	policy->driver_data = NULL;
> > > > +	/* set same policy for all cpus in a cluster */
> > > > +	for (cpu = 0; cpu < (sizeof(tegra186_cpus)/sizeof(struct tegra186_cpufreq_cpu)); cpu++) {
> > > > +		if (data->cpus[cpu].bpmp_cluster_id == cluster)
> > > > +			cpumask_set_cpu(cpu, policy->cpus);
> > > > +	}
> > > > +
> > > >   	return 0;
> > > >   }
> > > 
> > > Thierry / Jonathan,
> > > 
> > > Any inputs on this ?
> > 
> > Sumit,
> > 
> > does this look reasonable?
> > 
> > Thanks,
> > Thierry
> 
> Looks good to me.
> 
> Reviewed-by: Sumit Gupta <sumitg@nvidia.com>

Thanks, in that case:

Acked-by: Thierry Reding <treding@nvidia.com>