The output of turbo frequencies is also long (each bucket has
3 lines and the headers).  This can be shrunk down into a table that is
easier to consume for both scripts and humans.

Display the turbo and clip frequencies in a table.

Signed-off-by: Prarit Bhargava <pra...@redhat.com>
Cc: Srinivas Pandruvada <srinivas.pandruv...@linux.intel.com>
---
 .../x86/intel-speed-select/isst-display.c     | 116 ++++++++++--------
 1 file changed, 63 insertions(+), 53 deletions(-)

diff --git a/tools/power/x86/intel-speed-select/isst-display.c 
b/tools/power/x86/intel-speed-select/isst-display.c
index 9b0ae0831a60..16843e0f78f0 100644
--- a/tools/power/x86/intel-speed-select/isst-display.c
+++ b/tools/power/x86/intel-speed-select/isst-display.c
@@ -213,6 +213,52 @@ static void _isst_pbf_display_information(int cpu, FILE 
*outf, int level,
        format_and_print(outf, disp_level + 1, header, value);
 }
 
+static void _isst_fact_display_frequencies(FILE *outf, int fact_avx, int level,
+                                          char *description, int bucket,
+                                          int core_count, int sse,
+                                          int avx, int avx512)
+{
+       char header[256];
+       int ret;
+       void *header_ptr;
+       int header_size;
+
+       header_ptr = header;
+       if (core_count > 0)
+               ret = snprintf(header_ptr, sizeof(header), "%s%d %6d ",
+                              description, bucket, core_count);
+       else
+               ret = snprintf(header_ptr, sizeof(header), "%s%6s ",
+                              description, "-");
+
+
+       header_ptr += ret;
+       header_size = header_ptr - (void *) header;
+       if (fact_avx & 0x01)
+               ret = snprintf(header_ptr, header_size, "%12d ",
+                              sse * DISP_FREQ_MULTIPLIER);
+       else
+               ret = snprintf(header_ptr, header_size, "%12s ", "- ");
+
+       header_ptr += ret;
+       header_size = header_ptr - (void *) header;
+       if (fact_avx & 0x02)
+               ret = snprintf(header_ptr, header_size, "%12d ",
+                              avx * DISP_FREQ_MULTIPLIER);
+       else
+               ret = snprintf(header_ptr, header_size, "%12s ", "- ");
+
+       header_ptr += ret;
+       header_size = header_ptr - (void *) header;
+       if (fact_avx & 0x04)
+               ret = snprintf(header_ptr, header_size, "%12d",
+                              avx512 * DISP_FREQ_MULTIPLIER);
+       else
+               ret = snprintf(header_ptr, header_size, "%12s", "-");
+
+       format_and_print(outf, level + 1, header, NULL);
+}
+
 static void _isst_fact_display_information(int cpu, FILE *outf, int level,
                                           int fact_bucket, int fact_avx,
                                           struct isst_fact_info *fact_info,
@@ -220,11 +266,14 @@ static void _isst_fact_display_information(int cpu, FILE 
*outf, int level,
 {
        struct isst_fact_bucket_info *bucket_info = fact_info->bucket_info;
        char header[256];
-       char value[256];
        int j;
 
        snprintf(header, sizeof(header), "speed-select-turbo-freq");
        format_and_print(outf, base_level, header, NULL);
+       snprintf(header, sizeof(header),"%11s %s %s %s %s",
+                "", "core-count", "max-sse(MHz)" , "max-avx2(MHz)", 
"max-avx512(MHz)");
+       format_and_print(outf, base_level + 1, header, NULL);
+
        for (j = 0; j < ISST_FACT_MAX_BUCKETS; ++j) {
                if (fact_bucket != 0xff && fact_bucket != j)
                        continue;
@@ -232,59 +281,20 @@ static void _isst_fact_display_information(int cpu, FILE 
*outf, int level,
                if (!bucket_info[j].high_priority_cores_count)
                        break;
 
-               snprintf(header, sizeof(header), "bucket-%d", j);
-               format_and_print(outf, base_level + 1, header, NULL);
-
-               snprintf(header, sizeof(header), "high-priority-cores-count");
-               snprintf(value, sizeof(value), "%d",
-                        bucket_info[j].high_priority_cores_count);
-               format_and_print(outf, base_level + 2, header, value);
-
-               if (fact_avx & 0x01) {
-                       snprintf(header, sizeof(header),
-                                "high-priority-max-frequency(MHz)");
-                       snprintf(value, sizeof(value), "%d",
-                                bucket_info[j].sse_trl * DISP_FREQ_MULTIPLIER);
-                       format_and_print(outf, base_level + 2, header, value);
-               }
-
-               if (fact_avx & 0x02) {
-                       snprintf(header, sizeof(header),
-                                "high-priority-max-avx2-frequency(MHz)");
-                       snprintf(value, sizeof(value), "%d",
-                                bucket_info[j].avx_trl * DISP_FREQ_MULTIPLIER);
-                       format_and_print(outf, base_level + 2, header, value);
-               }
-
-               if (fact_avx & 0x04) {
-                       snprintf(header, sizeof(header),
-                                "high-priority-max-avx512-frequency(MHz)");
-                       snprintf(value, sizeof(value), "%d",
-                                bucket_info[j].avx512_trl *
-                                        DISP_FREQ_MULTIPLIER);
-                       format_and_print(outf, base_level + 2, header, value);
-               }
+               _isst_fact_display_frequencies(
+                       outf, fact_avx, base_level + 1, "bucket-", j,
+                       bucket_info[j].high_priority_cores_count,
+                       bucket_info[j].sse_trl,
+                       bucket_info[j].avx_trl,
+                       bucket_info[j].avx512_trl);
        }
-       snprintf(header, sizeof(header),
-                "speed-select-turbo-freq-clip-frequencies");
-       format_and_print(outf, base_level + 1, header, NULL);
-       snprintf(header, sizeof(header), "low-priority-max-frequency(MHz)");
-       snprintf(value, sizeof(value), "%d",
-                fact_info->lp_clipping_ratio_license_sse *
-                        DISP_FREQ_MULTIPLIER);
-       format_and_print(outf, base_level + 2, header, value);
-       snprintf(header, sizeof(header),
-                "low-priority-max-avx2-frequency(MHz)");
-       snprintf(value, sizeof(value), "%d",
-                fact_info->lp_clipping_ratio_license_avx2 *
-                        DISP_FREQ_MULTIPLIER);
-       format_and_print(outf, base_level + 2, header, value);
-       snprintf(header, sizeof(header),
-                "low-priority-max-avx512-frequency(MHz)");
-       snprintf(value, sizeof(value), "%d",
-                fact_info->lp_clipping_ratio_license_avx512 *
-                        DISP_FREQ_MULTIPLIER);
-       format_and_print(outf, base_level + 2, header, value);
+
+       _isst_fact_display_frequencies(
+                       outf, fact_avx, base_level + 1, "clip-freq", 1,
+                       -1, /* no core-count */
+                       fact_info->lp_clipping_ratio_license_sse,
+                       fact_info->lp_clipping_ratio_license_avx2,
+                       fact_info->lp_clipping_ratio_license_avx512);
 }
 
 static void isst_turbo_ratio_limits(FILE *outf, char *header_name,
-- 
2.21.0

Reply via email to