tools/power/x86/intel-speed-select: Extend command set for perf-profile
[linux-2.6-microblaze.git] / tools / power / x86 / intel-speed-select / isst-core.c
index 67d32f2..ca3bd5b 100644 (file)
@@ -95,6 +95,69 @@ int isst_get_pwr_info(int cpu, int config_index,
        return 0;
 }
 
+void isst_get_uncore_p0_p1_info(int cpu, int config_index,
+                               struct isst_pkg_ctdp_level_info *ctdp_level)
+{
+       unsigned int resp;
+       int ret;
+       ret = isst_send_mbox_command(cpu, CONFIG_TDP,
+                                    CONFIG_TDP_GET_UNCORE_P0_P1_INFO, 0,
+                                    config_index, &resp);
+       if (ret) {
+               ctdp_level->uncore_p0 = 0;
+               ctdp_level->uncore_p1 = 0;
+               return;
+       }
+
+       ctdp_level->uncore_p0 = resp & GENMASK(7, 0);
+       ctdp_level->uncore_p1 = (resp & GENMASK(15, 8)) >> 8;
+       debug_printf(
+               "cpu:%d ctdp:%d CONFIG_TDP_GET_UNCORE_P0_P1_INFO resp:%x uncore p0:%d uncore p1:%d\n",
+               cpu, config_index, resp, ctdp_level->uncore_p0,
+               ctdp_level->uncore_p1);
+}
+
+void isst_get_p1_info(int cpu, int config_index,
+                     struct isst_pkg_ctdp_level_info *ctdp_level)
+{
+       unsigned int resp;
+       int ret;
+       ret = isst_send_mbox_command(cpu, CONFIG_TDP, CONFIG_TDP_GET_P1_INFO, 0,
+                                    config_index, &resp);
+       if (ret) {
+               ctdp_level->sse_p1 = 0;
+               ctdp_level->avx2_p1 = 0;
+               ctdp_level->avx512_p1 = 0;
+               return;
+       }
+
+       ctdp_level->sse_p1 = resp & GENMASK(7, 0);
+       ctdp_level->avx2_p1 = (resp & GENMASK(15, 8)) >> 8;
+       ctdp_level->avx512_p1 = (resp & GENMASK(23, 16)) >> 16;
+       debug_printf(
+               "cpu:%d ctdp:%d CONFIG_TDP_GET_P1_INFO resp:%x sse_p1:%d avx2_p1:%d avx512_p1:%d\n",
+               cpu, config_index, resp, ctdp_level->sse_p1,
+               ctdp_level->avx2_p1, ctdp_level->avx512_p1);
+}
+
+void isst_get_uncore_mem_freq(int cpu, int config_index,
+                             struct isst_pkg_ctdp_level_info *ctdp_level)
+{
+       unsigned int resp;
+       int ret;
+       ret = isst_send_mbox_command(cpu, CONFIG_TDP, CONFIG_TDP_GET_MEM_FREQ,
+                                    0, config_index, &resp);
+       if (ret) {
+               ctdp_level->mem_freq = 0;
+               return;
+       }
+
+       ctdp_level->mem_freq = resp & GENMASK(7, 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);
+}
+
 int isst_get_tjmax_info(int cpu, int config_index,
                        struct isst_pkg_ctdp_level_info *ctdp_level)
 {
@@ -600,6 +663,10 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev)
                if (ret)
                        return ret;
 
+               isst_get_uncore_p0_p1_info(cpu, i, ctdp_level);
+               isst_get_p1_info(cpu, i, ctdp_level);
+               isst_get_uncore_mem_freq(cpu, i, ctdp_level);
+
                if (ctdp_level->pbf_support) {
                        ret = isst_get_pbf_info(cpu, i, &ctdp_level->pbf_info);
                        if (!ret)