lkml.org 
[lkml]   [2022]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 08/11] cpufreq: amd_pstate: add driver working mode status sysfs entry
    Date
    From: Perry Yuan <Perry.Yuan@amd.com>

    While amd-pstate driver was loaded with specific driver mode, it will
    need to check which mode is enabled for the pstate driver,add this sysfs
    entry to show the current status

    $ cat /sys/devices/system/cpu/amd-pstate/status
    active

    Signed-off-by: Perry Yuan <Perry.Yuan@amd.com>
    ---
    drivers/cpufreq/amd-pstate.c | 44 ++++++++++++++++++++++++++++++++++++
    1 file changed, 44 insertions(+)

    diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
    index 6936df6e8642..7f748a579023 100644
    --- a/drivers/cpufreq/amd-pstate.c
    +++ b/drivers/cpufreq/amd-pstate.c
    @@ -66,6 +66,8 @@ static bool cppc_active;
    static int cppc_load __initdata;

    static struct cpufreq_driver *default_pstate_driver;
    +static struct cpufreq_driver amd_pstate_epp_driver;
    +static struct cpufreq_driver amd_pstate_driver;
    static struct amd_cpudata **all_cpu_data;
    static struct amd_pstate_params global_params;

    @@ -807,6 +809,46 @@ static ssize_t store_boost(struct kobject *a,
    return count;
    }

    +static ssize_t amd_pstate_show_status(char *buf)
    +{
    + if (!default_pstate_driver)
    + return sysfs_emit(buf, "off\n");
    +
    + return sysfs_emit(buf, "%s\n", default_pstate_driver == &amd_pstate_epp_driver ?
    + "active" : "passive");
    +}
    +
    +static int amd_pstate_update_status(const char *buf, size_t size)
    +{
    + /* FIXME! */
    + return -EOPNOTSUPP;
    +}
    +
    +static ssize_t show_status(struct kobject *kobj,
    + struct kobj_attribute *attr, char *buf)
    +{
    + ssize_t ret;
    +
    + mutex_lock(&amd_pstate_driver_lock);
    + ret = amd_pstate_show_status(buf);
    + mutex_unlock(&amd_pstate_driver_lock);
    +
    + return ret;
    +}
    +
    +static ssize_t store_status(struct kobject *a, struct kobj_attribute *b,
    + const char *buf, size_t count)
    +{
    + char *p = memchr(buf, '\n', count);
    + int ret;
    +
    + mutex_lock(&amd_pstate_driver_lock);
    + ret = amd_pstate_update_status(buf, p ? p - buf : count);
    + mutex_unlock(&amd_pstate_driver_lock);
    +
    + return ret < 0 ? ret : count;
    +}
    +
    cpufreq_freq_attr_ro(amd_pstate_max_freq);
    cpufreq_freq_attr_ro(amd_pstate_lowest_nonlinear_freq);

    @@ -814,6 +856,7 @@ cpufreq_freq_attr_ro(amd_pstate_highest_perf);
    cpufreq_freq_attr_rw(energy_performance_preference);
    cpufreq_freq_attr_ro(energy_performance_available_preferences);
    define_one_global_rw(boost);
    +define_one_global_rw(status);

    static struct freq_attr *amd_pstate_attr[] = {
    &amd_pstate_max_freq,
    @@ -833,6 +876,7 @@ static struct freq_attr *amd_pstate_epp_attr[] = {

    static struct attribute *pstate_global_attributes[] = {
    &boost.attr,
    + &status.attr,
    NULL
    };

    --
    2.34.1
    \
     
     \ /
      Last update: 2022-12-02 08:54    [W:2.369 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site