diff mbox series

[v12,6/9] cpufreq: amd-pstate: Add set_boost callback for active mode

Message ID 851f4e8b2495f35f2ee1e848844dbaabb55411f4.1718787627.git.perry.yuan@amd.com (mailing list archive)
State Changes Requested, archived
Delegated to: Mario Limonciello
Headers show
Series AMD Pstate Driver Core Performance Boost | expand

Commit Message

Yuan, Perry June 19, 2024, 9:16 a.m. UTC
Add support for the set_boost callback in the active mode driver to
enable boost control via the cpufreq core. This ensures a consistent
boost control interface across all pstate modes, including passive
mode, guided mode, and active mode.

With this addition, all three pstate modes can support the same boost
control interface with unique interface and global CPB control. Each
CPU also supports individual boost control, allowing global CPB to
change all cores' boost states simultaneously. Specific CPUs can
update their boost states separately, ensuring all cores' boost
states are synchronized.

Signed-off-by: Perry Yuan <perry.yuan@amd.com>
---
 drivers/cpufreq/amd-pstate.c | 18 +++++-------------
 1 file changed, 5 insertions(+), 13 deletions(-)

Comments

Mario Limonciello June 19, 2024, 7:40 p.m. UTC | #1
On 6/19/2024 04:16, Perry Yuan wrote:
> Add support for the set_boost callback in the active mode driver to
> enable boost control via the cpufreq core. This ensures a consistent
> boost control interface across all pstate modes, including passive
> mode, guided mode, and active mode.
> 
> With this addition, all three pstate modes can support the same boost
> control interface with unique interface and global CPB control. Each
> CPU also supports individual boost control, allowing global CPB to
> change all cores' boost states simultaneously. Specific CPUs can
> update their boost states separately, ensuring all cores' boost
> states are synchronized.
> 
> Signed-off-by: Perry Yuan <perry.yuan@amd.com>

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

> ---
>   drivers/cpufreq/amd-pstate.c | 18 +++++-------------
>   1 file changed, 5 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> index 1c2320808ae1..299e52d4b17e 100644
> --- a/drivers/cpufreq/amd-pstate.c
> +++ b/drivers/cpufreq/amd-pstate.c
> @@ -699,20 +699,11 @@ static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
>   		pr_err("Boost mode is not supported by this processor or SBIOS\n");
>   		return -ENOTSUPP;
>   	}
> +	mutex_lock(&amd_pstate_driver_lock);
> +	ret = amd_pstate_cpu_boost(policy->cpu, state);
> +	mutex_unlock(&amd_pstate_driver_lock);
>   
> -	if (state)
> -		policy->cpuinfo.max_freq = cpudata->max_freq;
> -	else
> -		policy->cpuinfo.max_freq = cpudata->nominal_freq * 1000;
> -
> -	policy->max = policy->cpuinfo.max_freq;
> -
> -	ret = freq_qos_update_request(&cpudata->req[1],
> -				      policy->cpuinfo.max_freq);
> -	if (ret < 0)
> -		return ret;
> -
> -	return 0;
> +	return ret < 0 ? ret : 0;
>   }
>   
>   static int amd_pstate_boost_set(struct amd_cpudata *cpudata)
> @@ -1868,6 +1859,7 @@ static struct cpufreq_driver amd_pstate_epp_driver = {
>   	.resume		= amd_pstate_epp_resume,
>   	.update_limits	= amd_pstate_update_limits,
>   	.init_boost	= amd_pstate_init_boost,
> +	.set_boost	= amd_pstate_set_boost,
>   	.name		= "amd-pstate-epp",
>   	.attr		= amd_pstate_epp_attr,
>   };
Gautham R. Shenoy June 21, 2024, 5:39 a.m. UTC | #2
Perry Yuan <perry.yuan@amd.com> writes:

