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 <prarit@xxxxxxxxxx> Cc: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx> --- .../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