tools/power/x86/intel-speed-select: Adjust scope of core-power config
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Thu, 18 May 2023 16:49:35 +0000 (09:49 -0700)
committerSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Mon, 12 Jun 2023 23:03:25 +0000 (16:03 -0700)
When core-power configuration or enabled is modified, this is only done
for compute dies. But the config must also be set to cores with no CPUs.
Without this the configuration is not affective.

On displaying config information, allow display for non compute dies
also.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
tools/power/x86/intel-speed-select/isst-config.c
tools/power/x86/intel-speed-select/isst-core-tpmi.c

index 2ca0cedd418f0605793ce340060afd64d21628a1..5f8905a788a8040ed5e8c282eb98285a06a9164d 100644 (file)
@@ -2261,9 +2261,6 @@ static void dump_clos_config_for_cpu(struct isst_id *id, void *arg1, void *arg2,
        struct isst_clos_config clos_config;
        int ret;
 
-       if (id->cpu < 0)
-               return;
-
        ret = isst_pm_get_clos(id, current_clos, &clos_config);
        if (ret)
                isst_display_error_info_message(1, "isst_pm_get_clos failed", 0, 0);
index 19caa9c78d413dac3e72be0b8e0806e90c4b96ce..3458768562e5e48cf72b85472a7d8dfab27e1cff 100644 (file)
@@ -641,16 +641,30 @@ static int tpmi_pm_qos_config(struct isst_id *id, int enable_clos,
                              int priority_type)
 {
        struct isst_core_power info;
-       int ret;
+       int i, ret, saved_punit;
 
        info.get_set = 1;
        info.socket_id = id->pkg;
        info.power_domain_id = id->punit;
        info.enable = enable_clos;
        info.priority_type = priority_type;
-       ret = tpmi_process_ioctl(ISST_IF_CORE_POWER_STATE, &info);
-       if (ret == -1)
-               return ret;
+
+       saved_punit = id->punit;
+
+       /* Set for all other dies also. This is per package setting */
+       for (i = 0; i < MAX_PUNIT_PER_DIE; i++) {
+               id->punit = i;
+               if (isst_is_punit_valid(id)) {
+                       info.power_domain_id = i;
+                       ret = tpmi_process_ioctl(ISST_IF_CORE_POWER_STATE, &info);
+                       if (ret == -1) {
+                               id->punit = saved_punit;
+                               return ret;
+                       }
+               }
+       }
+
+       id->punit = saved_punit;
 
        return 0;
 }
@@ -686,7 +700,7 @@ int tpmi_set_clos(struct isst_id *id, int clos,
                  struct isst_clos_config *clos_config)
 {
        struct isst_clos_param info;
-       int ret;
+       int i, ret, saved_punit;
 
        info.get_set = 1;
        info.socket_id = id->pkg;
@@ -702,9 +716,22 @@ int tpmi_set_clos(struct isst_id *id, int clos,
        if (info.max_freq_mhz <= 0xff)
                info.max_freq_mhz *= 100;
 
-       ret = tpmi_process_ioctl(ISST_IF_CLOS_PARAM, &info);
-       if (ret == -1)
-               return ret;
+       saved_punit = id->punit;
+
+       /* Set for all other dies also. This is per package setting */
+       for (i = 0; i < MAX_PUNIT_PER_DIE; i++) {
+               id->punit = i;
+               if (isst_is_punit_valid(id)) {
+                       info.power_domain_id = i;
+                       ret = tpmi_process_ioctl(ISST_IF_CLOS_PARAM, &info);
+                       if (ret == -1) {
+                               id->punit = saved_punit;
+                               return ret;
+                       }
+               }
+       }
+
+       id->punit = saved_punit;
 
        debug_printf("set cpu:%d clos:%d min:%d max:%d\n", id->cpu, clos,
                     clos_config->clos_min, clos_config->clos_max);