]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cpufreq: CPPC: Add generic helpers for sysfs show/store
authorSumit Gupta <sumitg@nvidia.com>
Tue, 20 Jan 2026 14:56:15 +0000 (20:26 +0530)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 28 Jan 2026 18:10:50 +0000 (19:10 +0100)
Add generic helper functions for u64 sysfs attributes that follow the
common pattern of calling CPPC get/set APIs:
 - cppc_cpufreq_sysfs_show_u64(): reads value and handles -EOPNOTSUPP
 - cppc_cpufreq_sysfs_store_u64(): parses input and calls set function

Add CPPC_CPUFREQ_ATTR_RW_U64() macro to generate show/store functions
using these helpers, reducing boilerplate for simple attributes.

Convert auto_act_window and energy_performance_preference_val to use
the new macro.

No functional changes.

Signed-off-by: Sumit Gupta <sumitg@nvidia.com>
Reviewed-by: Lifeng Zheng <zhenglifeng1@huawei.com>
[ rjw: Retained empty code line after a conditional ]
Link: https://patch.msgid.link/20260120145623.2959636-2-sumitg@nvidia.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/cppc_cpufreq.c

index 36e8a75a37f1b56f3fee7b87d81a8847e1055474..7e8042efedd18c9c59086dcda091b6c523e3b162 100644 (file)
@@ -863,14 +863,13 @@ static ssize_t store_auto_select(struct cpufreq_policy *policy,
        return count;
 }
 
-static ssize_t show_auto_act_window(struct cpufreq_policy *policy, char *buf)
+static ssize_t cppc_cpufreq_sysfs_show_u64(unsigned int cpu,
+                                          int (*get_func)(int, u64 *),
+                                          char *buf)
 {
        u64 val;
-       int ret;
-
-       ret = cppc_get_auto_act_window(policy->cpu, &val);
+       int ret = get_func((int)cpu, &val);
 
-       /* show "<unsupported>" when this register is not supported by cpc */
        if (ret == -EOPNOTSUPP)
                return sysfs_emit(buf, "<unsupported>\n");
 
@@ -880,56 +879,39 @@ static ssize_t show_auto_act_window(struct cpufreq_policy *policy, char *buf)
        return sysfs_emit(buf, "%llu\n", val);
 }
 
-static ssize_t store_auto_act_window(struct cpufreq_policy *policy,
-                                    const char *buf, size_t count)
+static ssize_t cppc_cpufreq_sysfs_store_u64(unsigned int cpu,
+                                           int (*set_func)(int, u64),
+                                           const char *buf, size_t count)
 {
-       u64 usec;
+       u64 val;
        int ret;
 
-       ret = kstrtou64(buf, 0, &usec);
+       ret = kstrtou64(buf, 0, &val);
        if (ret)
                return ret;
 
-       ret = cppc_set_auto_act_window(policy->cpu, usec);
-       if (ret)
-               return ret;
+       ret = set_func((int)cpu, val);
 
-       return count;
+       return ret ? ret : count;
 }
 
-static ssize_t show_energy_performance_preference_val(struct cpufreq_policy *policy, char *buf)
-{
-       u64 val;
-       int ret;
-
-       ret = cppc_get_epp_perf(policy->cpu, &val);
-
-       /* show "<unsupported>" when this register is not supported by cpc */
-       if (ret == -EOPNOTSUPP)
-               return sysfs_emit(buf, "<unsupported>\n");
-
-       if (ret)
-               return ret;
-
-       return sysfs_emit(buf, "%llu\n", val);
+#define CPPC_CPUFREQ_ATTR_RW_U64(_name, _get_func, _set_func)          \
+static ssize_t show_##_name(struct cpufreq_policy *policy, char *buf)  \
+{                                                                      \
+       return cppc_cpufreq_sysfs_show_u64(policy->cpu, _get_func, buf);\
+}                                                                      \
+static ssize_t store_##_name(struct cpufreq_policy *policy,            \
+                            const char *buf, size_t count)             \
+{                                                                      \
+       return cppc_cpufreq_sysfs_store_u64(policy->cpu, _set_func,     \
+                                           buf, count);                \
 }
 
-static ssize_t store_energy_performance_preference_val(struct cpufreq_policy *policy,
-                                                      const char *buf, size_t count)
-{
-       u64 val;
-       int ret;
-
-       ret = kstrtou64(buf, 0, &val);
-       if (ret)
-               return ret;
-
-       ret = cppc_set_epp(policy->cpu, val);
-       if (ret)
-               return ret;
+CPPC_CPUFREQ_ATTR_RW_U64(auto_act_window, cppc_get_auto_act_window,
+                        cppc_set_auto_act_window)
 
-       return count;
-}
+CPPC_CPUFREQ_ATTR_RW_U64(energy_performance_preference_val,
+                        cppc_get_epp_perf, cppc_set_epp)
 
 cpufreq_freq_attr_ro(freqdomain_cpus);
 cpufreq_freq_attr_rw(auto_select);