Merge remote-tracking branch 'intel-speed-select/intel-sst' into review-hans
This commit is contained in:
@@ -15,7 +15,7 @@ struct process_cmd_struct {
|
||||
int arg;
|
||||
};
|
||||
|
||||
static const char *version_str = "v1.7";
|
||||
static const char *version_str = "v1.8";
|
||||
static const int supported_api_ver = 1;
|
||||
static struct isst_if_platform_info isst_platform_info;
|
||||
static char *progname;
|
||||
@@ -2304,6 +2304,102 @@ static void get_clos_assoc(int arg)
|
||||
isst_ctdp_display_information_end(outf);
|
||||
}
|
||||
|
||||
static void set_turbo_mode_for_cpu(int cpu, int status)
|
||||
{
|
||||
int base_freq;
|
||||
|
||||
if (status) {
|
||||
base_freq = get_cpufreq_base_freq(cpu);
|
||||
set_cpufreq_scaling_min_max(cpu, 1, base_freq);
|
||||
} else {
|
||||
set_scaling_max_to_cpuinfo_max(cpu);
|
||||
}
|
||||
|
||||
if (status) {
|
||||
isst_display_result(cpu, outf, "turbo-mode", "enable", 0);
|
||||
} else {
|
||||
isst_display_result(cpu, outf, "turbo-mode", "disable", 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void set_turbo_mode(int arg)
|
||||
{
|
||||
int i, enable = arg;
|
||||
|
||||
if (cmd_help) {
|
||||
if (enable)
|
||||
fprintf(stderr, "Set turbo mode enable\n");
|
||||
else
|
||||
fprintf(stderr, "Set turbo mode disable\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
isst_ctdp_display_information_start(outf);
|
||||
|
||||
for (i = 0; i < topo_max_cpus; ++i) {
|
||||
int online;
|
||||
|
||||
if (i)
|
||||
online = parse_int_file(
|
||||
1, "/sys/devices/system/cpu/cpu%d/online", i);
|
||||
else
|
||||
online =
|
||||
1; /* online entry for CPU 0 needs some special configs */
|
||||
|
||||
if (online)
|
||||
set_turbo_mode_for_cpu(i, enable);
|
||||
|
||||
}
|
||||
isst_ctdp_display_information_end(outf);
|
||||
}
|
||||
|
||||
static void get_set_trl(int cpu, void *arg1, void *arg2, void *arg3,
|
||||
void *arg4)
|
||||
{
|
||||
unsigned long long trl;
|
||||
int set = *(int *)arg4;
|
||||
int ret;
|
||||
|
||||
if (set && !fact_trl) {
|
||||
isst_display_error_info_message(1, "Invalid TRL. Specify with [-t|--trl]", 0, 0);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (set) {
|
||||
ret = isst_set_trl(cpu, fact_trl);
|
||||
isst_display_result(cpu, outf, "turbo-mode", "set-trl", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = isst_get_trl(cpu, &trl);
|
||||
if (ret)
|
||||
isst_display_result(cpu, outf, "turbo-mode", "get-trl", ret);
|
||||
else
|
||||
isst_trl_display_information(cpu, outf, trl);
|
||||
}
|
||||
|
||||
static void process_trl(int arg)
|
||||
{
|
||||
if (cmd_help) {
|
||||
if (arg) {
|
||||
fprintf(stderr, "Set TRL (turbo ratio limits)\n");
|
||||
fprintf(stderr, "\t t|--trl: Specify turbo ratio limit for setting TRL\n");
|
||||
} else {
|
||||
fprintf(stderr, "Get TRL (turbo ratio limits)\n");
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
isst_ctdp_display_information_start(outf);
|
||||
if (max_target_cpus)
|
||||
for_each_online_target_cpu_in_set(get_set_trl, NULL,
|
||||
NULL, NULL, &arg);
|
||||
else
|
||||
for_each_online_package_in_set(get_set_trl, NULL,
|
||||
NULL, NULL, &arg);
|
||||
isst_ctdp_display_information_end(outf);
|
||||
}
|
||||
|
||||
static struct process_cmd_struct clx_n_cmds[] = {
|
||||
{ "perf-profile", "info", dump_isst_config, 0 },
|
||||
{ "base-freq", "info", dump_pbf_config, 0 },
|
||||
@@ -2334,6 +2430,10 @@ static struct process_cmd_struct isst_cmds[] = {
|
||||
{ "core-power", "get-config", dump_clos_config, 0 },
|
||||
{ "core-power", "assoc", set_clos_assoc, 0 },
|
||||
{ "core-power", "get-assoc", get_clos_assoc, 0 },
|
||||
{ "turbo-mode", "enable", set_turbo_mode, 0 },
|
||||
{ "turbo-mode", "disable", set_turbo_mode, 1 },
|
||||
{ "turbo-mode", "get-trl", process_trl, 0 },
|
||||
{ "turbo-mode", "set-trl", process_trl, 1 },
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -2549,6 +2649,16 @@ static void fact_help(void)
|
||||
printf("\tcommand : disable\n");
|
||||
}
|
||||
|
||||
static void turbo_mode_help(void)
|
||||
{
|
||||
printf("turbo-mode:\tEnables users to enable/disable turbo mode by adjusting frequency settings. Also allows to get and set turbo ratio limits (TRL).\n");
|
||||
printf("\tcommand : enable\n");
|
||||
printf("\tcommand : disable\n");
|
||||
printf("\tcommand : get-trl\n");
|
||||
printf("\tcommand : set-trl\n");
|
||||
}
|
||||
|
||||
|
||||
static void core_power_help(void)
|
||||
{
|
||||
printf("core-power:\tInterface that allows user to define per core/tile\n\
|
||||
@@ -2573,6 +2683,7 @@ static struct process_cmd_help_struct isst_help_cmds[] = {
|
||||
{ "base-freq", pbf_help },
|
||||
{ "turbo-freq", fact_help },
|
||||
{ "core-power", core_power_help },
|
||||
{ "turbo-mode", turbo_mode_help },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -2636,7 +2747,7 @@ static void usage(void)
|
||||
if (is_clx_n_platform())
|
||||
printf("\nFEATURE : [perf-profile|base-freq]\n");
|
||||
else
|
||||
printf("\nFEATURE : [perf-profile|base-freq|turbo-freq|core-power]\n");
|
||||
printf("\nFEATURE : [perf-profile|base-freq|turbo-freq|core-power|turbo-mode]\n");
|
||||
printf("\nFor help on each feature, use -h|--help\n");
|
||||
printf("\tFor example: intel-speed-select perf-profile -h\n");
|
||||
|
||||
|
||||
@@ -665,6 +665,17 @@ int isst_get_fact_info(int cpu, int level, int fact_bucket, struct isst_fact_inf
|
||||
return 0;
|
||||
}
|
||||
|
||||
int isst_get_trl(int cpu, unsigned long long *trl)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = isst_send_msr_command(cpu, 0x1AD, 0, trl);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int isst_set_trl(int cpu, unsigned long long trl)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -763,3 +763,21 @@ void isst_display_error_info_message(int error, char *msg, int arg_valid, int ar
|
||||
if (!start)
|
||||
format_and_print(outf, 0, NULL, NULL);
|
||||
}
|
||||
|
||||
void isst_trl_display_information(int cpu, FILE *outf, unsigned long long trl)
|
||||
{
|
||||
char header[256];
|
||||
char value[256];
|
||||
int level;
|
||||
|
||||
level = print_package_info(cpu, outf);
|
||||
|
||||
snprintf(header, sizeof(header), "get-trl");
|
||||
format_and_print(outf, level + 1, header, NULL);
|
||||
|
||||
snprintf(header, sizeof(header), "trl");
|
||||
snprintf(value, sizeof(value), "0x%llx", trl);
|
||||
format_and_print(outf, level + 2, header, value);
|
||||
|
||||
format_and_print(outf, level, NULL, NULL);
|
||||
}
|
||||
|
||||
@@ -228,6 +228,7 @@ extern void isst_fact_display_information(int cpu, FILE *outf, int level,
|
||||
int fact_bucket, int fact_avx,
|
||||
struct isst_fact_info *fact_info);
|
||||
extern int isst_set_trl(int cpu, unsigned long long trl);
|
||||
extern int isst_get_trl(int cpu, unsigned long long *trl);
|
||||
extern int isst_set_trl_from_current_tdp(int cpu, unsigned long long trl);
|
||||
extern int isst_get_config_tdp_lock_status(int cpu);
|
||||
|
||||
@@ -256,4 +257,5 @@ extern int get_cpufreq_base_freq(int cpu);
|
||||
extern int isst_read_pm_config(int cpu, int *cp_state, int *cp_cap);
|
||||
extern void isst_display_error_info_message(int error, char *msg, int arg_valid, int arg);
|
||||
extern int is_skx_based_platform(void);
|
||||
extern void isst_trl_display_information(int cpu, FILE *outf, unsigned long long trl);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user