tools/power/x86/intel-speed-select: Allow api_version based platform callbacks
authorZhang Rui <rui.zhang@intel.com>
Sat, 20 Aug 2022 12:40:48 +0000 (20:40 +0800)
committerSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Wed, 22 Mar 2023 20:36:52 +0000 (13:36 -0700)
Different api_version suggests different kernel driver used and
different interface is used to communication with the hardware.

Allow setting platform specific callbacks based on api_version.

Currently, all platforms with api_version 1 uses Mbox/MMIO interfaces.

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-config.c
tools/power/x86/intel-speed-select/isst-core.c
tools/power/x86/intel-speed-select/isst.h

index 346f827..fb83f74 100644 (file)
@@ -803,8 +803,10 @@ static int isst_fill_platform_info(void)
        const char *pathname = "/dev/isst_interface";
        int fd;
 
-       if (is_clx_n_platform())
+       if (is_clx_n_platform()) {
+               isst_platform_info.api_version = 1;
                goto set_platform_ops;
+       }
 
        fd = open(pathname, O_RDWR);
        if (fd < 0)
@@ -824,7 +826,7 @@ static int isst_fill_platform_info(void)
        }
 
 set_platform_ops:
-       if (isst_set_platform_ops()) {
+       if (isst_set_platform_ops(isst_platform_info.api_version)) {
                fprintf(stderr, "Failed to set platform callbacks\n");
                exit(0);
        }
index fcab70e..6740972 100644 (file)
@@ -16,9 +16,16 @@ static struct isst_platform_ops              *isst_ops;
                }       \
        } while (0)
 
-int isst_set_platform_ops(void)
-{
-       isst_ops = mbox_get_platform_ops();
+int isst_set_platform_ops(int api_version)
+{
+       switch (api_version) {
+       case 1:
+               isst_ops = mbox_get_platform_ops();
+               break;
+       default:
+               isst_ops = NULL;
+               break;
+       }
 
        if (!isst_ops)
                return -1;
index 8192e68..6839ad2 100644 (file)
@@ -185,6 +185,7 @@ struct isst_platform_ops {
        int (*get_disp_freq_multiplier)(void);
        int (*get_trl_max_levels)(void);
        char *(*get_trl_level_name)(int level);
+       void (*update_platform_param)(enum isst_platform_param param, int value);
        int (*is_punit_valid)(struct isst_id *id);
        int (*read_pm_config)(struct isst_id *id, int *cp_state, int *cp_cap);
        int (*get_config_levels)(struct isst_id *id, struct isst_pkg_ctdp *pkg_ctdp);
@@ -226,15 +227,10 @@ extern void set_cpu_mask_from_punit_coremask(struct isst_id *id,
                                             size_t core_cpumask_size,
                                             cpu_set_t *core_cpumask,
                                             int *cpu_cnt);
-extern int isst_send_mbox_command(unsigned int cpu, unsigned char command,
-                                 unsigned char sub_command,
-                                 unsigned int write,
-                                 unsigned int req_data, unsigned int *resp);
-
 extern int isst_send_msr_command(unsigned int cpu, unsigned int command,
                                 int write, unsigned long long *req_resp);
 
-extern int isst_set_platform_ops(void);
+extern int isst_set_platform_ops(int api_version);
 extern void isst_update_platform_param(enum isst_platform_param, int vale);
 extern int isst_get_disp_freq_multiplier(void);
 extern int isst_get_trl_max_levels(void);