lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 243/800] tools/power/x86/intel-speed-select: Fix uncore memory frequency display
    Date
    From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>

    [ Upstream commit 159f130f60f402273b235801d1fde3fc115c6795 ]

    The uncore memory frequency value from the mailbox command
    CONFIG_TDP_GET_MEM_FREQ needs to be scaled based on the platform for
    display. There is no single constant multiplier.

    This change introduces CPU model specific memory frequency multiplier.

    Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/power/x86/intel-speed-select/isst-config.c | 16 ++++++++++++++++
    tools/power/x86/intel-speed-select/isst-core.c | 15 +++++++++++++++
    .../power/x86/intel-speed-select/isst-display.c | 2 +-
    tools/power/x86/intel-speed-select/isst.h | 2 ++
    4 files changed, 34 insertions(+), 1 deletion(-)

    diff --git a/tools/power/x86/intel-speed-select/isst-config.c b/tools/power/x86/intel-speed-select/isst-config.c
    index ab940c508ef0..d4f0a7872e49 100644
    --- a/tools/power/x86/intel-speed-select/isst-config.c
    +++ b/tools/power/x86/intel-speed-select/isst-config.c
    @@ -106,6 +106,22 @@ int is_skx_based_platform(void)
    return 0;
    }

    +int is_spr_platform(void)
    +{
    + if (cpu_model == 0x8F)
    + return 1;
    +
    + return 0;
    +}
    +
    +int is_icx_platform(void)
    +{
    + if (cpu_model == 0x6A || cpu_model == 0x6C)
    + return 1;
    +
    + return 0;
    +}
    +
    static int update_cpu_model(void)
    {
    unsigned int ebx, ecx, edx;
    diff --git a/tools/power/x86/intel-speed-select/isst-core.c b/tools/power/x86/intel-speed-select/isst-core.c
    index 6a26d5769984..4431c8a0d40a 100644
    --- a/tools/power/x86/intel-speed-select/isst-core.c
    +++ b/tools/power/x86/intel-speed-select/isst-core.c
    @@ -201,6 +201,7 @@ void isst_get_uncore_mem_freq(int cpu, int config_index,
    {
    unsigned int resp;
    int ret;
    +
    ret = isst_send_mbox_command(cpu, CONFIG_TDP, CONFIG_TDP_GET_MEM_FREQ,
    0, config_index, &resp);
    if (ret) {
    @@ -209,6 +210,20 @@ void isst_get_uncore_mem_freq(int cpu, int config_index,
    }

    ctdp_level->mem_freq = resp & GENMASK(7, 0);
    + if (is_spr_platform()) {
    + ctdp_level->mem_freq *= 200;
    + } else if (is_icx_platform()) {
    + if (ctdp_level->mem_freq < 7) {
    + ctdp_level->mem_freq = (12 - ctdp_level->mem_freq) * 133.33 * 2 * 10;
    + ctdp_level->mem_freq /= 10;
    + if (ctdp_level->mem_freq % 10 > 5)
    + ctdp_level->mem_freq++;
    + } else {
    + ctdp_level->mem_freq = 0;
    + }
    + } else {
    + ctdp_level->mem_freq = 0;
    + }
    debug_printf(
    "cpu:%d ctdp:%d CONFIG_TDP_GET_MEM_FREQ resp:%x uncore mem_freq:%d\n",
    cpu, config_index, resp, ctdp_level->mem_freq);
    diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c
    index 3bf1820c0da1..f97d8859ada7 100644
    --- a/tools/power/x86/intel-speed-select/isst-display.c
    +++ b/tools/power/x86/intel-speed-select/isst-display.c
    @@ -446,7 +446,7 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
    if (ctdp_level->mem_freq) {
    snprintf(header, sizeof(header), "mem-frequency(MHz)");
    snprintf(value, sizeof(value), "%d",
    - ctdp_level->mem_freq * DISP_FREQ_MULTIPLIER);
    + ctdp_level->mem_freq);
    format_and_print(outf, level + 2, header, value);
    }

    diff --git a/tools/power/x86/intel-speed-select/isst.h b/tools/power/x86/intel-speed-select/isst.h
    index 0cac6c54be87..1aa15d5ea57c 100644
    --- a/tools/power/x86/intel-speed-select/isst.h
    +++ b/tools/power/x86/intel-speed-select/isst.h
    @@ -257,5 +257,7 @@ extern int get_cpufreq_base_freq(int cpu);
    extern int isst_read_pm_config(int cpu, int *cp_state, int *cp_cap);
    extern void isst_display_error_info_message(int error, char *msg, int arg_valid, int arg);
    extern int is_skx_based_platform(void);
    +extern int is_spr_platform(void);
    +extern int is_icx_platform(void);
    extern void isst_trl_display_information(int cpu, FILE *outf, unsigned long long trl);
    #endif
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 10:41    [W:2.208 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site