tools/power/x86/intel-speed-select: Extend core-power command set
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Sat, 14 Sep 2019 19:45:47 +0000 (12:45 -0700)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 19 Sep 2019 11:51:29 +0000 (14:51 +0300)
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>
tools/power/x86/intel-speed-select/isst-config.c
tools/power/x86/intel-speed-select/isst-core.c
tools/power/x86/intel-speed-select/isst-display.c
tools/power/x86/intel-speed-select/isst.h

index 889396d..6a54e16 100644 (file)
@@ -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");
 }
index 0bf341a..6dee533 100644 (file)
@@ -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;
index bd7aaf2..2e6e5fc 100644 (file)
@@ -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];
index 48655d0..09e16a4 100644 (file)
@@ -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