cpupower: Add "perf" option to print AMD P-State information

Add "-c --perf" option in cpupower-frequency-info to get the performance
and frequency values for AMD P-State.

Commit message amended:
Shuah Khan <skhan@linuxfoundation.org>

Reviewed-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
Huang Rui 2022-02-22 23:34:26 +08:00 committed by Shuah Khan
parent d8363e2917
commit 8382dce5e4
2 changed files with 21 additions and 1 deletions

View File

@ -53,6 +53,9 @@ human\-readable output for the \-f, \-w, \-s and \-y parameters.
\fB\-n\fR \fB\-\-no-rounding\fR \fB\-n\fR \fB\-\-no-rounding\fR
Output frequencies and latencies without rounding off values. Output frequencies and latencies without rounding off values.
.TP .TP
\fB\-c\fR \fB\-\-perf\fR
Get performances and frequencies capabilities of CPPC, by reading it from hardware (only available on the hardware with CPPC).
.TP
.SH "REMARKS" .SH "REMARKS"
.LP .LP
By default only values of core zero are displayed. How to display settings of By default only values of core zero are displayed. How to display settings of

View File

@ -438,6 +438,17 @@ static int get_latency(unsigned int cpu, unsigned int human)
return 0; return 0;
} }
/* --performance / -c */
static int get_perf_cap(unsigned int cpu)
{
if (cpupower_cpu_info.vendor == X86_VENDOR_AMD &&
cpupower_cpu_info.caps & CPUPOWER_CAP_AMD_PSTATE)
amd_pstate_show_perf_and_freq(cpu, no_rounding);
return 0;
}
static void debug_output_one(unsigned int cpu) static void debug_output_one(unsigned int cpu)
{ {
struct cpufreq_available_frequencies *freqs; struct cpufreq_available_frequencies *freqs;
@ -466,6 +477,7 @@ static void debug_output_one(unsigned int cpu)
if (get_freq_hardware(cpu, 1) < 0) if (get_freq_hardware(cpu, 1) < 0)
get_freq_kernel(cpu, 1); get_freq_kernel(cpu, 1);
get_boost_mode(cpu); get_boost_mode(cpu);
get_perf_cap(cpu);
} }
static struct option info_opts[] = { static struct option info_opts[] = {
@ -484,6 +496,7 @@ static struct option info_opts[] = {
{"proc", no_argument, NULL, 'o'}, {"proc", no_argument, NULL, 'o'},
{"human", no_argument, NULL, 'm'}, {"human", no_argument, NULL, 'm'},
{"no-rounding", no_argument, NULL, 'n'}, {"no-rounding", no_argument, NULL, 'n'},
{"performance", no_argument, NULL, 'c'},
{ }, { },
}; };
@ -497,7 +510,7 @@ int cmd_freq_info(int argc, char **argv)
int output_param = 0; int output_param = 0;
do { do {
ret = getopt_long(argc, argv, "oefwldpgrasmybn", info_opts, ret = getopt_long(argc, argv, "oefwldpgrasmybnc", info_opts,
NULL); NULL);
switch (ret) { switch (ret) {
case '?': case '?':
@ -520,6 +533,7 @@ int cmd_freq_info(int argc, char **argv)
case 'e': case 'e':
case 's': case 's':
case 'y': case 'y':
case 'c':
if (output_param) { if (output_param) {
output_param = -1; output_param = -1;
cont = 0; cont = 0;
@ -626,6 +640,9 @@ int cmd_freq_info(int argc, char **argv)
case 'y': case 'y':
ret = get_latency(cpu, human); ret = get_latency(cpu, human);
break; break;
case 'c':
ret = get_perf_cap(cpu);
break;
} }
if (ret) if (ret)
return ret; return ret;