]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
cpufreq: amd-pstate: Add AMD P-State frequencies attributes
authorHuang Rui <ray.huang@amd.com>
Fri, 8 Apr 2022 02:38:32 +0000 (10:38 +0800)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 20 May 2022 12:41:52 +0000 (14:41 +0200)
BugLink: https://bugs.launchpad.net/bugs/1956509
Introduce sysfs attributes to get the different level processor
frequencies.

Signed-off-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
(cherry picked from commit ec4e3326a95507ea96fbad21b9472f5ba25500a7)
Signed-off-by: You-Sheng Yang <vicamo.yang@canonical.com>
Acked-by: Tim Gardner <tim.gardner@canonical.com>
Acked-by: Paolo Pisati <paolo.pisati@canonical.com>
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
drivers/cpufreq/amd-pstate.c

index 9e23efc7b9ebc5bcc476a840e2fa1bdac61cc026..dbb7eee11170e7aa6c82a0afed032c548a465098 100644 (file)
@@ -509,6 +509,52 @@ static int amd_pstate_cpu_exit(struct cpufreq_policy *policy)
        return 0;
 }
 
+/* Sysfs attributes */
+
+/*
+ * This frequency is to indicate the maximum hardware frequency.
+ * If boost is not active but supported, the frequency will be larger than the
+ * one in cpuinfo.
+ */
+static ssize_t show_amd_pstate_max_freq(struct cpufreq_policy *policy,
+                                       char *buf)
+{
+       int max_freq;
+       struct amd_cpudata *cpudata;
+
+       cpudata = policy->driver_data;
+
+       max_freq = amd_get_max_freq(cpudata);
+       if (max_freq < 0)
+               return max_freq;
+
+       return sprintf(&buf[0], "%u\n", max_freq);
+}
+
+static ssize_t show_amd_pstate_lowest_nonlinear_freq(struct cpufreq_policy *policy,
+                                                    char *buf)
+{
+       int freq;
+       struct amd_cpudata *cpudata;
+
+       cpudata = policy->driver_data;
+
+       freq = amd_get_lowest_nonlinear_freq(cpudata);
+       if (freq < 0)
+               return freq;
+
+       return sprintf(&buf[0], "%u\n", freq);
+}
+
+cpufreq_freq_attr_ro(amd_pstate_max_freq);
+cpufreq_freq_attr_ro(amd_pstate_lowest_nonlinear_freq);
+
+static struct freq_attr *amd_pstate_attr[] = {
+       &amd_pstate_max_freq,
+       &amd_pstate_lowest_nonlinear_freq,
+       NULL,
+};
+
 static struct cpufreq_driver amd_pstate_driver = {
        .flags          = CPUFREQ_CONST_LOOPS | CPUFREQ_NEED_UPDATE_LIMITS,
        .verify         = amd_pstate_verify,
@@ -517,6 +563,7 @@ static struct cpufreq_driver amd_pstate_driver = {
        .exit           = amd_pstate_cpu_exit,
        .set_boost      = amd_pstate_set_boost,
        .name           = "amd-pstate",
+       .attr           = amd_pstate_attr,
 };
 
 static int __init amd_pstate_init(void)