tools/power/x86/intel-speed-select: Abstract get_get_trls
authorZhang Rui <rui.zhang@intel.com>
Mon, 8 Aug 2022 17:52:11 +0000 (01:52 +0800)
committerSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Wed, 22 Mar 2023 20:36:51 +0000 (13:36 -0700)
Allow platform specific implementation to get turbo ratio limits of each
AVX level, for a selected SST-PP level.

No functional changes are expected.

Signed-off-by: Zhang Rui <rui.zhang@intel.com>
[srinivas.pandruvada@linux.intel.com: changelog edits]
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-core.c
tools/power/x86/intel-speed-select/isst.h

index 8d62baf..2ea7ef4 100644 (file)
@@ -338,6 +338,19 @@ static int mbox_get_get_trl(struct isst_id *id, int level, int avx_level, int *t
        return 0;
 }
 
+static int mbox_get_get_trls(struct isst_id *id, int level, struct isst_pkg_ctdp_level_info *ctdp_level)
+{
+       int trl_max_levels = isst_get_trl_max_levels();
+       int i, ret;
+
+       for (i = 0; i < trl_max_levels; i++) {
+               ret = mbox_get_get_trl(id, level, i, ctdp_level->trl_ratios[i]);
+               if (ret)
+                       return ret;
+       }
+       return 0;
+}
+
 static int mbox_get_trl_bucket_info(struct isst_id *id, int level, unsigned long long *buckets_info)
 {
        int ret;
@@ -598,6 +611,7 @@ static struct isst_platform_ops mbox_ops = {
        .get_pwr_info = mbox_get_pwr_info,
        .get_coremask_info = mbox_get_coremask_info,
        .get_get_trl = mbox_get_get_trl,
+       .get_get_trls = mbox_get_get_trls,
        .get_trl_bucket_info = mbox_get_trl_bucket_info,
        .set_tdp_level = mbox_set_tdp_level,
        .get_pbf_info = mbox_get_pbf_info,
index 27049e2..f4e3a91 100644 (file)
@@ -346,6 +346,12 @@ int isst_get_get_trl(struct isst_id *id, int level, int avx_level, int *trl)
        return isst_ops->get_get_trl(id, level, avx_level, trl);
 }
 
+int isst_get_get_trls(struct isst_id *id, int level, struct isst_pkg_ctdp_level_info *ctdp_level)
+{
+       CHECK_CB(get_get_trls);
+       return isst_ops->get_get_trls(id, level, ctdp_level);
+}
+
 int isst_get_trl_bucket_info(struct isst_id *id, int level, unsigned long long *buckets_info)
 {
        CHECK_CB(get_trl_bucket_info);
@@ -550,8 +556,6 @@ int isst_get_process_ctdp(struct isst_id *id, int tdp_level, struct isst_pkg_ctd
 
        for (i = 0; i <= pkg_dev->levels; ++i) {
                struct isst_pkg_ctdp_level_info *ctdp_level;
-               int trl_max_levels = isst_get_trl_max_levels();
-               int j;
 
                if (tdp_level != 0xff && i != tdp_level)
                        continue;
@@ -618,12 +622,9 @@ int isst_get_process_ctdp(struct isst_id *id, int tdp_level, struct isst_pkg_ctd
                if (ret)
                        return ret;
 
-               for (j = 0; j < trl_max_levels; j++) {
-                       ret = isst_get_get_trl(id, i, j,
-                                      ctdp_level->trl_ratios[j]);
-                       if (ret)
-                               return ret;
-               }
+               ret = isst_get_get_trls(id, i, ctdp_level);
+               if (ret)
+                       return ret;
        }
 
        if (!valid)
index e113a2b..b17fcf7 100644 (file)
@@ -192,6 +192,7 @@ struct isst_platform_ops {
        int (*get_pwr_info)(struct isst_id *id, int config_index, struct isst_pkg_ctdp_level_info *ctdp_level);
        int (*get_coremask_info)(struct isst_id *id, int config_index, struct isst_pkg_ctdp_level_info *ctdp_level);
        int (*get_get_trl)(struct isst_id *id, int level, int avx_level, int *trl);
+       int (*get_get_trls)(struct isst_id *id, int level, struct isst_pkg_ctdp_level_info *ctdp_level);
        int (*get_trl_bucket_info)(struct isst_id *id, int level, unsigned long long *buckets_info);
        int (*set_tdp_level)(struct isst_id *id, int tdp_level);
        int (*get_pbf_info)(struct isst_id *id, int level, struct isst_pbf_info *pbf_info);