From 2c00056f54299983009c13a8790fa004e5337d16 Mon Sep 17 00:00:00 2001 From: Srinivas Pandruvada Date: Thu, 23 Feb 2023 06:36:46 -0800 Subject: [PATCH] tools/power/x86/intel-speed-select: Change TRL display for Emerald Rapids 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 --- tools/power/x86/intel-speed-select/isst-core-mbox.c | 15 +++++++++++++++ tools/power/x86/intel-speed-select/isst-display.c | 9 ++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/tools/power/x86/intel-speed-select/isst-core-mbox.c b/tools/power/x86/intel-speed-select/isst-core-mbox.c index c860be3..24bea57 100644 --- a/tools/power/x86/intel-speed-select/isst-core-mbox.c +++ b/tools/power/x86/intel-speed-select/isst-core-mbox.c @@ -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"; diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c index 0e364b3..0403d42 100644 --- a/tools/power/x86/intel-speed-select/isst-display.c +++ b/tools/power/x86/intel-speed-select/isst-display.c @@ -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)", -- 2.7.4