lkml.org 
[lkml]   [2021]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/19] cpufreq: amd: add amd-pstate frequencies attributes
    Date
    Introduce sysfs attributes to get the different level processor
    frequencies.

    Signed-off-by: Huang Rui <ray.huang@amd.com>
    ---
    drivers/cpufreq/amd-pstate.c | 80 +++++++++++++++++++++++++++++++++++-
    1 file changed, 79 insertions(+), 1 deletion(-)

    diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
    index 48dedd5af101..3c727a22cb69 100644
    --- a/drivers/cpufreq/amd-pstate.c
    +++ b/drivers/cpufreq/amd-pstate.c
    @@ -577,16 +577,94 @@ static int amd_pstate_cpu_exit(struct cpufreq_policy *policy)
    return 0;
    }

    -static ssize_t show_is_amd_pstate_enabled(struct cpufreq_policy *policy,
    +/* Sysfs attributes */
    +
    +static ssize_t show_amd_pstate_max_freq(struct cpufreq_policy *policy,
    char *buf)
    +{
    + int ret = 0, max_freq;
    + struct amd_cpudata *cpudata;
    +
    + cpudata = policy->driver_data;
    +
    + max_freq = amd_get_max_freq(cpudata);
    + if (max_freq < 0)
    + return max_freq;
    +
    + ret += sprintf(&buf[ret], "%u\n", max_freq);
    +
    + return ret;
    +}
    +
    +static ssize_t show_amd_pstate_nominal_freq(struct cpufreq_policy *policy,
    + char *buf)
    +{
    + int ret = 0, nominal_freq;
    + struct amd_cpudata *cpudata;
    +
    + cpudata = policy->driver_data;
    +
    + nominal_freq = amd_get_nominal_freq(cpudata);
    + if (nominal_freq < 0)
    + return nominal_freq;
    +
    + ret += sprintf(&buf[ret], "%u\n", nominal_freq);
    +
    + return ret;
    +}
    +
    +static ssize_t
    +show_amd_pstate_lowest_nonlinear_freq(struct cpufreq_policy *policy, char *buf)
    +{
    + int ret = 0, freq;
    + struct amd_cpudata *cpudata;
    +
    + cpudata = policy->driver_data;
    +
    + freq = amd_get_lowest_nonlinear_freq(cpudata);
    + if (freq < 0)
    + return freq;
    +
    + ret += sprintf(&buf[ret], "%u\n", freq);
    +
    + return ret;
    +}
    +
    +static ssize_t show_amd_pstate_min_freq(struct cpufreq_policy *policy, char *buf)
    +{
    + int ret = 0;
    + int freq;
    + struct amd_cpudata *cpudata;
    +
    + cpudata = policy->driver_data;
    +
    + freq = amd_get_min_freq(cpudata);
    + if (freq < 0)
    + return freq;
    +
    + ret += sprintf(&buf[ret], "%u\n", freq);
    +
    + return ret;
    +}
    +
    +static ssize_t show_is_amd_pstate_enabled(struct cpufreq_policy *policy,
    + char *buf)
    {
    return sprintf(&buf[0], "%d\n", acpi_cpc_valid() ? 1 : 0);
    }

    cpufreq_freq_attr_ro(is_amd_pstate_enabled);
    +cpufreq_freq_attr_ro(amd_pstate_max_freq);
    +cpufreq_freq_attr_ro(amd_pstate_nominal_freq);
    +cpufreq_freq_attr_ro(amd_pstate_lowest_nonlinear_freq);
    +cpufreq_freq_attr_ro(amd_pstate_min_freq);

    static struct freq_attr *amd_pstate_attr[] = {
    &is_amd_pstate_enabled,
    + &amd_pstate_max_freq,
    + &amd_pstate_nominal_freq,
    + &amd_pstate_lowest_nonlinear_freq,
    + &amd_pstate_min_freq,
    NULL,
    };

    --
    2.25.1
    \
     
     \ /
      Last update: 2021-09-08 17:02    [W:4.154 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site