Commit 188afed9 authored by Srinivas Pandruvada's avatar Srinivas Pandruvada Committed by Andy Shevchenko
Browse files

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: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
parent d2d1f304
Loading
Loading
Loading
Loading
+37 −1
Original line number Diff line number Diff line
@@ -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");
}
+25 −0
Original line number Diff line number Diff line
@@ -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;
+28 −0
Original line number Diff line number Diff line
@@ -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];
+5 −0
Original line number Diff line number Diff line
@@ -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