tools/power/x86/intel-speed-select: Support SST PP revision 2 fields
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Sun, 30 Mar 2025 05:34:29 +0000 (22:34 -0700)
committerSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Fri, 9 May 2025 17:58:39 +0000 (10:58 -0700)
Display fields added by SST PP revision 2. They include:
uncore P0 (max frequency), P1 (base frequency) and Pm (min frequency)
for uncore fabric 1.

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

index da53aaa..4f389e1 100644 (file)
@@ -227,6 +227,7 @@ static int tpmi_get_ctdp_control(struct isst_id *id, int config_index,
 static int tpmi_get_tdp_info(struct isst_id *id, int config_index,
                             struct isst_pkg_ctdp_level_info *ctdp_level)
 {
+       struct isst_perf_level_fabric_info fabric_info;
        struct isst_perf_level_data_info info;
        int ret;
 
@@ -253,6 +254,17 @@ static int tpmi_get_tdp_info(struct isst_id *id, int config_index,
        ctdp_level->uncore_p1 = info.p1_fabric_freq_mhz;
        ctdp_level->uncore_pm = info.pm_fabric_freq_mhz;
 
+       fabric_info.socket_id = id->pkg;
+       fabric_info.power_domain_id = id->punit;
+       fabric_info.level = config_index;
+
+       ret = tpmi_process_ioctl(ISST_IF_GET_PERF_LEVEL_FABRIC_INFO, &fabric_info);
+       if (ret != -1) {
+               ctdp_level->uncore1_p0 = fabric_info.p0_fabric_freq_mhz[1];
+               ctdp_level->uncore1_p1 = fabric_info.p1_fabric_freq_mhz[1];
+               ctdp_level->uncore1_pm = fabric_info.pm_fabric_freq_mhz[1];
+       }
+
        debug_printf
            ("cpu:%d ctdp:%d CONFIG_TDP_GET_TDP_INFO tdp_ratio:%d pkg_tdp:%d ctdp_level->t_proc_hot:%d\n",
             id->cpu, config_index, ctdp_level->tdp_ratio, ctdp_level->pkg_tdp,
index da5a59a..e4884eb 100644 (file)
@@ -460,6 +460,26 @@ void isst_ctdp_display_information(struct isst_id *id, FILE *outf, int tdp_level
                        format_and_print(outf, level + 2, header, value);
                }
 
+               if (ctdp_level->uncore1_p1) {
+                       snprintf(header, sizeof(header), "uncore-1-frequency-base(MHz)");
+                       snprintf(value, sizeof(value), "%d",
+                                ctdp_level->uncore1_p1 * isst_get_disp_freq_multiplier());
+                       format_and_print(outf, level + 2, header, value);
+               }
+               if (ctdp_level->uncore1_pm) {
+                       snprintf(header, sizeof(header), "uncore-1-frequency-min(MHz)");
+                       snprintf(value, sizeof(value), "%d",
+                                ctdp_level->uncore1_pm * isst_get_disp_freq_multiplier());
+                       format_and_print(outf, level + 2, header, value);
+               }
+
+               if (ctdp_level->uncore1_p0) {
+                       snprintf(header, sizeof(header), "uncore-1-frequency-max(MHz)");
+                       snprintf(value, sizeof(value), "%d",
+                                ctdp_level->uncore1_p0 * isst_get_disp_freq_multiplier());
+                       format_and_print(outf, level + 2, header, value);
+               }
+
                if (ctdp_level->mem_freq) {
                        snprintf(header, sizeof(header), "max-mem-frequency(MHz)");
                        snprintf(value, sizeof(value), "%d",
index 39ee756..960f647 100644 (file)
@@ -147,6 +147,9 @@ struct isst_pkg_ctdp_level_info {
        int uncore_p0;
        int uncore_p1;
        int uncore_pm;
+       int uncore1_p0;
+       int uncore1_p1;
+       int uncore1_pm;
        int sse_p1;
        int avx2_p1;
        int avx512_p1;