tools/power/x86/intel-speed-select: Change TRL display for Emerald Rapids
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Thu, 23 Feb 2023 14:36:46 +0000 (06:36 -0800)
committerSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Wed, 22 Mar 2023 20:41:17 +0000 (13:41 -0700)
Emerald Rapids doesn't specify TRL (Turbo Ratio Limits) based instruction
types. Instead it specifies 5 TRL levels, which can be anyone of the
instruction types.

Increase TRL levels to 5 for Emerald Rapids. Also change display to show
by level number. Show only non zero level values.

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

index c860be3..24bea57 100644 (file)
@@ -8,6 +8,8 @@
 static int mbox_delay;
 static int mbox_retries = 3;
 
+#define MAX_TRL_LEVELS_EMR     5
+
 static int mbox_get_disp_freq_multiplier(void)
 {
         return DISP_FREQ_MULTIPLIER;
@@ -15,11 +17,24 @@ static int mbox_get_disp_freq_multiplier(void)
 
 static int mbox_get_trl_max_levels(void)
 {
+       if (is_emr_platform())
+               return MAX_TRL_LEVELS_EMR;
+
         return 3;
 }
 
 static char *mbox_get_trl_level_name(int level)
 {
+       if (is_emr_platform()) {
+               static char level_str[18];
+
+               if (level >= MAX_TRL_LEVELS_EMR)
+                       return NULL;
+
+               snprintf(level_str, sizeof(level_str), "level-%d", level);
+               return level_str;
+       }
+
         switch (level) {
         case 0:
                 return "sse";
index 0e364b3..0403d42 100644 (file)
@@ -283,9 +283,9 @@ static void _isst_fact_display_information(struct isst_id *id, FILE *outf, int l
                         bucket_info[j].hp_cores);
                format_and_print(outf, base_level + 2, header, value);
                for (i = 0; i < trl_max_levels; i++) {
-                       if (fact_avx != 0xFF && !(fact_avx & (1 << i)))
+                       if (!bucket_info[j].hp_ratios[i] || (fact_avx != 0xFF && !(fact_avx & (1 << i))))
                                continue;
-                       if (i == 0 && api_version() == 1)
+                       if (i == 0 && api_version() == 1 && !is_emr_platform())
                                snprintf(header, sizeof(header),
                                        "high-priority-max-frequency(MHz)");
                        else
@@ -301,8 +301,11 @@ static void _isst_fact_display_information(struct isst_id *id, FILE *outf, int l
        format_and_print(outf, base_level + 1, header, NULL);
 
        for (j = 0; j < trl_max_levels; j++) {
+               if (!fact_info->lp_ratios[j])
+                       continue;
+
                /* No AVX level name for SSE to be consistent with previous formatting */
-               if (j == 0 && api_version() == 1)
+               if (j == 0 && api_version() == 1 && !is_emr_platform())
                        snprintf(header, sizeof(header), "low-priority-max-frequency(MHz)");
                else
                        snprintf(header, sizeof(header), "low-priority-max-%s-frequency(MHz)",