> Add support for the set_boost callback in the active mode driver to
> enable boost control via the cpufreq core. This ensures a consistent
> boost control interface across all pstate modes, including passive
> mode, guided mode, and active mode.
>
> With this addition, all three pstate modes can support the same boost
> control interface with unique interface and global CPB control. Each
> CPU also supports individual boost control, allowing global CPB to
> change all cores' boost states simultaneously. Specific CPUs can
> update their boost states separately, ensuring all cores' boost
> states are synchronized.
>
> Signed-off-by: Perry Yuan <perry.yuan@amd.com>


Acked-by: Gautham R. Shenoy <gautham.shenoy@amd.com>

With this patch, is there any specific reason why we still need
/sys/devices/system/cpu/amd_pstate/boost_enable ?


> ---
>  drivers/cpufreq/amd-pstate.c | 18 +++++-------------
>  1 file changed, 5 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> index 1c2320808ae1..299e52d4b17e 100644
> --- a/drivers/cpufreq/amd-pstate.c
> +++ b/drivers/cpufreq/amd-pstate.c
> @@ -699,20 +699,11 @@ static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
>  		pr_err("Boost mode is not supported by this processor or SBIOS\n");
>  		return -ENOTSUPP;
>  	}
> +	mutex_lock(&amd_pstate_driver_lock);
> +	ret = amd_pstate_cpu_boost(policy->cpu, state);
> +	mutex_unlock(&amd_pstate_driver_lock);
>  
> -	if (state)
> -		policy->cpuinfo.max_freq = cpudata->max_freq;
> -	else
> -		policy->cpuinfo.max_freq = cpudata->nominal_freq * 1000;
> -
> -	policy->max = policy->cpuinfo.max_freq;
> -
> -	ret = freq_qos_update_request(&cpudata->req[1],
> -				      policy->cpuinfo.max_freq);
> -	if (ret < 0)
> -		return ret;
> -
> -	return 0;
> +	return ret < 0 ? ret : 0;
>  }
>  
>  static int amd_pstate_boost_set(struct amd_cpudata *cpudata)
> @@ -1868,6 +1859,7 @@ static struct cpufreq_driver amd_pstate_epp_driver = {
>  	.resume		= amd_pstate_epp_resume,
>  	.update_limits	= amd_pstate_update_limits,
>  	.init_boost	= amd_pstate_init_boost,
> +	.set_boost	= amd_pstate_set_boost,
>  	.name		= "amd-pstate-epp",
>  	.attr		= amd_pstate_epp_attr,
>  };
> -- 
> 2.34.1

--
Thanks and Regards
gautham.
Yuan, Perry June 21, 2024, 5:54 a.m. UTC | #3
[AMD Official Use Only - AMD Internal Distribution Only]

Hi Gautham.

> -----Original Message-----
> From: Shenoy, Gautham Ranjal <gautham.shenoy@amd.com>
> Sent: Friday, June 21, 2024 1:39 PM
> To: Yuan, Perry <Perry.Yuan@amd.com>; rafael.j.wysocki@intel.com;
> Limonciello, Mario <Mario.Limonciello@amd.com>; viresh.kumar@linaro.org
> Cc: Huang, Shimmer <Shimmer.Huang@amd.com>; Du, Xiaojian
> <Xiaojian.Du@amd.com>; Meng, Li (Jassmine) <Li.Meng@amd.com>; linux-
> pm@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v12 6/9] cpufreq: amd-pstate: Add set_boost callback for
> active mode
>
> Perry Yuan <perry.yuan@amd.com> writes:
>
> > Add support for the set_boost callback in the active mode driver to
> > enable boost control via the cpufreq core. This ensures a consistent
> > boost control interface across all pstate modes, including passive
> > mode, guided mode, and active mode.
> >
> > With this addition, all three pstate modes can support the same boost
> > control interface with unique interface and global CPB control. Each
> > CPU also supports individual boost control, allowing global CPB to
> > change all cores' boost states simultaneously. Specific CPUs can
> > update their boost states separately, ensuring all cores' boost states
> > are synchronized.
> >
> > Signed-off-by: Perry Yuan <perry.yuan@amd.com>
>
>
> Acked-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
>
> With this patch, is there any specific reason why we still need
> /sys/devices/system/cpu/amd_pstate/boost_enable ?

