aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tools/power/x86/intel-speed-select/isst-core-tpmi.c
diff options
context:
space:
mode:
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>2023-05-18 09:49:35 -0700
committerSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>2023-06-12 16:03:25 -0700
commit4ebde55b7de1a25a9e20ae91e42157798ef8e958 (patch)
tree2984e4586245d0b8259b60630eaaca5c791cc7ce /tools/power/x86/intel-speed-select/isst-core-tpmi.c
parentplatform/x86: hp-wmi: Add thermal profile for Victus 16-d1xxx (diff)
downloadwireguard-linux-4ebde55b7de1a25a9e20ae91e42157798ef8e958.tar.xz
wireguard-linux-4ebde55b7de1a25a9e20ae91e42157798ef8e958.zip
tools/power/x86/intel-speed-select: Adjust scope of core-power config
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>
Diffstat (limited to 'tools/power/x86/intel-speed-select/isst-core-tpmi.c')
-rw-r--r--tools/power/x86/intel-speed-select/isst-core-tpmi.c43
1 files changed, 35 insertions, 8 deletions
diff --git a/tools/power/x86/intel-speed-select/isst-core-tpmi.c b/tools/power/x86/intel-speed-select/isst-core-tpmi.c
index 19caa9c78d41..3458768562e5 100644
--- a/tools/power/x86/intel-speed-select/isst-core-tpmi.c
+++ b/tools/power/x86/intel-speed-select/isst-core-tpmi.c
@@ -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);