mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-25 20:15:08 +00:00
tools/power/x86/intel-speed-select: Extend core-power command set
Add additional command to get the clos enable and priority type. The current info option is actually dumping per clos QOS config, so name the command appropriately to get-config. Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
parent
d2d1f304dc
commit
188afed9db
@ -1133,6 +1133,40 @@ static void dump_clos_config(void)
|
||||
isst_ctdp_display_information_end(outf);
|
||||
}
|
||||
|
||||
static void get_clos_info_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
|
||||
void *arg4)
|
||||
{
|
||||
int enable, ret, prio_type;
|
||||
|
||||
ret = isst_clos_get_clos_information(cpu, &enable, &prio_type);
|
||||
if (ret)
|
||||
perror("isst_clos_get_info");
|
||||
else
|
||||
isst_clos_display_clos_information(cpu, outf, enable, prio_type);
|
||||
}
|
||||
|
||||
static void dump_clos_info(void)
|
||||
{
|
||||
if (cmd_help) {
|
||||
fprintf(stderr,
|
||||
"Print Intel Speed Select Technology core power information\n");
|
||||
fprintf(stderr, "\tSpecify targeted cpu id with [--cpu|-c]\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (!max_target_cpus) {
|
||||
fprintf(stderr,
|
||||
"Invalid target cpu. Specify with [-c|--cpu]\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
isst_ctdp_display_information_start(outf);
|
||||
for_each_online_target_cpu_in_set(get_clos_info_for_cpu, NULL,
|
||||
NULL, NULL, NULL);
|
||||
isst_ctdp_display_information_end(outf);
|
||||
|
||||
}
|
||||
|
||||
static void set_clos_config_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
|
||||
void *arg4)
|
||||
{
|
||||
@ -1286,10 +1320,11 @@ static struct process_cmd_struct isst_cmds[] = {
|
||||
{ "turbo-freq", "info", dump_fact_config },
|
||||
{ "turbo-freq", "enable", set_fact_enable },
|
||||
{ "turbo-freq", "disable", set_fact_disable },
|
||||
{ "core-power", "info", dump_clos_config },
|
||||
{ "core-power", "info", dump_clos_info },
|
||||
{ "core-power", "enable", set_clos_enable },
|
||||
{ "core-power", "disable", set_clos_disable },
|
||||
{ "core-power", "config", set_clos_config },
|
||||
{ "core-power", "get-config", dump_clos_config },
|
||||
{ "core-power", "assoc", set_clos_assoc },
|
||||
{ "core-power", "get-assoc", get_clos_assoc },
|
||||
{ NULL, NULL, NULL }
|
||||
@ -1491,6 +1526,7 @@ static void core_power_help(void)
|
||||
printf("\tenable\n");
|
||||
printf("\tdisable\n");
|
||||
printf("\tconfig\n");
|
||||
printf("\tget-config\n");
|
||||
printf("\tassoc\n");
|
||||
printf("\tget-assoc\n");
|
||||
}
|
||||
|
@ -619,6 +619,31 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int isst_clos_get_clos_information(int cpu, int *enable, int *type)
|
||||
{
|
||||
unsigned int resp;
|
||||
int ret;
|
||||
|
||||
ret = isst_send_mbox_command(cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, 0, 0,
|
||||
&resp);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
debug_printf("cpu:%d CLOS_PM_QOS_CONFIG resp:%x\n", cpu, resp);
|
||||
|
||||
if (resp & BIT(1))
|
||||
*enable = 1;
|
||||
else
|
||||
*enable = 0;
|
||||
|
||||
if (resp & BIT(2))
|
||||
*type = 1;
|
||||
else
|
||||
*type = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int isst_pm_qos_config(int cpu, int enable_clos, int priority_type)
|
||||
{
|
||||
unsigned int req, resp;
|
||||
|
@ -503,6 +503,34 @@ void isst_clos_display_information(int cpu, FILE *outf, int clos,
|
||||
format_and_print(outf, 1, NULL, NULL);
|
||||
}
|
||||
|
||||
void isst_clos_display_clos_information(int cpu, FILE *outf,
|
||||
int clos_enable, int type)
|
||||
{
|
||||
char header[256];
|
||||
char value[256];
|
||||
|
||||
snprintf(header, sizeof(header), "package-%d",
|
||||
get_physical_package_id(cpu));
|
||||
format_and_print(outf, 1, header, NULL);
|
||||
snprintf(header, sizeof(header), "die-%d", get_physical_die_id(cpu));
|
||||
format_and_print(outf, 2, header, NULL);
|
||||
snprintf(header, sizeof(header), "cpu-%d", cpu);
|
||||
format_and_print(outf, 3, header, NULL);
|
||||
|
||||
snprintf(header, sizeof(header), "core-power");
|
||||
format_and_print(outf, 4, header, NULL);
|
||||
|
||||
snprintf(header, sizeof(header), "enable-status");
|
||||
snprintf(value, sizeof(value), "%d", clos_enable);
|
||||
format_and_print(outf, 5, header, value);
|
||||
|
||||
snprintf(header, sizeof(header), "priority-type");
|
||||
snprintf(value, sizeof(value), "%d", type);
|
||||
format_and_print(outf, 5, header, value);
|
||||
|
||||
format_and_print(outf, 1, NULL, NULL);
|
||||
}
|
||||
|
||||
void isst_clos_display_assoc_information(int cpu, FILE *outf, int clos)
|
||||
{
|
||||
char header[256];
|
||||
|
@ -231,4 +231,9 @@ extern int isst_write_reg(int reg, unsigned int val);
|
||||
|
||||
extern void isst_display_result(int cpu, FILE *outf, char *feature, char *cmd,
|
||||
int result);
|
||||
|
||||
extern int isst_clos_get_clos_information(int cpu, int *enable, int *type);
|
||||
extern void isst_clos_display_clos_information(int cpu, FILE *outf,
|
||||
int clos_enable, int type);
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user