Mario suggested to use global and PER CPU control in the previous thread.
So now we have one global "/sys/devices/system/cpu/amd_pstate/cpb_boost" and
Per CPU control "sys/devices/system/cpu/cpuX/cpufreq/boost "
You can see more details in the cover letter.

Perry.
>
>
> > ---
> >  drivers/cpufreq/amd-pstate.c | 18 +++++-------------
> >  1 file changed, 5 insertions(+), 13 deletions(-)
> >
> > diff --git a/drivers/cpufreq/amd-pstate.c
> > b/drivers/cpufreq/amd-pstate.c index 1c2320808ae1..299e52d4b17e
> 100644
> > --- a/drivers/cpufreq/amd-pstate.c
> > +++ b/drivers/cpufreq/amd-pstate.c
> > @@ -699,20 +699,11 @@ static int amd_pstate_set_boost(struct
> cpufreq_policy *policy, int state)
> >             pr_err("Boost mode is not supported by this processor or
> SBIOS\n");
> >             return -ENOTSUPP;
> >     }
> > +   mutex_lock(&amd_pstate_driver_lock);
> > +   ret = amd_pstate_cpu_boost(policy->cpu, state);
> > +   mutex_unlock(&amd_pstate_driver_lock);
> >
> > -   if (state)
> > -           policy->cpuinfo.max_freq = cpudata->max_freq;
> > -   else
> > -           policy->cpuinfo.max_freq = cpudata->nominal_freq * 1000;
> > -
> > -   policy->max = policy->cpuinfo.max_freq;
> > -
> > -   ret = freq_qos_update_request(&cpudata->req[1],
> > -                                 policy->cpuinfo.max_freq);
> > -   if (ret < 0)
> > -           return ret;
> > -
> > -   return 0;
> > +   return ret < 0 ? ret : 0;
> >  }
> >
> >  static int amd_pstate_boost_set(struct amd_cpudata *cpudata) @@
> > -1868,6 +1859,7 @@ static struct cpufreq_driver amd_pstate_epp_driver =
> {
> >     .resume         = amd_pstate_epp_resume,
> >     .update_limits  = amd_pstate_update_limits,
> >     .init_boost     = amd_pstate_init_boost,
> > +   .set_boost      = amd_pstate_set_boost,
> >     .name           = "amd-pstate-epp",
> >     .attr           = amd_pstate_epp_attr,
> >  };
> > --
> > 2.34.1
>
> --
> Thanks and Regards
> gautham.
diff mbox series

Patch

diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index 1c2320808ae1..299e52d4b17e 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -699,20 +699,11 @@  static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
 		pr_err("Boost mode is not supported by this processor or SBIOS\n");
 		return -ENOTSUPP;
 	}
+	mutex_lock(&amd_pstate_driver_lock);
+	ret = amd_pstate_cpu_boost(policy->cpu, state);
+	mutex_unlock(&amd_pstate_driver_lock);
 
-	if (state)
-		policy->cpuinfo.max_freq = cpudata->max_freq;
-	else
-		policy->cpuinfo.max_freq = cpudata->nominal_freq * 1000;
-
-	policy->max = policy->cpuinfo.max_freq;
-
-	ret = freq_qos_update_request(&cpudata->req[1],
-				      policy->cpuinfo.max_freq);
-	if (ret < 0)
-		return ret;
-
-	return 0;
+	return ret < 0 ? ret : 0;
 }
 
 static int amd_pstate_boost_set(struct amd_cpudata *cpudata)
@@ -1868,6 +1859,7 @@  static struct cpufreq_driver amd_pstate_epp_driver = {
 	.resume		= amd_pstate_epp_resume,
 	.update_limits	= amd_pstate_update_limits,
 	.init_boost	= amd_pstate_init_boost,
+	.set_boost	= amd_pstate_set_boost,
 	.name		= "amd-pstate-epp",
 	.attr		= amd_pstate_epp_attr,
 };