Commit 096575db authored by Hans de Goede's avatar Hans de Goede

Merge remote-tracking branch 'intel-sst/intel-sst' into review-hans

parents 7f1ea75d 97ec890d
...@@ -181,7 +181,10 @@ struct perf_cap { ...@@ -181,7 +181,10 @@ struct perf_cap {
static void process_hfi_event(struct perf_cap *perf_cap) static void process_hfi_event(struct perf_cap *perf_cap)
{ {
process_level_change(perf_cap->cpu); struct isst_id id;
set_isst_id(&id, perf_cap->cpu);
process_level_change(&id);
} }
static int handle_event(struct nl_msg *n, void *arg) static int handle_event(struct nl_msg *n, void *arg)
......
...@@ -15,7 +15,7 @@ struct process_cmd_struct { ...@@ -15,7 +15,7 @@ struct process_cmd_struct {
int arg; int arg;
}; };
static const char *version_str = "v1.12"; static const char *version_str = "v1.13";
static const int supported_api_ver = 1; static const int supported_api_ver = 1;
static struct isst_if_platform_info isst_platform_info; static struct isst_if_platform_info isst_platform_info;
...@@ -63,6 +63,7 @@ struct _cpu_map { ...@@ -63,6 +63,7 @@ struct _cpu_map {
unsigned short die_id; unsigned short die_id;
unsigned short punit_cpu; unsigned short punit_cpu;
unsigned short punit_cpu_core; unsigned short punit_cpu_core;
unsigned short initialized;
}; };
struct _cpu_map *cpu_map; struct _cpu_map *cpu_map;
...@@ -298,10 +299,16 @@ static void store_cpu_topology(void) ...@@ -298,10 +299,16 @@ static void store_cpu_topology(void)
fclose(fp); fclose(fp);
} }
int get_physical_package_id(int cpu) static int get_physical_package_id(int cpu)
{ {
int ret; int ret;
if (cpu < 0)
return -1;
if (cpu_map && cpu_map[cpu].initialized)
return cpu_map[cpu].pkg_id;
ret = parse_int_file(0, ret = parse_int_file(0,
"/sys/devices/system/cpu/cpu%d/topology/physical_package_id", "/sys/devices/system/cpu/cpu%d/topology/physical_package_id",
cpu); cpu);
...@@ -316,10 +323,16 @@ int get_physical_package_id(int cpu) ...@@ -316,10 +323,16 @@ int get_physical_package_id(int cpu)
return ret; return ret;
} }
int get_physical_core_id(int cpu) static int get_physical_core_id(int cpu)
{ {
int ret; int ret;
if (cpu < 0)
return -1;
if (cpu_map && cpu_map[cpu].initialized)
return cpu_map[cpu].core_id;
ret = parse_int_file(0, ret = parse_int_file(0,
"/sys/devices/system/cpu/cpu%d/topology/core_id", "/sys/devices/system/cpu/cpu%d/topology/core_id",
cpu); cpu);
...@@ -334,10 +347,16 @@ int get_physical_core_id(int cpu) ...@@ -334,10 +347,16 @@ int get_physical_core_id(int cpu)
return ret; return ret;
} }
int get_physical_die_id(int cpu) static int get_physical_die_id(int cpu)
{ {
int ret; int ret;
if (cpu < 0)
return -1;
if (cpu_map && cpu_map[cpu].initialized)
return cpu_map[cpu].die_id;
ret = parse_int_file(0, ret = parse_int_file(0,
"/sys/devices/system/cpu/cpu%d/topology/die_id", "/sys/devices/system/cpu/cpu%d/topology/die_id",
cpu); cpu);
...@@ -359,6 +378,31 @@ int get_physical_die_id(int cpu) ...@@ -359,6 +378,31 @@ int get_physical_die_id(int cpu)
return ret; return ret;
} }
void set_isst_id(struct isst_id *id, int cpu)
{
id->cpu = cpu;
id->pkg = get_physical_package_id(cpu);
if (id < 0 || id->pkg >= MAX_PACKAGE_COUNT)
id->pkg = -1;
id->die = get_physical_die_id(cpu);
if (id < 0 || id->die >= MAX_DIE_PER_PACKAGE)
id->die = -1;
}
int is_cpu_in_power_domain(int cpu, struct isst_id *id)
{
struct isst_id tid;
set_isst_id(&tid, cpu);
if (id->pkg == tid.pkg && id->die == tid.die)
return 1;
return 0;
}
int get_cpufreq_base_freq(int cpu) int get_cpufreq_base_freq(int cpu)
{ {
return parse_int_file(0, "/sys/devices/system/cpu/cpu%d/cpufreq/base_frequency", cpu); return parse_int_file(0, "/sys/devices/system/cpu/cpu%d/cpufreq/base_frequency", cpu);
...@@ -410,13 +454,14 @@ static void force_all_cpus_online(void) ...@@ -410,13 +454,14 @@ static void force_all_cpus_online(void)
unlink("/var/run/isst_cpu_topology.dat"); unlink("/var/run/isst_cpu_topology.dat");
} }
void for_each_online_package_in_set(void (*callback)(int, void *, void *, void for_each_online_package_in_set(void (*callback)(struct isst_id *, void *, void *,
void *, void *), void *, void *),
void *arg1, void *arg2, void *arg3, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
int max_packages[MAX_PACKAGE_COUNT * MAX_PACKAGE_COUNT]; int max_packages[MAX_PACKAGE_COUNT * MAX_PACKAGE_COUNT];
int pkg_index = 0, i; int pkg_index = 0, i;
struct isst_id id;
memset(max_packages, 0xff, sizeof(max_packages)); memset(max_packages, 0xff, sizeof(max_packages));
for (i = 0; i < topo_max_cpus; ++i) { for (i = 0; i < topo_max_cpus; ++i) {
...@@ -450,18 +495,20 @@ void for_each_online_package_in_set(void (*callback)(int, void *, void *, ...@@ -450,18 +495,20 @@ void for_each_online_package_in_set(void (*callback)(int, void *, void *,
} }
} }
set_isst_id(&id, i);
if (!skip && online && callback) { if (!skip && online && callback) {
callback(i, arg1, arg2, arg3, arg4); callback(&id, arg1, arg2, arg3, arg4);
max_packages[pkg_index++] = pkg_id; max_packages[pkg_index++] = pkg_id;
} }
} }
} }
static void for_each_online_target_cpu_in_set( static void for_each_online_target_cpu_in_set(
void (*callback)(int, void *, void *, void *, void *), void *arg1, void (*callback)(struct isst_id *, void *, void *, void *, void *), void *arg1,
void *arg2, void *arg3, void *arg4) void *arg2, void *arg3, void *arg4)
{ {
int i, found = 0; int i, found = 0;
struct isst_id id;
for (i = 0; i < topo_max_cpus; ++i) { for (i = 0; i < topo_max_cpus; ++i) {
int online; int online;
...@@ -475,8 +522,9 @@ static void for_each_online_target_cpu_in_set( ...@@ -475,8 +522,9 @@ static void for_each_online_target_cpu_in_set(
online = online =
1; /* online entry for CPU 0 needs some special configs */ 1; /* online entry for CPU 0 needs some special configs */
set_isst_id(&id, i);
if (online && callback) { if (online && callback) {
callback(i, arg1, arg2, arg3, arg4); callback(&id, arg1, arg2, arg3, arg4);
found = 1; found = 1;
} }
} }
...@@ -536,47 +584,8 @@ void free_cpu_set(cpu_set_t *cpu_set) ...@@ -536,47 +584,8 @@ void free_cpu_set(cpu_set_t *cpu_set)
} }
static int cpu_cnt[MAX_PACKAGE_COUNT][MAX_DIE_PER_PACKAGE]; static int cpu_cnt[MAX_PACKAGE_COUNT][MAX_DIE_PER_PACKAGE];
static long long core_mask[MAX_PACKAGE_COUNT][MAX_DIE_PER_PACKAGE];
static void set_cpu_present_cpu_mask(void)
{
size_t size;
DIR *dir;
int i;
size = alloc_cpu_set(&present_cpumask);
present_cpumask_size = size;
for (i = 0; i < topo_max_cpus; ++i) {
char buffer[256];
snprintf(buffer, sizeof(buffer), int get_max_punit_core_id(struct isst_id *id)
"/sys/devices/system/cpu/cpu%d", i);
dir = opendir(buffer);
if (dir) {
int pkg_id, die_id;
CPU_SET_S(i, size, present_cpumask);
die_id = get_physical_die_id(i);
if (die_id < 0)
die_id = 0;
pkg_id = get_physical_package_id(i);
if (pkg_id < 0) {
fprintf(stderr, "Failed to get package id, CPU %d may be offline\n", i);
continue;
}
if (pkg_id < MAX_PACKAGE_COUNT &&
die_id < MAX_DIE_PER_PACKAGE) {
int core_id = get_physical_core_id(i);
cpu_cnt[pkg_id][die_id]++;
core_mask[pkg_id][die_id] |= (1ULL << core_id);
}
}
closedir(dir);
}
}
int get_max_punit_core_id(int pkg_id, int die_id)
{ {
int max_id = 0; int max_id = 0;
int i; int i;
...@@ -586,8 +595,7 @@ int get_max_punit_core_id(int pkg_id, int die_id) ...@@ -586,8 +595,7 @@ int get_max_punit_core_id(int pkg_id, int die_id)
if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask)) if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask))
continue; continue;
if (cpu_map[i].pkg_id == pkg_id && if (is_cpu_in_power_domain(i, id) &&
cpu_map[i].die_id == die_id &&
cpu_map[i].punit_cpu_core > max_id) cpu_map[i].punit_cpu_core > max_id)
max_id = cpu_map[i].punit_cpu_core; max_id = cpu_map[i].punit_cpu_core;
} }
...@@ -595,51 +603,66 @@ int get_max_punit_core_id(int pkg_id, int die_id) ...@@ -595,51 +603,66 @@ int get_max_punit_core_id(int pkg_id, int die_id)
return max_id; return max_id;
} }
int get_cpu_count(int pkg_id, int die_id) int get_cpu_count(struct isst_id *id)
{ {
if (pkg_id < MAX_PACKAGE_COUNT && die_id < MAX_DIE_PER_PACKAGE) if (id->pkg < 0 || id->die < 0)
return cpu_cnt[pkg_id][die_id];
return 0; return 0;
}
static void set_cpu_target_cpu_mask(void) return cpu_cnt[id->pkg][id->die];
{
size_t size;
int i;
size = alloc_cpu_set(&target_cpumask);
target_cpumask_size = size;
for (i = 0; i < max_target_cpus; ++i) {
if (!CPU_ISSET_S(target_cpus[i], present_cpumask_size,
present_cpumask))
continue;
CPU_SET_S(target_cpus[i], size, target_cpumask);
}
} }
static void create_cpu_map(void) static void create_cpu_map(void)
{ {
const char *pathname = "/dev/isst_interface"; const char *pathname = "/dev/isst_interface";
size_t size;
DIR *dir;
int i, fd = 0; int i, fd = 0;
struct isst_if_cpu_maps map; struct isst_if_cpu_maps map;
cpu_map = malloc(sizeof(*cpu_map) * topo_max_cpus); /* Use calloc to make sure the memory is initialized to Zero */
cpu_map = calloc(topo_max_cpus, sizeof(*cpu_map));
if (!cpu_map) if (!cpu_map)
err(3, "cpumap"); err(3, "cpumap");
fd = open(pathname, O_RDWR); fd = open(pathname, O_RDWR);
if (fd < 0) if (fd < 0 && !is_clx_n_platform())
err(-1, "%s open failed", pathname); err(-1, "%s open failed", pathname);
size = alloc_cpu_set(&present_cpumask);
present_cpumask_size = size;
for (i = 0; i < topo_max_cpus; ++i) { for (i = 0; i < topo_max_cpus; ++i) {
if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask)) char buffer[256];
int pkg_id, die_id, core_id;
/* check if CPU is online */
snprintf(buffer, sizeof(buffer),
"/sys/devices/system/cpu/cpu%d", i);
dir = opendir(buffer);
if (!dir)
continue; continue;
closedir(dir);
CPU_SET_S(i, size, present_cpumask);
pkg_id = get_physical_package_id(i);
die_id = get_physical_die_id(i);
core_id = get_physical_core_id(i);
if (pkg_id < 0 || die_id < 0 || core_id < 0)
continue;
cpu_map[i].pkg_id = pkg_id;
cpu_map[i].die_id = die_id;
cpu_map[i].core_id = core_id;
cpu_map[i].initialized = 1;
cpu_cnt[pkg_id][die_id]++;
if (fd < 0)
continue;
map.cmd_count = 1; map.cmd_count = 1;
map.cpu_map[0].logical_cpu = i; map.cpu_map[0].logical_cpu = i;
debug_printf(" map logical_cpu:%d\n", debug_printf(" map logical_cpu:%d\n",
map.cpu_map[0].logical_cpu); map.cpu_map[0].logical_cpu);
if (ioctl(fd, ISST_IF_GET_PHY_ID, &map) == -1) { if (ioctl(fd, ISST_IF_GET_PHY_ID, &map) == -1) {
...@@ -648,9 +671,6 @@ static void create_cpu_map(void) ...@@ -648,9 +671,6 @@ static void create_cpu_map(void)
map.cpu_map[0].logical_cpu); map.cpu_map[0].logical_cpu);
continue; continue;
} }
cpu_map[i].core_id = get_physical_core_id(i);
cpu_map[i].pkg_id = get_physical_package_id(i);
cpu_map[i].die_id = get_physical_die_id(i);
cpu_map[i].punit_cpu = map.cpu_map[0].physical_cpu; cpu_map[i].punit_cpu = map.cpu_map[0].physical_cpu;
cpu_map[i].punit_cpu_core = (map.cpu_map[0].physical_cpu >> cpu_map[i].punit_cpu_core = (map.cpu_map[0].physical_cpu >>
1); // shift to get core id 1); // shift to get core id
...@@ -661,35 +681,27 @@ static void create_cpu_map(void) ...@@ -661,35 +681,27 @@ static void create_cpu_map(void)
cpu_map[i].pkg_id, cpu_map[i].punit_cpu, cpu_map[i].pkg_id, cpu_map[i].punit_cpu,
cpu_map[i].punit_cpu_core); cpu_map[i].punit_cpu_core);
} }
if (fd >= 0)
if (fd)
close(fd); close(fd);
}
int find_logical_cpu(int pkg_id, int die_id, int punit_core_id) size = alloc_cpu_set(&target_cpumask);
{ target_cpumask_size = size;
int i; for (i = 0; i < max_target_cpus; ++i) {
if (!CPU_ISSET_S(target_cpus[i], present_cpumask_size,
present_cpumask))
continue;
for (i = 0; i < topo_max_cpus; ++i) { CPU_SET_S(target_cpus[i], size, target_cpumask);
if (cpu_map[i].pkg_id == pkg_id &&
cpu_map[i].die_id == die_id &&
cpu_map[i].punit_cpu_core == punit_core_id)
return i;
} }
return -EINVAL;
} }
void set_cpu_mask_from_punit_coremask(int cpu, unsigned long long core_mask, void set_cpu_mask_from_punit_coremask(struct isst_id *id, unsigned long long core_mask,
size_t core_cpumask_size, size_t core_cpumask_size,
cpu_set_t *core_cpumask, int *cpu_cnt) cpu_set_t *core_cpumask, int *cpu_cnt)
{ {
int i, cnt = 0; int i, cnt = 0;
int die_id, pkg_id;
*cpu_cnt = 0; *cpu_cnt = 0;
die_id = get_physical_die_id(cpu);
pkg_id = get_physical_package_id(cpu);
for (i = 0; i < 64; ++i) { for (i = 0; i < 64; ++i) {
if (core_mask & BIT_ULL(i)) { if (core_mask & BIT_ULL(i)) {
...@@ -699,8 +711,7 @@ void set_cpu_mask_from_punit_coremask(int cpu, unsigned long long core_mask, ...@@ -699,8 +711,7 @@ void set_cpu_mask_from_punit_coremask(int cpu, unsigned long long core_mask,
if (!CPU_ISSET_S(j, present_cpumask_size, present_cpumask)) if (!CPU_ISSET_S(j, present_cpumask_size, present_cpumask))
continue; continue;
if (cpu_map[j].pkg_id == pkg_id && if (is_cpu_in_power_domain(j, id) &&
cpu_map[j].die_id == die_id &&
cpu_map[j].punit_cpu_core == i) { cpu_map[j].punit_cpu_core == i) {
CPU_SET_S(j, core_cpumask_size, CPU_SET_S(j, core_cpumask_size,
core_cpumask); core_cpumask);
...@@ -931,6 +942,7 @@ static void isst_print_extended_platform_info(void) ...@@ -931,6 +942,7 @@ static void isst_print_extended_platform_info(void)
struct isst_pkg_ctdp pkg_dev; struct isst_pkg_ctdp pkg_dev;
int ret, i, j; int ret, i, j;
FILE *filep; FILE *filep;
struct isst_id id;
for (i = 0; i < 256; ++i) { for (i = 0; i < 256; ++i) {
char path[256]; char path[256];
...@@ -947,7 +959,8 @@ static void isst_print_extended_platform_info(void) ...@@ -947,7 +959,8 @@ static void isst_print_extended_platform_info(void)
fclose(filep); fclose(filep);
ret = isst_get_ctdp_levels(i, &pkg_dev); set_isst_id(&id, i);
ret = isst_get_ctdp_levels(&id, &pkg_dev);
if (ret) if (ret)
return; return;
...@@ -964,7 +977,7 @@ static void isst_print_extended_platform_info(void) ...@@ -964,7 +977,7 @@ static void isst_print_extended_platform_info(void)
fprintf(outf, "TDP level change control is unlocked, max level: %d \n", pkg_dev.levels); fprintf(outf, "TDP level change control is unlocked, max level: %d \n", pkg_dev.levels);
for (j = 0; j <= pkg_dev.levels; ++j) { for (j = 0; j <= pkg_dev.levels; ++j) {
ret = isst_get_ctdp_control(i, j, &ctdp_level); ret = isst_get_ctdp_control(&id, j, &ctdp_level);
if (ret) if (ret)
continue; continue;
...@@ -985,7 +998,7 @@ static void isst_print_extended_platform_info(void) ...@@ -985,7 +998,7 @@ static void isst_print_extended_platform_info(void)
else else
fprintf(outf, "Intel(R) SST-BF (feature base-freq) is not supported\n"); fprintf(outf, "Intel(R) SST-BF (feature base-freq) is not supported\n");
ret = isst_read_pm_config(i, &cp_state, &cp_cap); ret = isst_read_pm_config(&id, &cp_state, &cp_cap);
if (ret) { if (ret) {
fprintf(outf, "Intel(R) SST-CP (feature core-power) status is unknown\n"); fprintf(outf, "Intel(R) SST-CP (feature core-power) status is unknown\n");
return; return;
...@@ -1007,6 +1020,10 @@ static void isst_print_platform_information(void) ...@@ -1007,6 +1020,10 @@ static void isst_print_platform_information(void)
exit(0); exit(0);
} }
/* Early initialization to create working cpu_map */
set_max_cpu_num();
create_cpu_map();
fd = open(pathname, O_RDWR); fd = open(pathname, O_RDWR);
if (fd < 0) if (fd < 0)
err(-1, "%s open failed", pathname); err(-1, "%s open failed", pathname);
...@@ -1031,18 +1048,18 @@ static void isst_print_platform_information(void) ...@@ -1031,18 +1048,18 @@ static void isst_print_platform_information(void)
} }
static char *local_str0, *local_str1; static char *local_str0, *local_str1;
static void exec_on_get_ctdp_cpu(int cpu, void *arg1, void *arg2, void *arg3, static void exec_on_get_ctdp_cpu(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
int (*fn_ptr)(int cpu, void *arg); int (*fn_ptr)(struct isst_id *id, void *arg);
int ret; int ret;
fn_ptr = arg1; fn_ptr = arg1;
ret = fn_ptr(cpu, arg2); ret = fn_ptr(id, arg2);
if (ret) if (ret)
isst_display_error_info_message(1, "get_tdp_* failed", 0, 0); isst_display_error_info_message(1, "get_tdp_* failed", 0, 0);
else else
isst_ctdp_display_core_info(cpu, outf, arg3, isst_ctdp_display_core_info(id, outf, arg3,
*(unsigned int *)arg4, *(unsigned int *)arg4,
local_str0, local_str1); local_str0, local_str1);
} }
...@@ -1110,9 +1127,9 @@ static int clx_n_get_base_ratio(void) ...@@ -1110,9 +1127,9 @@ static int clx_n_get_base_ratio(void)
return (int)(value); return (int)(value);
} }
static int clx_n_config(int cpu) static int clx_n_config(struct isst_id *id)
{ {
int i, ret, pkg_id, die_id; int i, ret;
unsigned long cpu_bf; unsigned long cpu_bf;
struct isst_pkg_ctdp_level_info *ctdp_level; struct isst_pkg_ctdp_level_info *ctdp_level;
struct isst_pbf_info *pbf_info; struct isst_pbf_info *pbf_info;
...@@ -1134,15 +1151,11 @@ static int clx_n_config(int cpu) ...@@ -1134,15 +1151,11 @@ static int clx_n_config(int cpu)
pbf_info->p1_high = 0; pbf_info->p1_high = 0;
pbf_info->p1_low = ~0; pbf_info->p1_low = ~0;
pkg_id = get_physical_package_id(cpu);
die_id = get_physical_die_id(cpu);
for (i = 0; i < topo_max_cpus; i++) { for (i = 0; i < topo_max_cpus; i++) {
if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask)) if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask))
continue; continue;
if (pkg_id != get_physical_package_id(i) || if (!is_cpu_in_power_domain(i, id))
die_id != get_physical_die_id(i))
continue; continue;
CPU_SET_S(i, ctdp_level->core_cpumask_size, CPU_SET_S(i, ctdp_level->core_cpumask_size,
...@@ -1179,8 +1192,7 @@ static int clx_n_config(int cpu) ...@@ -1179,8 +1192,7 @@ static int clx_n_config(int cpu)
if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask)) if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask))
continue; continue;
if (pkg_id != get_physical_package_id(i) || if (!is_cpu_in_power_domain(i, id))
die_id != get_physical_die_id(i))
continue; continue;
cpu_bf = parse_int_file(1, cpu_bf = parse_int_file(1,
...@@ -1206,7 +1218,7 @@ static int clx_n_config(int cpu) ...@@ -1206,7 +1218,7 @@ static int clx_n_config(int cpu)
return ret; return ret;
} }
static void dump_clx_n_config_for_cpu(int cpu, void *arg1, void *arg2, static void dump_clx_n_config_for_cpu(struct isst_id *id, void *arg1, void *arg2,
void *arg3, void *arg4) void *arg3, void *arg4)
{ {
int ret; int ret;
...@@ -1216,7 +1228,7 @@ static void dump_clx_n_config_for_cpu(int cpu, void *arg1, void *arg2, ...@@ -1216,7 +1228,7 @@ static void dump_clx_n_config_for_cpu(int cpu, void *arg1, void *arg2,
exit(0); exit(0);
} }
ret = clx_n_config(cpu); ret = clx_n_config(id);
if (ret) { if (ret) {
debug_printf("clx_n_config failed"); debug_printf("clx_n_config failed");
} else { } else {
...@@ -1226,27 +1238,27 @@ static void dump_clx_n_config_for_cpu(int cpu, void *arg1, void *arg2, ...@@ -1226,27 +1238,27 @@ static void dump_clx_n_config_for_cpu(int cpu, void *arg1, void *arg2,
ctdp_level = &clx_n_pkg_dev.ctdp_level[0]; ctdp_level = &clx_n_pkg_dev.ctdp_level[0];
pbf_info = &ctdp_level->pbf_info; pbf_info = &ctdp_level->pbf_info;
clx_n_pkg_dev.processed = 1; clx_n_pkg_dev.processed = 1;
isst_ctdp_display_information(cpu, outf, tdp_level, &clx_n_pkg_dev); isst_ctdp_display_information(id, outf, tdp_level, &clx_n_pkg_dev);
free_cpu_set(ctdp_level->core_cpumask); free_cpu_set(ctdp_level->core_cpumask);
free_cpu_set(pbf_info->core_cpumask); free_cpu_set(pbf_info->core_cpumask);
} }
} }
static void dump_isst_config_for_cpu(int cpu, void *arg1, void *arg2, static void dump_isst_config_for_cpu(struct isst_id *id, void *arg1, void *arg2,
void *arg3, void *arg4) void *arg3, void *arg4)
{ {
struct isst_pkg_ctdp pkg_dev; struct isst_pkg_ctdp pkg_dev;
int ret; int ret;
memset(&pkg_dev, 0, sizeof(pkg_dev)); memset(&pkg_dev, 0, sizeof(pkg_dev));
ret = isst_get_process_ctdp(cpu, tdp_level, &pkg_dev); ret = isst_get_process_ctdp(id, tdp_level, &pkg_dev);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Failed to get perf-profile info on cpu", 1, cpu); isst_display_error_info_message(1, "Failed to get perf-profile info on cpu", 1, id->cpu);
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
exit(1); exit(1);
} else { } else {
isst_ctdp_display_information(cpu, outf, tdp_level, &pkg_dev); isst_ctdp_display_information(id, outf, tdp_level, &pkg_dev);
isst_get_process_ctdp_complete(cpu, &pkg_dev); isst_get_process_ctdp_complete(id, &pkg_dev);
} }
} }
...@@ -1282,23 +1294,21 @@ static void dump_isst_config(int arg) ...@@ -1282,23 +1294,21 @@ static void dump_isst_config(int arg)
static void adjust_scaling_max_from_base_freq(int cpu); static void adjust_scaling_max_from_base_freq(int cpu);
static void set_tdp_level_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, static void set_tdp_level_for_cpu(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
int ret; int ret;
ret = isst_set_tdp_level(cpu, tdp_level); ret = isst_set_tdp_level(id, tdp_level);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Set TDP level failed", 0, 0); isst_display_error_info_message(1, "Set TDP level failed", 0, 0);
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
exit(1); exit(1);
} else { } else {
isst_display_result(cpu, outf, "perf-profile", "set_tdp_level", isst_display_result(id, outf, "perf-profile", "set_tdp_level",
ret); ret);
if (force_online_offline) { if (force_online_offline) {
struct isst_pkg_ctdp_level_info ctdp_level; struct isst_pkg_ctdp_level_info ctdp_level;
int pkg_id = get_physical_package_id(cpu);
int die_id = get_physical_die_id(cpu);
/* Wait for updated base frequencies */ /* Wait for updated base frequencies */
usleep(2000); usleep(2000);
...@@ -1306,7 +1316,7 @@ static void set_tdp_level_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, ...@@ -1306,7 +1316,7 @@ static void set_tdp_level_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
fprintf(stderr, "Option is set to online/offline\n"); fprintf(stderr, "Option is set to online/offline\n");
ctdp_level.core_cpumask_size = ctdp_level.core_cpumask_size =
alloc_cpu_set(&ctdp_level.core_cpumask); alloc_cpu_set(&ctdp_level.core_cpumask);
ret = isst_get_coremask_info(cpu, tdp_level, &ctdp_level); ret = isst_get_coremask_info(id, tdp_level, &ctdp_level);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Can't get coremask, online/offline option is ignored", 0, 0); isst_display_error_info_message(1, "Can't get coremask, online/offline option is ignored", 0, 0);
return; return;
...@@ -1314,7 +1324,7 @@ static void set_tdp_level_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, ...@@ -1314,7 +1324,7 @@ static void set_tdp_level_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
if (ctdp_level.cpu_count) { if (ctdp_level.cpu_count) {
int i, max_cpus = get_topo_max_cpus(); int i, max_cpus = get_topo_max_cpus();
for (i = 0; i < max_cpus; ++i) { for (i = 0; i < max_cpus; ++i) {
if (pkg_id != get_physical_package_id(i) || die_id != get_physical_die_id(i)) if (!is_cpu_in_power_domain(i, id))
continue; continue;
if (CPU_ISSET_S(i, ctdp_level.core_cpumask_size, ctdp_level.core_cpumask)) { if (CPU_ISSET_S(i, ctdp_level.core_cpumask_size, ctdp_level.core_cpumask)) {
fprintf(stderr, "online cpu %d\n", i); fprintf(stderr, "online cpu %d\n", i);
...@@ -1357,12 +1367,12 @@ static void set_tdp_level(int arg) ...@@ -1357,12 +1367,12 @@ static void set_tdp_level(int arg)
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
} }
static void clx_n_dump_pbf_config_for_cpu(int cpu, void *arg1, void *arg2, static void clx_n_dump_pbf_config_for_cpu(struct isst_id *id, void *arg1, void *arg2,
void *arg3, void *arg4) void *arg3, void *arg4)
{ {
int ret; int ret;
ret = clx_n_config(cpu); ret = clx_n_config(id);
if (ret) { if (ret) {
isst_display_error_info_message(1, "clx_n_config failed", 0, 0); isst_display_error_info_message(1, "clx_n_config failed", 0, 0);
} else { } else {
...@@ -1371,25 +1381,25 @@ static void clx_n_dump_pbf_config_for_cpu(int cpu, void *arg1, void *arg2, ...@@ -1371,25 +1381,25 @@ static void clx_n_dump_pbf_config_for_cpu(int cpu, void *arg1, void *arg2,
ctdp_level = &clx_n_pkg_dev.ctdp_level[0]; ctdp_level = &clx_n_pkg_dev.ctdp_level[0];
pbf_info = &ctdp_level->pbf_info; pbf_info = &ctdp_level->pbf_info;
isst_pbf_display_information(cpu, outf, tdp_level, pbf_info); isst_pbf_display_information(id, outf, tdp_level, pbf_info);
free_cpu_set(ctdp_level->core_cpumask); free_cpu_set(ctdp_level->core_cpumask);
free_cpu_set(pbf_info->core_cpumask); free_cpu_set(pbf_info->core_cpumask);
} }
} }
static void dump_pbf_config_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, static void dump_pbf_config_for_cpu(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
struct isst_pbf_info pbf_info; struct isst_pbf_info pbf_info;
int ret; int ret;
ret = isst_get_pbf_info(cpu, tdp_level, &pbf_info); ret = isst_get_pbf_info(id, tdp_level, &pbf_info);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Failed to get base-freq info at this level", 1, tdp_level); isst_display_error_info_message(1, "Failed to get base-freq info at this level", 1, tdp_level);
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
exit(1); exit(1);
} else { } else {
isst_pbf_display_information(cpu, outf, tdp_level, &pbf_info); isst_pbf_display_information(id, outf, tdp_level, &pbf_info);
isst_get_pbf_info_complete(&pbf_info); isst_get_pbf_info_complete(&pbf_info);
} }
} }
...@@ -1426,12 +1436,12 @@ static void dump_pbf_config(int arg) ...@@ -1426,12 +1436,12 @@ static void dump_pbf_config(int arg)
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
} }
static int set_clos_param(int cpu, int clos, int epp, int wt, int min, int max) static int set_clos_param(struct isst_id *id, int clos, int epp, int wt, int min, int max)
{ {
struct isst_clos_config clos_config; struct isst_clos_config clos_config;
int ret; int ret;
ret = isst_pm_get_clos(cpu, clos, &clos_config); ret = isst_pm_get_clos(id, clos, &clos_config);
if (ret) { if (ret) {
isst_display_error_info_message(1, "isst_pm_get_clos failed", 0, 0); isst_display_error_info_message(1, "isst_pm_get_clos failed", 0, 0);
return ret; return ret;
...@@ -1440,7 +1450,7 @@ static int set_clos_param(int cpu, int clos, int epp, int wt, int min, int max) ...@@ -1440,7 +1450,7 @@ static int set_clos_param(int cpu, int clos, int epp, int wt, int min, int max)
clos_config.clos_max = max; clos_config.clos_max = max;
clos_config.epp = epp; clos_config.epp = epp;
clos_config.clos_prop_prio = wt; clos_config.clos_prop_prio = wt;
ret = isst_set_clos(cpu, clos, &clos_config); ret = isst_set_clos(id, clos, &clos_config);
if (ret) { if (ret) {
isst_display_error_info_message(1, "isst_set_clos failed", 0, 0); isst_display_error_info_message(1, "isst_set_clos failed", 0, 0);
return ret; return ret;
...@@ -1502,14 +1512,14 @@ static void adjust_scaling_min_from_base_freq(int cpu) ...@@ -1502,14 +1512,14 @@ static void adjust_scaling_min_from_base_freq(int cpu)
set_cpufreq_scaling_min_max(cpu, 0, base_freq); set_cpufreq_scaling_min_max(cpu, 0, base_freq);
} }
static int set_clx_pbf_cpufreq_scaling_min_max(int cpu) static int set_clx_pbf_cpufreq_scaling_min_max(struct isst_id *id)
{ {
struct isst_pkg_ctdp_level_info *ctdp_level; struct isst_pkg_ctdp_level_info *ctdp_level;
struct isst_pbf_info *pbf_info; struct isst_pbf_info *pbf_info;
int i, pkg_id, die_id, freq, freq_high, freq_low; int i, freq, freq_high, freq_low;
int ret; int ret;
ret = clx_n_config(cpu); ret = clx_n_config(id);
if (ret) { if (ret) {
debug_printf("cpufreq_scaling_min_max failed for CLX"); debug_printf("cpufreq_scaling_min_max failed for CLX");
return ret; return ret;
...@@ -1520,11 +1530,8 @@ static int set_clx_pbf_cpufreq_scaling_min_max(int cpu) ...@@ -1520,11 +1530,8 @@ static int set_clx_pbf_cpufreq_scaling_min_max(int cpu)
freq_high = pbf_info->p1_high * 100000; freq_high = pbf_info->p1_high * 100000;
freq_low = pbf_info->p1_low * 100000; freq_low = pbf_info->p1_low * 100000;
pkg_id = get_physical_package_id(cpu);
die_id = get_physical_die_id(cpu);
for (i = 0; i < get_topo_max_cpus(); ++i) { for (i = 0; i < get_topo_max_cpus(); ++i) {
if (pkg_id != get_physical_package_id(i) || if (!is_cpu_in_power_domain(i, id))
die_id != get_physical_die_id(i))
continue; continue;
if (CPU_ISSET_S(i, pbf_info->core_cpumask_size, if (CPU_ISSET_S(i, pbf_info->core_cpumask_size,
...@@ -1587,15 +1594,12 @@ static int set_cpufreq_scaling_min_max_from_cpuinfo(int cpu, int cpuinfo_max, in ...@@ -1587,15 +1594,12 @@ static int set_cpufreq_scaling_min_max_from_cpuinfo(int cpu, int cpuinfo_max, in
return 0; return 0;
} }
static void set_scaling_min_to_cpuinfo_max(int cpu) static void set_scaling_min_to_cpuinfo_max(struct isst_id *id)
{ {
int i, pkg_id, die_id; int i;
pkg_id = get_physical_package_id(cpu);
die_id = get_physical_die_id(cpu);
for (i = 0; i < get_topo_max_cpus(); ++i) { for (i = 0; i < get_topo_max_cpus(); ++i) {
if (pkg_id != get_physical_package_id(i) || if (!is_cpu_in_power_domain(i, id))
die_id != get_physical_die_id(i))
continue; continue;
adjust_scaling_max_from_base_freq(i); adjust_scaling_max_from_base_freq(i);
...@@ -1604,15 +1608,12 @@ static void set_scaling_min_to_cpuinfo_max(int cpu) ...@@ -1604,15 +1608,12 @@ static void set_scaling_min_to_cpuinfo_max(int cpu)
} }
} }
static void set_scaling_min_to_cpuinfo_min(int cpu) static void set_scaling_min_to_cpuinfo_min(struct isst_id *id)
{ {
int i, pkg_id, die_id; int i;
pkg_id = get_physical_package_id(cpu);
die_id = get_physical_die_id(cpu);
for (i = 0; i < get_topo_max_cpus(); ++i) { for (i = 0; i < get_topo_max_cpus(); ++i) {
if (pkg_id != get_physical_package_id(i) || if (!is_cpu_in_power_domain(i, id))
die_id != get_physical_die_id(i))
continue; continue;
adjust_scaling_max_from_base_freq(i); adjust_scaling_max_from_base_freq(i);
...@@ -1620,53 +1621,48 @@ static void set_scaling_min_to_cpuinfo_min(int cpu) ...@@ -1620,53 +1621,48 @@ static void set_scaling_min_to_cpuinfo_min(int cpu)
} }
} }
static void set_scaling_max_to_cpuinfo_max(int cpu) static void set_scaling_max_to_cpuinfo_max(struct isst_id *id)
{ {
int i, pkg_id, die_id; int i;
pkg_id = get_physical_package_id(cpu);
die_id = get_physical_die_id(cpu);
for (i = 0; i < get_topo_max_cpus(); ++i) { for (i = 0; i < get_topo_max_cpus(); ++i) {
if (pkg_id != get_physical_package_id(i) || if (!is_cpu_in_power_domain(i, id))
die_id != get_physical_die_id(i))
continue; continue;
set_cpufreq_scaling_min_max_from_cpuinfo(i, 1, 1); set_cpufreq_scaling_min_max_from_cpuinfo(i, 1, 1);
} }
} }
static int set_core_priority_and_min(int cpu, int mask_size, static int set_core_priority_and_min(struct isst_id *id, int mask_size,
cpu_set_t *cpu_mask, int min_high, cpu_set_t *cpu_mask, int min_high,
int min_low) int min_low)
{ {
int pkg_id, die_id, ret, i; int ret, i;
if (!CPU_COUNT_S(mask_size, cpu_mask)) if (!CPU_COUNT_S(mask_size, cpu_mask))
return -1; return -1;
ret = set_clos_param(cpu, 0, 0, 0, min_high, 0xff); ret = set_clos_param(id, 0, 0, 0, min_high, 0xff);
if (ret) if (ret)
return ret; return ret;
ret = set_clos_param(cpu, 1, 15, 15, min_low, 0xff); ret = set_clos_param(id, 1, 15, 15, min_low, 0xff);
if (ret) if (ret)
return ret; return ret;
ret = set_clos_param(cpu, 2, 15, 15, min_low, 0xff); ret = set_clos_param(id, 2, 15, 15, min_low, 0xff);
if (ret) if (ret)
return ret; return ret;
ret = set_clos_param(cpu, 3, 15, 15, min_low, 0xff); ret = set_clos_param(id, 3, 15, 15, min_low, 0xff);
if (ret) if (ret)
return ret; return ret;
pkg_id = get_physical_package_id(cpu);
die_id = get_physical_die_id(cpu);
for (i = 0; i < get_topo_max_cpus(); ++i) { for (i = 0; i < get_topo_max_cpus(); ++i) {
int clos; int clos;
struct isst_id tid;
if (pkg_id != get_physical_package_id(i) || if (!is_cpu_in_power_domain(i, id))
die_id != get_physical_die_id(i))
continue; continue;
if (CPU_ISSET_S(i, mask_size, cpu_mask)) if (CPU_ISSET_S(i, mask_size, cpu_mask))
...@@ -1675,7 +1671,8 @@ static int set_core_priority_and_min(int cpu, int mask_size, ...@@ -1675,7 +1671,8 @@ static int set_core_priority_and_min(int cpu, int mask_size,
clos = 3; clos = 3;
debug_printf("Associate cpu: %d clos: %d\n", i, clos); debug_printf("Associate cpu: %d clos: %d\n", i, clos);
ret = isst_clos_associate(i, clos); set_isst_id(&tid, i);
ret = isst_clos_associate(&tid, clos);
if (ret) { if (ret) {
isst_display_error_info_message(1, "isst_clos_associate failed", 0, 0); isst_display_error_info_message(1, "isst_clos_associate failed", 0, 0);
return ret; return ret;
...@@ -1685,20 +1682,20 @@ static int set_core_priority_and_min(int cpu, int mask_size, ...@@ -1685,20 +1682,20 @@ static int set_core_priority_and_min(int cpu, int mask_size,
return 0; return 0;
} }
static int set_pbf_core_power(int cpu) static int set_pbf_core_power(struct isst_id *id)
{ {
struct isst_pbf_info pbf_info; struct isst_pbf_info pbf_info;
struct isst_pkg_ctdp pkg_dev; struct isst_pkg_ctdp pkg_dev;
int ret; int ret;
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (ret) { if (ret) {
debug_printf("isst_get_ctdp_levels failed"); debug_printf("isst_get_ctdp_levels failed");
return ret; return ret;
} }
debug_printf("Current_level: %d\n", pkg_dev.current_level); debug_printf("Current_level: %d\n", pkg_dev.current_level);
ret = isst_get_pbf_info(cpu, pkg_dev.current_level, &pbf_info); ret = isst_get_pbf_info(id, pkg_dev.current_level, &pbf_info);
if (ret) { if (ret) {
debug_printf("isst_get_pbf_info failed"); debug_printf("isst_get_pbf_info failed");
return ret; return ret;
...@@ -1706,7 +1703,7 @@ static int set_pbf_core_power(int cpu) ...@@ -1706,7 +1703,7 @@ static int set_pbf_core_power(int cpu)
debug_printf("p1_high: %d p1_low: %d\n", pbf_info.p1_high, debug_printf("p1_high: %d p1_low: %d\n", pbf_info.p1_high,
pbf_info.p1_low); pbf_info.p1_low);
ret = set_core_priority_and_min(cpu, pbf_info.core_cpumask_size, ret = set_core_priority_and_min(id, pbf_info.core_cpumask_size,
pbf_info.core_cpumask, pbf_info.core_cpumask,
pbf_info.p1_high, pbf_info.p1_low); pbf_info.p1_high, pbf_info.p1_low);
if (ret) { if (ret) {
...@@ -1714,7 +1711,7 @@ static int set_pbf_core_power(int cpu) ...@@ -1714,7 +1711,7 @@ static int set_pbf_core_power(int cpu)
return ret; return ret;
} }
ret = isst_pm_qos_config(cpu, 1, 1); ret = isst_pm_qos_config(id, 1, 1);
if (ret) { if (ret) {
debug_printf("isst_pm_qos_config failed"); debug_printf("isst_pm_qos_config failed");
return ret; return ret;
...@@ -1723,7 +1720,7 @@ static int set_pbf_core_power(int cpu) ...@@ -1723,7 +1720,7 @@ static int set_pbf_core_power(int cpu)
return 0; return 0;
} }
static void set_pbf_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, static void set_pbf_for_cpu(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
struct isst_pkg_ctdp_level_info ctdp_level; struct isst_pkg_ctdp_level_info ctdp_level;
...@@ -1734,22 +1731,22 @@ static void set_pbf_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, ...@@ -1734,22 +1731,22 @@ static void set_pbf_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
if (is_clx_n_platform()) { if (is_clx_n_platform()) {
ret = 0; ret = 0;
if (status) { if (status) {
set_clx_pbf_cpufreq_scaling_min_max(cpu); set_clx_pbf_cpufreq_scaling_min_max(id);
} else { } else {
set_scaling_max_to_cpuinfo_max(cpu); set_scaling_max_to_cpuinfo_max(id);
set_scaling_min_to_cpuinfo_min(cpu); set_scaling_min_to_cpuinfo_min(id);
} }
goto disp_result; goto disp_result;
} }
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Failed to get number of levels", 0, 0); isst_display_error_info_message(1, "Failed to get number of levels", 0, 0);
goto disp_result; goto disp_result;
} }
ret = isst_get_ctdp_control(cpu, pkg_dev.current_level, &ctdp_level); ret = isst_get_ctdp_control(id, pkg_dev.current_level, &ctdp_level);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Failed to get current level", 0, 0); isst_display_error_info_message(1, "Failed to get current level", 0, 0);
goto disp_result; goto disp_result;
...@@ -1762,34 +1759,34 @@ static void set_pbf_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, ...@@ -1762,34 +1759,34 @@ static void set_pbf_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
} }
if (auto_mode && status) { if (auto_mode && status) {
ret = set_pbf_core_power(cpu); ret = set_pbf_core_power(id);
if (ret) if (ret)
goto disp_result; goto disp_result;
} }
ret = isst_set_pbf_fact_status(cpu, 1, status); ret = isst_set_pbf_fact_status(id, 1, status);
if (ret) { if (ret) {
debug_printf("isst_set_pbf_fact_status failed"); debug_printf("isst_set_pbf_fact_status failed");
if (auto_mode) if (auto_mode)
isst_pm_qos_config(cpu, 0, 0); isst_pm_qos_config(id, 0, 0);
} else { } else {
if (auto_mode) { if (auto_mode) {
if (status) if (status)
set_scaling_min_to_cpuinfo_max(cpu); set_scaling_min_to_cpuinfo_max(id);
else else
set_scaling_min_to_cpuinfo_min(cpu); set_scaling_min_to_cpuinfo_min(id);
} }
} }
if (auto_mode && !status) if (auto_mode && !status)
isst_pm_qos_config(cpu, 0, 1); isst_pm_qos_config(id, 0, 1);
disp_result: disp_result:
if (status) if (status)
isst_display_result(cpu, outf, "base-freq", "enable", isst_display_result(id, outf, "base-freq", "enable",
ret); ret);
else else
isst_display_result(cpu, outf, "base-freq", "disable", isst_display_result(id, outf, "base-freq", "disable",
ret); ret);
} }
...@@ -1838,19 +1835,19 @@ static void set_pbf_enable(int arg) ...@@ -1838,19 +1835,19 @@ static void set_pbf_enable(int arg)
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
} }
static void dump_fact_config_for_cpu(int cpu, void *arg1, void *arg2, static void dump_fact_config_for_cpu(struct isst_id *id, void *arg1, void *arg2,
void *arg3, void *arg4) void *arg3, void *arg4)
{ {
struct isst_fact_info fact_info; struct isst_fact_info fact_info;
int ret; int ret;
ret = isst_get_fact_info(cpu, tdp_level, fact_bucket, &fact_info); ret = isst_get_fact_info(id, tdp_level, fact_bucket, &fact_info);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Failed to get turbo-freq info at this level", 1, tdp_level); isst_display_error_info_message(1, "Failed to get turbo-freq info at this level", 1, tdp_level);
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
exit(1); exit(1);
} else { } else {
isst_fact_display_information(cpu, outf, tdp_level, fact_bucket, isst_fact_display_information(id, outf, tdp_level, fact_bucket,
fact_avx, &fact_info); fact_avx, &fact_info);
} }
} }
...@@ -1884,7 +1881,7 @@ static void dump_fact_config(int arg) ...@@ -1884,7 +1881,7 @@ static void dump_fact_config(int arg)
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
} }
static void set_fact_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, static void set_fact_for_cpu(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
struct isst_pkg_ctdp_level_info ctdp_level; struct isst_pkg_ctdp_level_info ctdp_level;
...@@ -1898,13 +1895,13 @@ static void set_fact_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, ...@@ -1898,13 +1895,13 @@ static void set_fact_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
goto disp_results; goto disp_results;
} }
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Failed to get number of levels", 0, 0); isst_display_error_info_message(1, "Failed to get number of levels", 0, 0);
goto disp_results; goto disp_results;
} }
ret = isst_get_ctdp_control(cpu, pkg_dev.current_level, &ctdp_level); ret = isst_get_ctdp_control(id, pkg_dev.current_level, &ctdp_level);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Failed to get current level", 0, 0); isst_display_error_info_message(1, "Failed to get current level", 0, 0);
goto disp_results; goto disp_results;
...@@ -1917,16 +1914,16 @@ static void set_fact_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, ...@@ -1917,16 +1914,16 @@ static void set_fact_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
} }
if (status) { if (status) {
ret = isst_pm_qos_config(cpu, 1, 1); ret = isst_pm_qos_config(id, 1, 1);
if (ret) if (ret)
goto disp_results; goto disp_results;
} }
ret = isst_set_pbf_fact_status(cpu, 0, status); ret = isst_set_pbf_fact_status(id, 0, status);
if (ret) { if (ret) {
debug_printf("isst_set_pbf_fact_status failed"); debug_printf("isst_set_pbf_fact_status failed");
if (auto_mode) if (auto_mode)
isst_pm_qos_config(cpu, 0, 0); isst_pm_qos_config(id, 0, 0);
goto disp_results; goto disp_results;
} }
...@@ -1935,31 +1932,32 @@ static void set_fact_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, ...@@ -1935,31 +1932,32 @@ static void set_fact_for_cpu(int cpu, void *arg1, void *arg2, void *arg3,
if (status) { if (status) {
struct isst_pkg_ctdp pkg_dev; struct isst_pkg_ctdp pkg_dev;
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (!ret) if (!ret)
ret = isst_set_trl(cpu, fact_trl); ret = isst_set_trl(id, fact_trl);
if (ret && auto_mode) if (ret && auto_mode)
isst_pm_qos_config(cpu, 0, 0); isst_pm_qos_config(id, 0, 0);
} else { } else {
if (auto_mode) if (auto_mode)
isst_pm_qos_config(cpu, 0, 0); isst_pm_qos_config(id, 0, 0);
} }
disp_results: disp_results:
if (status) { if (status) {
isst_display_result(cpu, outf, "turbo-freq", "enable", ret); isst_display_result(id, outf, "turbo-freq", "enable", ret);
if (ret) if (ret)
fact_enable_fail = ret; fact_enable_fail = ret;
} else { } else {
/* Since we modified TRL during Fact enable, restore it */ /* Since we modified TRL during Fact enable, restore it */
isst_set_trl_from_current_tdp(cpu, fact_trl); isst_set_trl_from_current_tdp(id, fact_trl);
isst_display_result(cpu, outf, "turbo-freq", "disable", ret); isst_display_result(id, outf, "turbo-freq", "disable", ret);
} }
} }
static void set_fact_enable(int arg) static void set_fact_enable(int arg)
{ {
int i, ret, enable = arg; int i, ret, enable = arg;
struct isst_id id;
if (cmd_help) { if (cmd_help) {
if (enable) { if (enable) {
...@@ -2033,19 +2031,20 @@ static void set_fact_enable(int arg) ...@@ -2033,19 +2031,20 @@ static void set_fact_enable(int arg)
if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask)) if (!CPU_ISSET_S(i, present_cpumask_size, present_cpumask))
continue; continue;
ret = set_clos_param(i, 0, 0, 0, 0, 0xff); set_isst_id(&id, i);
ret = set_clos_param(&id, 0, 0, 0, 0, 0xff);
if (ret) if (ret)
goto error_disp; goto error_disp;
ret = set_clos_param(i, 1, 15, 15, 0, 0xff); ret = set_clos_param(&id, 1, 15, 15, 0, 0xff);
if (ret) if (ret)
goto error_disp; goto error_disp;
ret = set_clos_param(i, 2, 15, 15, 0, 0xff); ret = set_clos_param(&id, 2, 15, 15, 0, 0xff);
if (ret) if (ret)
goto error_disp; goto error_disp;
ret = set_clos_param(i, 3, 15, 15, 0, 0xff); ret = set_clos_param(&id, 3, 15, 15, 0, 0xff);
if (ret) if (ret)
goto error_disp; goto error_disp;
...@@ -2055,21 +2054,22 @@ static void set_fact_enable(int arg) ...@@ -2055,21 +2054,22 @@ static void set_fact_enable(int arg)
clos = 3; clos = 3;
debug_printf("Associate cpu: %d clos: %d\n", i, clos); debug_printf("Associate cpu: %d clos: %d\n", i, clos);
ret = isst_clos_associate(i, clos); ret = isst_clos_associate(&id, clos);
if (ret) if (ret)
goto error_disp; goto error_disp;
} }
isst_display_result(-1, outf, "turbo-freq --auto", "enable", 0); set_isst_id(&id, -1);
isst_display_result(&id, outf, "turbo-freq --auto", "enable", 0);
} }
return; return;
error_disp: error_disp:
isst_display_result(i, outf, "turbo-freq --auto", "enable", ret); isst_display_result(&id, outf, "turbo-freq --auto", "enable", ret);
} }
static void enable_clos_qos_config(int cpu, void *arg1, void *arg2, void *arg3, static void enable_clos_qos_config(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
int ret; int ret;
...@@ -2078,15 +2078,15 @@ static void enable_clos_qos_config(int cpu, void *arg1, void *arg2, void *arg3, ...@@ -2078,15 +2078,15 @@ static void enable_clos_qos_config(int cpu, void *arg1, void *arg2, void *arg3,
if (is_skx_based_platform()) if (is_skx_based_platform())
clos_priority_type = 1; clos_priority_type = 1;
ret = isst_pm_qos_config(cpu, status, clos_priority_type); ret = isst_pm_qos_config(id, status, clos_priority_type);
if (ret) if (ret)
isst_display_error_info_message(1, "isst_pm_qos_config failed", 0, 0); isst_display_error_info_message(1, "isst_pm_qos_config failed", 0, 0);
if (status) if (status)
isst_display_result(cpu, outf, "core-power", "enable", isst_display_result(id, outf, "core-power", "enable",
ret); ret);
else else
isst_display_result(cpu, outf, "core-power", "disable", isst_display_result(id, outf, "core-power", "disable",
ret); ret);
} }
...@@ -2125,17 +2125,17 @@ static void set_clos_enable(int arg) ...@@ -2125,17 +2125,17 @@ static void set_clos_enable(int arg)
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
} }
static void dump_clos_config_for_cpu(int cpu, void *arg1, void *arg2, static void dump_clos_config_for_cpu(struct isst_id *id, void *arg1, void *arg2,
void *arg3, void *arg4) void *arg3, void *arg4)
{ {
struct isst_clos_config clos_config; struct isst_clos_config clos_config;
int ret; int ret;
ret = isst_pm_get_clos(cpu, current_clos, &clos_config); ret = isst_pm_get_clos(id, current_clos, &clos_config);
if (ret) if (ret)
isst_display_error_info_message(1, "isst_pm_get_clos failed", 0, 0); isst_display_error_info_message(1, "isst_pm_get_clos failed", 0, 0);
else else
isst_clos_display_information(cpu, outf, current_clos, isst_clos_display_information(id, outf, current_clos,
&clos_config); &clos_config);
} }
...@@ -2164,19 +2164,19 @@ static void dump_clos_config(int arg) ...@@ -2164,19 +2164,19 @@ static void dump_clos_config(int arg)
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
} }
static void get_clos_info_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, static void get_clos_info_for_cpu(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
int enable, ret, prio_type; int enable, ret, prio_type;
ret = isst_clos_get_clos_information(cpu, &enable, &prio_type); ret = isst_clos_get_clos_information(id, &enable, &prio_type);
if (ret) if (ret)
isst_display_error_info_message(1, "isst_clos_get_info failed", 0, 0); isst_display_error_info_message(1, "isst_clos_get_info failed", 0, 0);
else { else {
int cp_state, cp_cap; int cp_state, cp_cap;
isst_read_pm_config(cpu, &cp_state, &cp_cap); isst_read_pm_config(id, &cp_state, &cp_cap);
isst_clos_display_clos_information(cpu, outf, enable, prio_type, isst_clos_display_clos_information(id, outf, enable, prio_type,
cp_state, cp_cap); cp_state, cp_cap);
} }
} }
...@@ -2201,25 +2201,22 @@ static void dump_clos_info(int arg) ...@@ -2201,25 +2201,22 @@ static void dump_clos_info(int arg)
} }
static void set_clos_config_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, static void set_clos_config_for_cpu(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
struct isst_clos_config clos_config; struct isst_clos_config clos_config;
int ret; int ret;
clos_config.pkg_id = get_physical_package_id(cpu);
clos_config.die_id = get_physical_die_id(cpu);
clos_config.epp = clos_epp; clos_config.epp = clos_epp;
clos_config.clos_prop_prio = clos_prop_prio; clos_config.clos_prop_prio = clos_prop_prio;
clos_config.clos_min = clos_min; clos_config.clos_min = clos_min;
clos_config.clos_max = clos_max; clos_config.clos_max = clos_max;
clos_config.clos_desired = clos_desired; clos_config.clos_desired = clos_desired;
ret = isst_set_clos(cpu, current_clos, &clos_config); ret = isst_set_clos(id, current_clos, &clos_config);
if (ret) if (ret)
isst_display_error_info_message(1, "isst_set_clos failed", 0, 0); isst_display_error_info_message(1, "isst_set_clos failed", 0, 0);
else else
isst_display_result(cpu, outf, "core-power", "config", ret); isst_display_result(id, outf, "core-power", "config", ret);
} }
static void set_clos_config(int arg) static void set_clos_config(int arg)
...@@ -2275,16 +2272,16 @@ static void set_clos_config(int arg) ...@@ -2275,16 +2272,16 @@ static void set_clos_config(int arg)
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
} }
static void set_clos_assoc_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, static void set_clos_assoc_for_cpu(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
int ret; int ret;
ret = isst_clos_associate(cpu, current_clos); ret = isst_clos_associate(id, current_clos);
if (ret) if (ret)
debug_printf("isst_clos_associate failed"); debug_printf("isst_clos_associate failed");
else else
isst_display_result(cpu, outf, "core-power", "assoc", ret); isst_display_result(id, outf, "core-power", "assoc", ret);
} }
static void set_clos_assoc(int arg) static void set_clos_assoc(int arg)
...@@ -2312,16 +2309,16 @@ static void set_clos_assoc(int arg) ...@@ -2312,16 +2309,16 @@ static void set_clos_assoc(int arg)
} }
} }
static void get_clos_assoc_for_cpu(int cpu, void *arg1, void *arg2, void *arg3, static void get_clos_assoc_for_cpu(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
int clos, ret; int clos, ret;
ret = isst_clos_get_assoc_status(cpu, &clos); ret = isst_clos_get_assoc_status(id, &clos);
if (ret) if (ret)
isst_display_error_info_message(1, "isst_clos_get_assoc_status failed", 0, 0); isst_display_error_info_message(1, "isst_clos_get_assoc_status failed", 0, 0);
else else
isst_clos_display_assoc_information(cpu, outf, clos); isst_clos_display_assoc_information(id, outf, clos);
} }
static void get_clos_assoc(int arg) static void get_clos_assoc(int arg)
...@@ -2343,27 +2340,28 @@ static void get_clos_assoc(int arg) ...@@ -2343,27 +2340,28 @@ static void get_clos_assoc(int arg)
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
} }
static void set_turbo_mode_for_cpu(int cpu, int status) static void set_turbo_mode_for_cpu(struct isst_id *id, int status)
{ {
int base_freq; int base_freq;
if (status) { if (status) {
base_freq = get_cpufreq_base_freq(cpu); base_freq = get_cpufreq_base_freq(id->cpu);
set_cpufreq_scaling_min_max(cpu, 1, base_freq); set_cpufreq_scaling_min_max(id->cpu, 1, base_freq);
} else { } else {
set_scaling_max_to_cpuinfo_max(cpu); set_scaling_max_to_cpuinfo_max(id);
} }
if (status) { if (status) {
isst_display_result(cpu, outf, "turbo-mode", "enable", 0); isst_display_result(id, outf, "turbo-mode", "enable", 0);
} else { } else {
isst_display_result(cpu, outf, "turbo-mode", "disable", 0); isst_display_result(id, outf, "turbo-mode", "disable", 0);
} }
} }
static void set_turbo_mode(int arg) static void set_turbo_mode(int arg)
{ {
int i, enable = arg; int i, enable = arg;
struct isst_id id;
if (cmd_help) { if (cmd_help) {
if (enable) if (enable)
...@@ -2385,14 +2383,16 @@ static void set_turbo_mode(int arg) ...@@ -2385,14 +2383,16 @@ static void set_turbo_mode(int arg)
online = online =
1; /* online entry for CPU 0 needs some special configs */ 1; /* online entry for CPU 0 needs some special configs */
if (online) if (online) {
set_turbo_mode_for_cpu(i, enable); set_isst_id(&id, i);
set_turbo_mode_for_cpu(&id, enable);
}
} }
isst_ctdp_display_information_end(outf); isst_ctdp_display_information_end(outf);
} }
static void get_set_trl(int cpu, void *arg1, void *arg2, void *arg3, static void get_set_trl(struct isst_id *id, void *arg1, void *arg2, void *arg3,
void *arg4) void *arg4)
{ {
unsigned long long trl; unsigned long long trl;
...@@ -2405,16 +2405,16 @@ static void get_set_trl(int cpu, void *arg1, void *arg2, void *arg3, ...@@ -2405,16 +2405,16 @@ static void get_set_trl(int cpu, void *arg1, void *arg2, void *arg3,
} }
if (set) { if (set) {
ret = isst_set_trl(cpu, fact_trl); ret = isst_set_trl(id, fact_trl);
isst_display_result(cpu, outf, "turbo-mode", "set-trl", ret); isst_display_result(id, outf, "turbo-mode", "set-trl", ret);
return; return;
} }
ret = isst_get_trl(cpu, &trl); ret = isst_get_trl(id, &trl);
if (ret) if (ret)
isst_display_result(cpu, outf, "turbo-mode", "get-trl", ret); isst_display_result(id, outf, "turbo-mode", "get-trl", ret);
else else
isst_trl_display_information(cpu, outf, trl); isst_trl_display_information(id, outf, trl);
} }
static void process_trl(int arg) static void process_trl(int arg)
...@@ -2754,9 +2754,6 @@ void process_command(int argc, char **argv, ...@@ -2754,9 +2754,6 @@ void process_command(int argc, char **argv,
} }
} }
if (!is_clx_n_platform())
create_cpu_map();
i = 0; i = 0;
while (cmds[i].feature) { while (cmds[i].feature) {
if (!strcmp(cmds[i].feature, feature) && if (!strcmp(cmds[i].feature, feature) &&
...@@ -2960,11 +2957,9 @@ static void cmdline(int argc, char **argv) ...@@ -2960,11 +2957,9 @@ static void cmdline(int argc, char **argv)
if (force_cpus_online) if (force_cpus_online)
force_all_cpus_online(); force_all_cpus_online();
store_cpu_topology(); store_cpu_topology();
set_cpu_present_cpu_mask(); create_cpu_map();
set_cpu_target_cpu_mask();
if (oob_mode) { if (oob_mode) {
create_cpu_map();
if (debug_flag) if (debug_flag)
fprintf(stderr, "OOB mode is enabled in debug mode\n"); fprintf(stderr, "OOB mode is enabled in debug mode\n");
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "isst.h" #include "isst.h"
int isst_write_pm_config(int cpu, int cp_state) int isst_write_pm_config(struct isst_id *id, int cp_state)
{ {
unsigned int req, resp; unsigned int req, resp;
int ret; int ret;
...@@ -16,27 +16,27 @@ int isst_write_pm_config(int cpu, int cp_state) ...@@ -16,27 +16,27 @@ int isst_write_pm_config(int cpu, int cp_state)
else else
req = 0; req = 0;
ret = isst_send_mbox_command(cpu, WRITE_PM_CONFIG, PM_FEATURE, 0, req, ret = isst_send_mbox_command(id->cpu, WRITE_PM_CONFIG, PM_FEATURE, 0, req,
&resp); &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d WRITE_PM_CONFIG resp:%x\n", cpu, resp); debug_printf("cpu:%d WRITE_PM_CONFIG resp:%x\n", id->cpu, resp);
return 0; return 0;
} }
int isst_read_pm_config(int cpu, int *cp_state, int *cp_cap) int isst_read_pm_config(struct isst_id *id, int *cp_state, int *cp_cap)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, READ_PM_CONFIG, PM_FEATURE, 0, 0, ret = isst_send_mbox_command(id->cpu, READ_PM_CONFIG, PM_FEATURE, 0, 0,
&resp); &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d READ_PM_CONFIG resp:%x\n", cpu, resp); debug_printf("cpu:%d READ_PM_CONFIG resp:%x\n", id->cpu, resp);
*cp_state = resp & BIT(16); *cp_state = resp & BIT(16);
*cp_cap = resp & BIT(0) ? 1 : 0; *cp_cap = resp & BIT(0) ? 1 : 0;
...@@ -44,12 +44,12 @@ int isst_read_pm_config(int cpu, int *cp_state, int *cp_cap) ...@@ -44,12 +44,12 @@ int isst_read_pm_config(int cpu, int *cp_state, int *cp_cap)
return 0; return 0;
} }
int isst_get_ctdp_levels(int cpu, struct isst_pkg_ctdp *pkg_dev) int isst_get_ctdp_levels(struct isst_id *id, struct isst_pkg_ctdp *pkg_dev)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_GET_LEVELS_INFO, 0, 0, &resp); CONFIG_TDP_GET_LEVELS_INFO, 0, 0, &resp);
if (ret) { if (ret) {
pkg_dev->levels = 0; pkg_dev->levels = 0;
...@@ -60,7 +60,7 @@ int isst_get_ctdp_levels(int cpu, struct isst_pkg_ctdp *pkg_dev) ...@@ -60,7 +60,7 @@ int isst_get_ctdp_levels(int cpu, struct isst_pkg_ctdp *pkg_dev)
return 0; return 0;
} }
debug_printf("cpu:%d CONFIG_TDP_GET_LEVELS_INFO resp:%x\n", cpu, resp); debug_printf("cpu:%d CONFIG_TDP_GET_LEVELS_INFO resp:%x\n", id->cpu, resp);
pkg_dev->version = resp & 0xff; pkg_dev->version = resp & 0xff;
pkg_dev->levels = (resp >> 8) & 0xff; pkg_dev->levels = (resp >> 8) & 0xff;
...@@ -71,14 +71,14 @@ int isst_get_ctdp_levels(int cpu, struct isst_pkg_ctdp *pkg_dev) ...@@ -71,14 +71,14 @@ int isst_get_ctdp_levels(int cpu, struct isst_pkg_ctdp *pkg_dev)
return 0; return 0;
} }
int isst_get_ctdp_control(int cpu, int config_index, int isst_get_ctdp_control(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level) struct isst_pkg_ctdp_level_info *ctdp_level)
{ {
int cp_state, cp_cap; int cp_state, cp_cap;
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_GET_TDP_CONTROL, 0, CONFIG_TDP_GET_TDP_CONTROL, 0,
config_index, &resp); config_index, &resp);
if (ret) if (ret)
...@@ -89,30 +89,30 @@ int isst_get_ctdp_control(int cpu, int config_index, ...@@ -89,30 +89,30 @@ int isst_get_ctdp_control(int cpu, int config_index,
ctdp_level->fact_enabled = !!(resp & BIT(16)); ctdp_level->fact_enabled = !!(resp & BIT(16));
ctdp_level->pbf_enabled = !!(resp & BIT(17)); ctdp_level->pbf_enabled = !!(resp & BIT(17));
ret = isst_read_pm_config(cpu, &cp_state, &cp_cap); ret = isst_read_pm_config(id, &cp_state, &cp_cap);
if (ret) { if (ret) {
debug_printf("cpu:%d pm_config is not supported \n", cpu); debug_printf("cpu:%d pm_config is not supported\n", id->cpu);
} else { } else {
debug_printf("cpu:%d pm_config SST-CP state:%d cap:%d \n", cpu, cp_state, cp_cap); debug_printf("cpu:%d pm_config SST-CP state:%d cap:%d\n", id->cpu, cp_state, cp_cap);
ctdp_level->sst_cp_support = cp_cap; ctdp_level->sst_cp_support = cp_cap;
ctdp_level->sst_cp_enabled = cp_state; ctdp_level->sst_cp_enabled = cp_state;
} }
debug_printf( debug_printf(
"cpu:%d CONFIG_TDP_GET_TDP_CONTROL resp:%x fact_support:%d pbf_support: %d fact_enabled:%d pbf_enabled:%d\n", "cpu:%d CONFIG_TDP_GET_TDP_CONTROL resp:%x fact_support:%d pbf_support: %d fact_enabled:%d pbf_enabled:%d\n",
cpu, resp, ctdp_level->fact_support, ctdp_level->pbf_support, id->cpu, resp, ctdp_level->fact_support, ctdp_level->pbf_support,
ctdp_level->fact_enabled, ctdp_level->pbf_enabled); ctdp_level->fact_enabled, ctdp_level->pbf_enabled);
return 0; return 0;
} }
int isst_get_tdp_info(int cpu, int config_index, int isst_get_tdp_info(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level) struct isst_pkg_ctdp_level_info *ctdp_level)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, CONFIG_TDP_GET_TDP_INFO, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_TDP_INFO,
0, config_index, &resp); 0, config_index, &resp);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Invalid level, Can't get TDP information at level", 1, config_index); isst_display_error_info_message(1, "Invalid level, Can't get TDP information at level", 1, config_index);
...@@ -124,18 +124,18 @@ int isst_get_tdp_info(int cpu, int config_index, ...@@ -124,18 +124,18 @@ int isst_get_tdp_info(int cpu, int config_index,
debug_printf( debug_printf(
"cpu:%d ctdp:%d CONFIG_TDP_GET_TDP_INFO resp:%x tdp_ratio:%d pkg_tdp:%d\n", "cpu:%d ctdp:%d CONFIG_TDP_GET_TDP_INFO resp:%x tdp_ratio:%d pkg_tdp:%d\n",
cpu, config_index, resp, ctdp_level->tdp_ratio, id->cpu, config_index, resp, ctdp_level->tdp_ratio,
ctdp_level->pkg_tdp); ctdp_level->pkg_tdp);
return 0; return 0;
} }
int isst_get_pwr_info(int cpu, int config_index, int isst_get_pwr_info(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level) struct isst_pkg_ctdp_level_info *ctdp_level)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, CONFIG_TDP_GET_PWR_INFO, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_PWR_INFO,
0, config_index, &resp); 0, config_index, &resp);
if (ret) if (ret)
return ret; return ret;
...@@ -145,18 +145,18 @@ int isst_get_pwr_info(int cpu, int config_index, ...@@ -145,18 +145,18 @@ int isst_get_pwr_info(int cpu, int config_index,
debug_printf( debug_printf(
"cpu:%d ctdp:%d CONFIG_TDP_GET_PWR_INFO resp:%x pkg_max_power:%d pkg_min_power:%d\n", "cpu:%d ctdp:%d CONFIG_TDP_GET_PWR_INFO resp:%x pkg_max_power:%d pkg_min_power:%d\n",
cpu, config_index, resp, ctdp_level->pkg_max_power, id->cpu, config_index, resp, ctdp_level->pkg_max_power,
ctdp_level->pkg_min_power); ctdp_level->pkg_min_power);
return 0; return 0;
} }
void isst_get_uncore_p0_p1_info(int cpu, int config_index, void isst_get_uncore_p0_p1_info(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level) struct isst_pkg_ctdp_level_info *ctdp_level)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_GET_UNCORE_P0_P1_INFO, 0, CONFIG_TDP_GET_UNCORE_P0_P1_INFO, 0,
config_index, &resp); config_index, &resp);
if (ret) { if (ret) {
...@@ -169,16 +169,16 @@ void isst_get_uncore_p0_p1_info(int cpu, int config_index, ...@@ -169,16 +169,16 @@ void isst_get_uncore_p0_p1_info(int cpu, int config_index,
ctdp_level->uncore_p1 = (resp & GENMASK(15, 8)) >> 8; ctdp_level->uncore_p1 = (resp & GENMASK(15, 8)) >> 8;
debug_printf( debug_printf(
"cpu:%d ctdp:%d CONFIG_TDP_GET_UNCORE_P0_P1_INFO resp:%x uncore p0:%d uncore p1:%d\n", "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, id->cpu, config_index, resp, ctdp_level->uncore_p0,
ctdp_level->uncore_p1); ctdp_level->uncore_p1);
} }
void isst_get_p1_info(int cpu, int config_index, void isst_get_p1_info(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level) struct isst_pkg_ctdp_level_info *ctdp_level)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, CONFIG_TDP_GET_P1_INFO, 0, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_P1_INFO, 0,
config_index, &resp); config_index, &resp);
if (ret) { if (ret) {
ctdp_level->sse_p1 = 0; ctdp_level->sse_p1 = 0;
...@@ -192,17 +192,17 @@ void isst_get_p1_info(int cpu, int config_index, ...@@ -192,17 +192,17 @@ void isst_get_p1_info(int cpu, int config_index,
ctdp_level->avx512_p1 = (resp & GENMASK(23, 16)) >> 16; ctdp_level->avx512_p1 = (resp & GENMASK(23, 16)) >> 16;
debug_printf( debug_printf(
"cpu:%d ctdp:%d CONFIG_TDP_GET_P1_INFO resp:%x sse_p1:%d avx2_p1:%d avx512_p1:%d\n", "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, id->cpu, config_index, resp, ctdp_level->sse_p1,
ctdp_level->avx2_p1, ctdp_level->avx512_p1); ctdp_level->avx2_p1, ctdp_level->avx512_p1);
} }
void isst_get_uncore_mem_freq(int cpu, int config_index, void isst_get_uncore_mem_freq(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level) struct isst_pkg_ctdp_level_info *ctdp_level)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, CONFIG_TDP_GET_MEM_FREQ, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_MEM_FREQ,
0, config_index, &resp); 0, config_index, &resp);
if (ret) { if (ret) {
ctdp_level->mem_freq = 0; ctdp_level->mem_freq = 0;
...@@ -226,16 +226,16 @@ void isst_get_uncore_mem_freq(int cpu, int config_index, ...@@ -226,16 +226,16 @@ void isst_get_uncore_mem_freq(int cpu, int config_index,
} }
debug_printf( debug_printf(
"cpu:%d ctdp:%d CONFIG_TDP_GET_MEM_FREQ resp:%x uncore mem_freq:%d\n", "cpu:%d ctdp:%d CONFIG_TDP_GET_MEM_FREQ resp:%x uncore mem_freq:%d\n",
cpu, config_index, resp, ctdp_level->mem_freq); id->cpu, config_index, resp, ctdp_level->mem_freq);
} }
int isst_get_tjmax_info(int cpu, int config_index, int isst_get_tjmax_info(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level) struct isst_pkg_ctdp_level_info *ctdp_level)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, CONFIG_TDP_GET_TJMAX_INFO, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_TJMAX_INFO,
0, config_index, &resp); 0, config_index, &resp);
if (ret) if (ret)
return ret; return ret;
...@@ -244,12 +244,12 @@ int isst_get_tjmax_info(int cpu, int config_index, ...@@ -244,12 +244,12 @@ int isst_get_tjmax_info(int cpu, int config_index,
debug_printf( debug_printf(
"cpu:%d ctdp:%d CONFIG_TDP_GET_TJMAX_INFO resp:%x t_proc_hot:%d\n", "cpu:%d ctdp:%d CONFIG_TDP_GET_TJMAX_INFO resp:%x t_proc_hot:%d\n",
cpu, config_index, resp, ctdp_level->t_proc_hot); id->cpu, config_index, resp, ctdp_level->t_proc_hot);
return 0; return 0;
} }
int isst_get_coremask_info(int cpu, int config_index, int isst_get_coremask_info(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level) struct isst_pkg_ctdp_level_info *ctdp_level)
{ {
unsigned int resp; unsigned int resp;
...@@ -260,7 +260,7 @@ int isst_get_coremask_info(int cpu, int config_index, ...@@ -260,7 +260,7 @@ int isst_get_coremask_info(int cpu, int config_index,
unsigned long long mask; unsigned long long mask;
int cpu_count = 0; int cpu_count = 0;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_GET_CORE_MASK, 0, CONFIG_TDP_GET_CORE_MASK, 0,
(i << 8) | config_index, &resp); (i << 8) | config_index, &resp);
if (ret) if (ret)
...@@ -268,27 +268,27 @@ int isst_get_coremask_info(int cpu, int config_index, ...@@ -268,27 +268,27 @@ int isst_get_coremask_info(int cpu, int config_index,
debug_printf( debug_printf(
"cpu:%d ctdp:%d mask:%d CONFIG_TDP_GET_CORE_MASK resp:%x\n", "cpu:%d ctdp:%d mask:%d CONFIG_TDP_GET_CORE_MASK resp:%x\n",
cpu, config_index, i, resp); id->cpu, config_index, i, resp);
mask = (unsigned long long)resp << (32 * i); mask = (unsigned long long)resp << (32 * i);
set_cpu_mask_from_punit_coremask(cpu, mask, set_cpu_mask_from_punit_coremask(id, mask,
ctdp_level->core_cpumask_size, ctdp_level->core_cpumask_size,
ctdp_level->core_cpumask, ctdp_level->core_cpumask,
&cpu_count); &cpu_count);
ctdp_level->cpu_count += cpu_count; ctdp_level->cpu_count += cpu_count;
debug_printf("cpu:%d ctdp:%d mask:%d cpu count:%d\n", cpu, debug_printf("cpu:%d ctdp:%d mask:%d cpu count:%d\n", id->cpu,
config_index, i, ctdp_level->cpu_count); config_index, i, ctdp_level->cpu_count);
} }
return 0; return 0;
} }
int isst_get_get_trl_from_msr(int cpu, int *trl) int isst_get_get_trl_from_msr(struct isst_id *id, int *trl)
{ {
unsigned long long msr_trl; unsigned long long msr_trl;
int ret; int ret;
ret = isst_send_msr_command(cpu, 0x1AD, 0, &msr_trl); ret = isst_send_msr_command(id->cpu, 0x1AD, 0, &msr_trl);
if (ret) if (ret)
return ret; return ret;
...@@ -304,13 +304,13 @@ int isst_get_get_trl_from_msr(int cpu, int *trl) ...@@ -304,13 +304,13 @@ int isst_get_get_trl_from_msr(int cpu, int *trl)
return 0; return 0;
} }
int isst_get_get_trl(int cpu, int level, int avx_level, int *trl) int isst_get_get_trl(struct isst_id *id, int level, int avx_level, int *trl)
{ {
unsigned int req, resp; unsigned int req, resp;
int ret; int ret;
req = level | (avx_level << 16); req = level | (avx_level << 16);
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_GET_TURBO_LIMIT_RATIOS, 0, req, CONFIG_TDP_GET_TURBO_LIMIT_RATIOS, 0, req,
&resp); &resp);
if (ret) if (ret)
...@@ -318,7 +318,7 @@ int isst_get_get_trl(int cpu, int level, int avx_level, int *trl) ...@@ -318,7 +318,7 @@ int isst_get_get_trl(int cpu, int level, int avx_level, int *trl)
debug_printf( debug_printf(
"cpu:%d CONFIG_TDP_GET_TURBO_LIMIT_RATIOS req:%x resp:%x\n", "cpu:%d CONFIG_TDP_GET_TURBO_LIMIT_RATIOS req:%x resp:%x\n",
cpu, req, resp); id->cpu, req, resp);
trl[0] = resp & GENMASK(7, 0); trl[0] = resp & GENMASK(7, 0);
trl[1] = (resp & GENMASK(15, 8)) >> 8; trl[1] = (resp & GENMASK(15, 8)) >> 8;
...@@ -326,13 +326,13 @@ int isst_get_get_trl(int cpu, int level, int avx_level, int *trl) ...@@ -326,13 +326,13 @@ int isst_get_get_trl(int cpu, int level, int avx_level, int *trl)
trl[3] = (resp & GENMASK(31, 24)) >> 24; trl[3] = (resp & GENMASK(31, 24)) >> 24;
req = level | BIT(8) | (avx_level << 16); req = level | BIT(8) | (avx_level << 16);
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_GET_TURBO_LIMIT_RATIOS, 0, req, CONFIG_TDP_GET_TURBO_LIMIT_RATIOS, 0, req,
&resp); &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CONFIG_TDP_GET_TURBO_LIMIT req:%x resp:%x\n", cpu, debug_printf("cpu:%d CONFIG_TDP_GET_TURBO_LIMIT req:%x resp:%x\n", id->cpu,
req, resp); req, resp);
trl[4] = resp & GENMASK(7, 0); trl[4] = resp & GENMASK(7, 0);
...@@ -343,61 +343,37 @@ int isst_get_get_trl(int cpu, int level, int avx_level, int *trl) ...@@ -343,61 +343,37 @@ int isst_get_get_trl(int cpu, int level, int avx_level, int *trl)
return 0; return 0;
} }
int isst_get_trl_bucket_info(int cpu, unsigned long long *buckets_info) int isst_get_trl_bucket_info(struct isst_id *id, unsigned long long *buckets_info)
{ {
int ret; int ret;
debug_printf("cpu:%d bucket info via MSR\n", cpu); debug_printf("cpu:%d bucket info via MSR\n", id->cpu);
*buckets_info = 0; *buckets_info = 0;
ret = isst_send_msr_command(cpu, 0x1ae, 0, buckets_info); ret = isst_send_msr_command(id->cpu, 0x1ae, 0, buckets_info);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d bucket info via MSR successful 0x%llx\n", cpu, debug_printf("cpu:%d bucket info via MSR successful 0x%llx\n", id->cpu,
*buckets_info); *buckets_info);
return 0; return 0;
} }
int isst_set_tdp_level_msr(int cpu, int tdp_level) int isst_set_tdp_level(struct isst_id *id, int tdp_level)
{
unsigned long long level = tdp_level;
int ret;
debug_printf("cpu: tdp_level via MSR %d\n", cpu, tdp_level);
if (isst_get_config_tdp_lock_status(cpu)) {
isst_display_error_info_message(1, "tdp_locked", 0, 0);
return -1;
}
if (tdp_level > 2)
return -1; /* invalid value */
ret = isst_send_msr_command(cpu, 0x64b, 1, &level);
if (ret)
return ret;
debug_printf("cpu: tdp_level via MSR successful %d\n", cpu, tdp_level);
return 0;
}
int isst_set_tdp_level(int cpu, int tdp_level)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
if (isst_get_config_tdp_lock_status(cpu)) { if (isst_get_config_tdp_lock_status(id)) {
isst_display_error_info_message(1, "TDP is locked", 0, 0); isst_display_error_info_message(1, "TDP is locked", 0, 0);
return -1; return -1;
} }
ret = isst_send_mbox_command(cpu, CONFIG_TDP, CONFIG_TDP_SET_LEVEL, 0, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_SET_LEVEL, 0,
tdp_level, &resp); tdp_level, &resp);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Set TDP level failed for level", 1, tdp_level); isst_display_error_info_message(1, "Set TDP level failed for level", 1, tdp_level);
...@@ -407,14 +383,14 @@ int isst_set_tdp_level(int cpu, int tdp_level) ...@@ -407,14 +383,14 @@ int isst_set_tdp_level(int cpu, int tdp_level)
return 0; return 0;
} }
int isst_get_pbf_info(int cpu, int level, struct isst_pbf_info *pbf_info) int isst_get_pbf_info(struct isst_id *id, int level, struct isst_pbf_info *pbf_info)
{ {
struct isst_pkg_ctdp_level_info ctdp_level; struct isst_pkg_ctdp_level_info ctdp_level;
struct isst_pkg_ctdp pkg_dev; struct isst_pkg_ctdp pkg_dev;
int i, ret, max_punit_core, max_mask_index; int i, ret, max_punit_core, max_mask_index;
unsigned int req, resp; unsigned int req, resp;
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Failed to get number of levels", 0, 0); isst_display_error_info_message(1, "Failed to get number of levels", 0, 0);
return ret; return ret;
...@@ -425,7 +401,7 @@ int isst_get_pbf_info(int cpu, int level, struct isst_pbf_info *pbf_info) ...@@ -425,7 +401,7 @@ int isst_get_pbf_info(int cpu, int level, struct isst_pbf_info *pbf_info)
return -1; return -1;
} }
ret = isst_get_ctdp_control(cpu, level, &ctdp_level); ret = isst_get_ctdp_control(id, level, &ctdp_level);
if (ret) if (ret)
return ret; return ret;
...@@ -436,14 +412,14 @@ int isst_get_pbf_info(int cpu, int level, struct isst_pbf_info *pbf_info) ...@@ -436,14 +412,14 @@ int isst_get_pbf_info(int cpu, int level, struct isst_pbf_info *pbf_info)
pbf_info->core_cpumask_size = alloc_cpu_set(&pbf_info->core_cpumask); pbf_info->core_cpumask_size = alloc_cpu_set(&pbf_info->core_cpumask);
max_punit_core = get_max_punit_core_id(get_physical_package_id(cpu), get_physical_die_id(cpu)); max_punit_core = get_max_punit_core_id(id);
max_mask_index = max_punit_core > 32 ? 2 : 1; max_mask_index = max_punit_core > 32 ? 2 : 1;
for (i = 0; i < max_mask_index; ++i) { for (i = 0; i < max_mask_index; ++i) {
unsigned long long mask; unsigned long long mask;
int count; int count;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_PBF_GET_CORE_MASK_INFO, CONFIG_TDP_PBF_GET_CORE_MASK_INFO,
0, (i << 8) | level, &resp); 0, (i << 8) | level, &resp);
if (ret) if (ret)
...@@ -451,23 +427,23 @@ int isst_get_pbf_info(int cpu, int level, struct isst_pbf_info *pbf_info) ...@@ -451,23 +427,23 @@ int isst_get_pbf_info(int cpu, int level, struct isst_pbf_info *pbf_info)
debug_printf( debug_printf(
"cpu:%d CONFIG_TDP_PBF_GET_CORE_MASK_INFO resp:%x\n", "cpu:%d CONFIG_TDP_PBF_GET_CORE_MASK_INFO resp:%x\n",
cpu, resp); id->cpu, resp);
mask = (unsigned long long)resp << (32 * i); mask = (unsigned long long)resp << (32 * i);
set_cpu_mask_from_punit_coremask(cpu, mask, set_cpu_mask_from_punit_coremask(id, mask,
pbf_info->core_cpumask_size, pbf_info->core_cpumask_size,
pbf_info->core_cpumask, pbf_info->core_cpumask,
&count); &count);
} }
req = level; req = level;
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_PBF_GET_P1HI_P1LO_INFO, 0, req, CONFIG_TDP_PBF_GET_P1HI_P1LO_INFO, 0, req,
&resp); &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CONFIG_TDP_PBF_GET_P1HI_P1LO_INFO resp:%x\n", cpu, debug_printf("cpu:%d CONFIG_TDP_PBF_GET_P1HI_P1LO_INFO resp:%x\n", id->cpu,
resp); resp);
pbf_info->p1_low = resp & 0xff; pbf_info->p1_low = resp & 0xff;
...@@ -475,21 +451,21 @@ int isst_get_pbf_info(int cpu, int level, struct isst_pbf_info *pbf_info) ...@@ -475,21 +451,21 @@ int isst_get_pbf_info(int cpu, int level, struct isst_pbf_info *pbf_info)
req = level; req = level;
ret = isst_send_mbox_command( ret = isst_send_mbox_command(
cpu, CONFIG_TDP, CONFIG_TDP_PBF_GET_TDP_INFO, 0, req, &resp); id->cpu, CONFIG_TDP, CONFIG_TDP_PBF_GET_TDP_INFO, 0, req, &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CONFIG_TDP_PBF_GET_TDP_INFO resp:%x\n", cpu, resp); debug_printf("cpu:%d CONFIG_TDP_PBF_GET_TDP_INFO resp:%x\n", id->cpu, resp);
pbf_info->tdp = resp & 0xffff; pbf_info->tdp = resp & 0xffff;
req = level; req = level;
ret = isst_send_mbox_command( ret = isst_send_mbox_command(
cpu, CONFIG_TDP, CONFIG_TDP_PBF_GET_TJ_MAX_INFO, 0, req, &resp); id->cpu, CONFIG_TDP, CONFIG_TDP_PBF_GET_TJ_MAX_INFO, 0, req, &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CONFIG_TDP_PBF_GET_TJ_MAX_INFO resp:%x\n", cpu, debug_printf("cpu:%d CONFIG_TDP_PBF_GET_TJ_MAX_INFO resp:%x\n", id->cpu,
resp); resp);
pbf_info->t_control = (resp >> 8) & 0xff; pbf_info->t_control = (resp >> 8) & 0xff;
pbf_info->t_prochot = resp & 0xff; pbf_info->t_prochot = resp & 0xff;
...@@ -502,7 +478,7 @@ void isst_get_pbf_info_complete(struct isst_pbf_info *pbf_info) ...@@ -502,7 +478,7 @@ void isst_get_pbf_info_complete(struct isst_pbf_info *pbf_info)
free_cpu_set(pbf_info->core_cpumask); free_cpu_set(pbf_info->core_cpumask);
} }
int isst_set_pbf_fact_status(int cpu, int pbf, int enable) int isst_set_pbf_fact_status(struct isst_id *id, int pbf, int enable)
{ {
struct isst_pkg_ctdp pkg_dev; struct isst_pkg_ctdp pkg_dev;
struct isst_pkg_ctdp_level_info ctdp_level; struct isst_pkg_ctdp_level_info ctdp_level;
...@@ -510,13 +486,13 @@ int isst_set_pbf_fact_status(int cpu, int pbf, int enable) ...@@ -510,13 +486,13 @@ int isst_set_pbf_fact_status(int cpu, int pbf, int enable)
unsigned int req = 0, resp; unsigned int req = 0, resp;
int ret; int ret;
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (ret) if (ret)
debug_printf("cpu:%d No support for dynamic ISST\n", cpu); debug_printf("cpu:%d No support for dynamic ISST\n", id->cpu);
current_level = pkg_dev.current_level; current_level = pkg_dev.current_level;
ret = isst_get_ctdp_control(cpu, current_level, &ctdp_level); ret = isst_get_ctdp_control(id, current_level, &ctdp_level);
if (ret) if (ret)
return ret; return ret;
...@@ -542,18 +518,18 @@ int isst_set_pbf_fact_status(int cpu, int pbf, int enable) ...@@ -542,18 +518,18 @@ int isst_set_pbf_fact_status(int cpu, int pbf, int enable)
req &= ~BIT(16); req &= ~BIT(16);
} }
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_SET_TDP_CONTROL, 0, req, &resp); CONFIG_TDP_SET_TDP_CONTROL, 0, req, &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CONFIG_TDP_SET_TDP_CONTROL pbf/fact:%d req:%x\n", debug_printf("cpu:%d CONFIG_TDP_SET_TDP_CONTROL pbf/fact:%d req:%x\n",
cpu, pbf, req); id->cpu, pbf, req);
return 0; return 0;
} }
int isst_get_fact_bucket_info(int cpu, int level, int isst_get_fact_bucket_info(struct isst_id *id, int level,
struct isst_fact_bucket_info *bucket_info) struct isst_fact_bucket_info *bucket_info)
{ {
unsigned int resp; unsigned int resp;
...@@ -563,7 +539,7 @@ int isst_get_fact_bucket_info(int cpu, int level, ...@@ -563,7 +539,7 @@ int isst_get_fact_bucket_info(int cpu, int level,
int j; int j;
ret = isst_send_mbox_command( ret = isst_send_mbox_command(
cpu, CONFIG_TDP, id->cpu, CONFIG_TDP,
CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_NUMCORES, 0, CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_NUMCORES, 0,
(i << 8) | level, &resp); (i << 8) | level, &resp);
if (ret) if (ret)
...@@ -571,7 +547,7 @@ int isst_get_fact_bucket_info(int cpu, int level, ...@@ -571,7 +547,7 @@ int isst_get_fact_bucket_info(int cpu, int level,
debug_printf( debug_printf(
"cpu:%d CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_NUMCORES index:%d level:%d resp:%x\n", "cpu:%d CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_NUMCORES index:%d level:%d resp:%x\n",
cpu, i, level, resp); id->cpu, i, level, resp);
for (j = 0; j < 4; ++j) { for (j = 0; j < 4; ++j) {
bucket_info[j + (i * 4)].high_priority_cores_count = bucket_info[j + (i * 4)].high_priority_cores_count =
...@@ -584,7 +560,7 @@ int isst_get_fact_bucket_info(int cpu, int level, ...@@ -584,7 +560,7 @@ int isst_get_fact_bucket_info(int cpu, int level,
int j; int j;
ret = isst_send_mbox_command( ret = isst_send_mbox_command(
cpu, CONFIG_TDP, id->cpu, CONFIG_TDP,
CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_RATIOS, 0, CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_RATIOS, 0,
(k << 16) | (i << 8) | level, &resp); (k << 16) | (i << 8) | level, &resp);
if (ret) if (ret)
...@@ -592,7 +568,7 @@ int isst_get_fact_bucket_info(int cpu, int level, ...@@ -592,7 +568,7 @@ int isst_get_fact_bucket_info(int cpu, int level,
debug_printf( debug_printf(
"cpu:%d CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_RATIOS index:%d level:%d avx:%d resp:%x\n", "cpu:%d CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_RATIOS index:%d level:%d avx:%d resp:%x\n",
cpu, i, level, k, resp); id->cpu, i, level, k, resp);
for (j = 0; j < 4; ++j) { for (j = 0; j < 4; ++j) {
switch (k) { switch (k) {
...@@ -618,14 +594,14 @@ int isst_get_fact_bucket_info(int cpu, int level, ...@@ -618,14 +594,14 @@ int isst_get_fact_bucket_info(int cpu, int level,
return 0; return 0;
} }
int isst_get_fact_info(int cpu, int level, int fact_bucket, struct isst_fact_info *fact_info) int isst_get_fact_info(struct isst_id *id, int level, int fact_bucket, struct isst_fact_info *fact_info)
{ {
struct isst_pkg_ctdp_level_info ctdp_level; struct isst_pkg_ctdp_level_info ctdp_level;
struct isst_pkg_ctdp pkg_dev; struct isst_pkg_ctdp pkg_dev;
unsigned int resp; unsigned int resp;
int j, ret, print; int j, ret, print;
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (ret) { if (ret) {
isst_display_error_info_message(1, "Failed to get number of levels", 0, 0); isst_display_error_info_message(1, "Failed to get number of levels", 0, 0);
return ret; return ret;
...@@ -636,7 +612,7 @@ int isst_get_fact_info(int cpu, int level, int fact_bucket, struct isst_fact_inf ...@@ -636,7 +612,7 @@ int isst_get_fact_info(int cpu, int level, int fact_bucket, struct isst_fact_inf
return -1; return -1;
} }
ret = isst_get_ctdp_control(cpu, level, &ctdp_level); ret = isst_get_ctdp_control(id, level, &ctdp_level);
if (ret) if (ret)
return ret; return ret;
...@@ -645,20 +621,20 @@ int isst_get_fact_info(int cpu, int level, int fact_bucket, struct isst_fact_inf ...@@ -645,20 +621,20 @@ int isst_get_fact_info(int cpu, int level, int fact_bucket, struct isst_fact_inf
return -1; return -1;
} }
ret = isst_send_mbox_command(cpu, CONFIG_TDP, ret = isst_send_mbox_command(id->cpu, CONFIG_TDP,
CONFIG_TDP_GET_FACT_LP_CLIPPING_RATIO, 0, CONFIG_TDP_GET_FACT_LP_CLIPPING_RATIO, 0,
level, &resp); level, &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CONFIG_TDP_GET_FACT_LP_CLIPPING_RATIO resp:%x\n", debug_printf("cpu:%d CONFIG_TDP_GET_FACT_LP_CLIPPING_RATIO resp:%x\n",
cpu, resp); id->cpu, resp);
fact_info->lp_clipping_ratio_license_sse = resp & 0xff; fact_info->lp_clipping_ratio_license_sse = resp & 0xff;
fact_info->lp_clipping_ratio_license_avx2 = (resp >> 8) & 0xff; fact_info->lp_clipping_ratio_license_avx2 = (resp >> 8) & 0xff;
fact_info->lp_clipping_ratio_license_avx512 = (resp >> 16) & 0xff; fact_info->lp_clipping_ratio_license_avx512 = (resp >> 16) & 0xff;
ret = isst_get_fact_bucket_info(cpu, level, fact_info->bucket_info); ret = isst_get_fact_bucket_info(id, level, fact_info->bucket_info);
if (ret) if (ret)
return ret; return ret;
...@@ -680,32 +656,32 @@ int isst_get_fact_info(int cpu, int level, int fact_bucket, struct isst_fact_inf ...@@ -680,32 +656,32 @@ int isst_get_fact_info(int cpu, int level, int fact_bucket, struct isst_fact_inf
return 0; return 0;
} }
int isst_get_trl(int cpu, unsigned long long *trl) int isst_get_trl(struct isst_id *id, unsigned long long *trl)
{ {
int ret; int ret;
ret = isst_send_msr_command(cpu, 0x1AD, 0, trl); ret = isst_send_msr_command(id->cpu, 0x1AD, 0, trl);
if (ret) if (ret)
return ret; return ret;
return 0; return 0;
} }
int isst_set_trl(int cpu, unsigned long long trl) int isst_set_trl(struct isst_id *id, unsigned long long trl)
{ {
int ret; int ret;
if (!trl) if (!trl)
trl = 0xFFFFFFFFFFFFFFFFULL; trl = 0xFFFFFFFFFFFFFFFFULL;
ret = isst_send_msr_command(cpu, 0x1AD, 1, &trl); ret = isst_send_msr_command(id->cpu, 0x1AD, 1, &trl);
if (ret) if (ret)
return ret; return ret;
return 0; return 0;
} }
int isst_set_trl_from_current_tdp(int cpu, unsigned long long trl) int isst_set_trl_from_current_tdp(struct isst_id *id, unsigned long long trl)
{ {
unsigned long long msr_trl; unsigned long long msr_trl;
int ret; int ret;
...@@ -717,11 +693,11 @@ int isst_set_trl_from_current_tdp(int cpu, unsigned long long trl) ...@@ -717,11 +693,11 @@ int isst_set_trl_from_current_tdp(int cpu, unsigned long long trl)
int trl[8]; int trl[8];
int i; int i;
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (ret) if (ret)
return ret; return ret;
ret = isst_get_get_trl(cpu, pkg_dev.current_level, 0, trl); ret = isst_get_get_trl(id, pkg_dev.current_level, 0, trl);
if (ret) if (ret)
return ret; return ret;
...@@ -732,7 +708,7 @@ int isst_set_trl_from_current_tdp(int cpu, unsigned long long trl) ...@@ -732,7 +708,7 @@ int isst_set_trl_from_current_tdp(int cpu, unsigned long long trl)
msr_trl |= (_trl << (i * 8)); msr_trl |= (_trl << (i * 8));
} }
} }
ret = isst_send_msr_command(cpu, 0x1AD, 1, &msr_trl); ret = isst_send_msr_command(id->cpu, 0x1AD, 1, &msr_trl);
if (ret) if (ret)
return ret; return ret;
...@@ -740,12 +716,12 @@ int isst_set_trl_from_current_tdp(int cpu, unsigned long long trl) ...@@ -740,12 +716,12 @@ int isst_set_trl_from_current_tdp(int cpu, unsigned long long trl)
} }
/* Return 1 if locked */ /* Return 1 if locked */
int isst_get_config_tdp_lock_status(int cpu) int isst_get_config_tdp_lock_status(struct isst_id *id)
{ {
unsigned long long tdp_control = 0; unsigned long long tdp_control = 0;
int ret; int ret;
ret = isst_send_msr_command(cpu, 0x64b, 0, &tdp_control); ret = isst_send_msr_command(id->cpu, 0x64b, 0, &tdp_control);
if (ret) if (ret)
return ret; return ret;
...@@ -754,7 +730,7 @@ int isst_get_config_tdp_lock_status(int cpu) ...@@ -754,7 +730,7 @@ int isst_get_config_tdp_lock_status(int cpu)
return ret; return ret;
} }
void isst_get_process_ctdp_complete(int cpu, struct isst_pkg_ctdp *pkg_dev) void isst_get_process_ctdp_complete(struct isst_id *id, struct isst_pkg_ctdp *pkg_dev)
{ {
int i; int i;
...@@ -771,19 +747,19 @@ void isst_get_process_ctdp_complete(int cpu, struct isst_pkg_ctdp *pkg_dev) ...@@ -771,19 +747,19 @@ void isst_get_process_ctdp_complete(int cpu, struct isst_pkg_ctdp *pkg_dev)
} }
} }
int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev) int isst_get_process_ctdp(struct isst_id *id, int tdp_level, struct isst_pkg_ctdp *pkg_dev)
{ {
int i, ret, valid = 0; int i, ret, valid = 0;
if (pkg_dev->processed) if (pkg_dev->processed)
return 0; return 0;
ret = isst_get_ctdp_levels(cpu, pkg_dev); ret = isst_get_ctdp_levels(id, pkg_dev);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu: %d ctdp enable:%d current level: %d levels:%d\n", debug_printf("cpu: %d ctdp enable:%d current level: %d levels:%d\n",
cpu, pkg_dev->enabled, pkg_dev->current_level, id->cpu, pkg_dev->enabled, pkg_dev->current_level,
pkg_dev->levels); pkg_dev->levels);
if (tdp_level != 0xff && tdp_level > pkg_dev->levels) { if (tdp_level != 0xff && tdp_level > pkg_dev->levels) {
...@@ -800,16 +776,16 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev) ...@@ -800,16 +776,16 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev)
if (tdp_level != 0xff && i != tdp_level) if (tdp_level != 0xff && i != tdp_level)
continue; continue;
debug_printf("cpu:%d Get Information for TDP level:%d\n", cpu, debug_printf("cpu:%d Get Information for TDP level:%d\n", id->cpu,
i); i);
ctdp_level = &pkg_dev->ctdp_level[i]; ctdp_level = &pkg_dev->ctdp_level[i];
ctdp_level->level = i; ctdp_level->level = i;
ctdp_level->control_cpu = cpu; ctdp_level->control_cpu = id->cpu;
ctdp_level->pkg_id = get_physical_package_id(cpu); ctdp_level->pkg_id = id->pkg;
ctdp_level->die_id = get_physical_die_id(cpu); ctdp_level->die_id = id->die;
ret = isst_get_ctdp_control(cpu, i, ctdp_level); ret = isst_get_ctdp_control(id, i, ctdp_level);
if (ret) if (ret)
continue; continue;
...@@ -818,13 +794,13 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev) ...@@ -818,13 +794,13 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev)
ctdp_level->processed = 1; ctdp_level->processed = 1;
if (ctdp_level->pbf_support) { if (ctdp_level->pbf_support) {
ret = isst_get_pbf_info(cpu, i, &ctdp_level->pbf_info); ret = isst_get_pbf_info(id, i, &ctdp_level->pbf_info);
if (!ret) if (!ret)
ctdp_level->pbf_found = 1; ctdp_level->pbf_found = 1;
} }
if (ctdp_level->fact_support) { if (ctdp_level->fact_support) {
ret = isst_get_fact_info(cpu, i, 0xff, ret = isst_get_fact_info(id, i, 0xff,
&ctdp_level->fact_info); &ctdp_level->fact_info);
if (ret) if (ret)
return ret; return ret;
...@@ -833,76 +809,76 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev) ...@@ -833,76 +809,76 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev)
if (!pkg_dev->enabled && is_skx_based_platform()) { if (!pkg_dev->enabled && is_skx_based_platform()) {
int freq; int freq;
freq = get_cpufreq_base_freq(cpu); freq = get_cpufreq_base_freq(id->cpu);
if (freq > 0) { if (freq > 0) {
ctdp_level->sse_p1 = freq / 100000; ctdp_level->sse_p1 = freq / 100000;
ctdp_level->tdp_ratio = ctdp_level->sse_p1; ctdp_level->tdp_ratio = ctdp_level->sse_p1;
} }
isst_get_get_trl_from_msr(cpu, ctdp_level->trl_sse_active_cores); isst_get_get_trl_from_msr(id, ctdp_level->trl_sse_active_cores);
isst_get_trl_bucket_info(cpu, &ctdp_level->buckets_info); isst_get_trl_bucket_info(id, &ctdp_level->buckets_info);
continue; continue;
} }
ret = isst_get_tdp_info(cpu, i, ctdp_level); ret = isst_get_tdp_info(id, i, ctdp_level);
if (ret) if (ret)
return ret; return ret;
ret = isst_get_pwr_info(cpu, i, ctdp_level); ret = isst_get_pwr_info(id, i, ctdp_level);
if (ret) if (ret)
return ret; return ret;
ret = isst_get_tjmax_info(cpu, i, ctdp_level); ret = isst_get_tjmax_info(id, i, ctdp_level);
if (ret) if (ret)
return ret; return ret;
ctdp_level->core_cpumask_size = ctdp_level->core_cpumask_size =
alloc_cpu_set(&ctdp_level->core_cpumask); alloc_cpu_set(&ctdp_level->core_cpumask);
ret = isst_get_coremask_info(cpu, i, ctdp_level); ret = isst_get_coremask_info(id, i, ctdp_level);
if (ret) if (ret)
return ret; return ret;
ret = isst_get_trl_bucket_info(cpu, &ctdp_level->buckets_info); ret = isst_get_trl_bucket_info(id, &ctdp_level->buckets_info);
if (ret) if (ret)
return ret; return ret;
ret = isst_get_get_trl(cpu, i, 0, ret = isst_get_get_trl(id, i, 0,
ctdp_level->trl_sse_active_cores); ctdp_level->trl_sse_active_cores);
if (ret) if (ret)
return ret; return ret;
ret = isst_get_get_trl(cpu, i, 1, ret = isst_get_get_trl(id, i, 1,
ctdp_level->trl_avx_active_cores); ctdp_level->trl_avx_active_cores);
if (ret) if (ret)
return ret; return ret;
ret = isst_get_get_trl(cpu, i, 2, ret = isst_get_get_trl(id, i, 2,
ctdp_level->trl_avx_512_active_cores); ctdp_level->trl_avx_512_active_cores);
if (ret) if (ret)
return ret; return ret;
isst_get_uncore_p0_p1_info(cpu, i, ctdp_level); isst_get_uncore_p0_p1_info(id, i, ctdp_level);
isst_get_p1_info(cpu, i, ctdp_level); isst_get_p1_info(id, i, ctdp_level);
isst_get_uncore_mem_freq(cpu, i, ctdp_level); isst_get_uncore_mem_freq(id, i, ctdp_level);
} }
if (!valid) if (!valid)
isst_display_error_info_message(0, "Invalid level, Can't get TDP control information at specified levels on cpu", 1, cpu); isst_display_error_info_message(0, "Invalid level, Can't get TDP control information at specified levels on cpu", 1, id->cpu);
return 0; return 0;
} }
int isst_clos_get_clos_information(int cpu, int *enable, int *type) int isst_clos_get_clos_information(struct isst_id *id, int *enable, int *type)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, 0, 0, ret = isst_send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, 0, 0,
&resp); &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CLOS_PM_QOS_CONFIG resp:%x\n", cpu, resp); debug_printf("cpu:%d CLOS_PM_QOS_CONFIG resp:%x\n", id->cpu, resp);
if (resp & BIT(1)) if (resp & BIT(1))
*enable = 1; *enable = 1;
...@@ -917,7 +893,7 @@ int isst_clos_get_clos_information(int cpu, int *enable, int *type) ...@@ -917,7 +893,7 @@ int isst_clos_get_clos_information(int cpu, int *enable, int *type)
return 0; return 0;
} }
int isst_pm_qos_config(int cpu, int enable_clos, int priority_type) int isst_pm_qos_config(struct isst_id *id, int enable_clos, int priority_type)
{ {
unsigned int req, resp; unsigned int req, resp;
int ret; int ret;
...@@ -926,13 +902,13 @@ int isst_pm_qos_config(int cpu, int enable_clos, int priority_type) ...@@ -926,13 +902,13 @@ int isst_pm_qos_config(int cpu, int enable_clos, int priority_type)
struct isst_pkg_ctdp pkg_dev; struct isst_pkg_ctdp pkg_dev;
struct isst_pkg_ctdp_level_info ctdp_level; struct isst_pkg_ctdp_level_info ctdp_level;
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (ret) { if (ret) {
debug_printf("isst_get_ctdp_levels\n"); debug_printf("isst_get_ctdp_levels\n");
return ret; return ret;
} }
ret = isst_get_ctdp_control(cpu, pkg_dev.current_level, ret = isst_get_ctdp_control(id, pkg_dev.current_level,
&ctdp_level); &ctdp_level);
if (ret) if (ret)
return ret; return ret;
...@@ -941,23 +917,23 @@ int isst_pm_qos_config(int cpu, int enable_clos, int priority_type) ...@@ -941,23 +917,23 @@ int isst_pm_qos_config(int cpu, int enable_clos, int priority_type)
isst_display_error_info_message(1, "Ignoring request, turbo-freq feature is still enabled", 0, 0); isst_display_error_info_message(1, "Ignoring request, turbo-freq feature is still enabled", 0, 0);
return -EINVAL; return -EINVAL;
} }
ret = isst_write_pm_config(cpu, 0); ret = isst_write_pm_config(id, 0);
if (ret) if (ret)
isst_display_error_info_message(0, "WRITE_PM_CONFIG command failed, ignoring error", 0, 0); isst_display_error_info_message(0, "WRITE_PM_CONFIG command failed, ignoring error", 0, 0);
} else { } else {
ret = isst_write_pm_config(cpu, 1); ret = isst_write_pm_config(id, 1);
if (ret) if (ret)
isst_display_error_info_message(0, "WRITE_PM_CONFIG command failed, ignoring error", 0, 0); isst_display_error_info_message(0, "WRITE_PM_CONFIG command failed, ignoring error", 0, 0);
} }
ret = isst_send_mbox_command(cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, 0, 0, ret = isst_send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, 0, 0,
&resp); &resp);
if (ret) { if (ret) {
isst_display_error_info_message(1, "CLOS_PM_QOS_CONFIG command failed", 0, 0); isst_display_error_info_message(1, "CLOS_PM_QOS_CONFIG command failed", 0, 0);
return ret; return ret;
} }
debug_printf("cpu:%d CLOS_PM_QOS_CONFIG resp:%x\n", cpu, resp); debug_printf("cpu:%d CLOS_PM_QOS_CONFIG resp:%x\n", id->cpu, resp);
req = resp; req = resp;
...@@ -974,30 +950,27 @@ int isst_pm_qos_config(int cpu, int enable_clos, int priority_type) ...@@ -974,30 +950,27 @@ int isst_pm_qos_config(int cpu, int enable_clos, int priority_type)
else else
req = req & ~BIT(2); req = req & ~BIT(2);
ret = isst_send_mbox_command(cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, ret = isst_send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG,
BIT(MBOX_CMD_WRITE_BIT), req, &resp); BIT(MBOX_CMD_WRITE_BIT), req, &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CLOS_PM_QOS_CONFIG priority type:%d req:%x\n", cpu, debug_printf("cpu:%d CLOS_PM_QOS_CONFIG priority type:%d req:%x\n", id->cpu,
priority_type, req); priority_type, req);
return 0; return 0;
} }
int isst_pm_get_clos(int cpu, int clos, struct isst_clos_config *clos_config) int isst_pm_get_clos(struct isst_id *id, int clos, struct isst_clos_config *clos_config)
{ {
unsigned int resp; unsigned int resp;
int ret; int ret;
ret = isst_send_mbox_command(cpu, CONFIG_CLOS, CLOS_PM_CLOS, clos, 0, ret = isst_send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_CLOS, clos, 0,
&resp); &resp);
if (ret) if (ret)
return ret; return ret;
clos_config->pkg_id = get_physical_package_id(cpu);
clos_config->die_id = get_physical_die_id(cpu);
clos_config->epp = resp & 0x0f; clos_config->epp = resp & 0x0f;
clos_config->clos_prop_prio = (resp >> 4) & 0x0f; clos_config->clos_prop_prio = (resp >> 4) & 0x0f;
clos_config->clos_min = (resp >> 8) & 0xff; clos_config->clos_min = (resp >> 8) & 0xff;
...@@ -1007,7 +980,7 @@ int isst_pm_get_clos(int cpu, int clos, struct isst_clos_config *clos_config) ...@@ -1007,7 +980,7 @@ int isst_pm_get_clos(int cpu, int clos, struct isst_clos_config *clos_config)
return 0; return 0;
} }
int isst_set_clos(int cpu, int clos, struct isst_clos_config *clos_config) int isst_set_clos(struct isst_id *id, int clos, struct isst_clos_config *clos_config)
{ {
unsigned int req, resp; unsigned int req, resp;
unsigned int param; unsigned int param;
...@@ -1021,53 +994,53 @@ int isst_set_clos(int cpu, int clos, struct isst_clos_config *clos_config) ...@@ -1021,53 +994,53 @@ int isst_set_clos(int cpu, int clos, struct isst_clos_config *clos_config)
param = BIT(MBOX_CMD_WRITE_BIT) | clos; param = BIT(MBOX_CMD_WRITE_BIT) | clos;
ret = isst_send_mbox_command(cpu, CONFIG_CLOS, CLOS_PM_CLOS, param, req, ret = isst_send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_CLOS, param, req,
&resp); &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CLOS_PM_CLOS param:%x req:%x\n", cpu, param, req); debug_printf("cpu:%d CLOS_PM_CLOS param:%x req:%x\n", id->cpu, param, req);
return 0; return 0;
} }
int isst_clos_get_assoc_status(int cpu, int *clos_id) int isst_clos_get_assoc_status(struct isst_id *id, int *clos_id)
{ {
unsigned int resp; unsigned int resp;
unsigned int param; unsigned int param;
int core_id, ret; int core_id, ret;
core_id = find_phy_core_num(cpu); core_id = find_phy_core_num(id->cpu);
param = core_id; param = core_id;
ret = isst_send_mbox_command(cpu, CONFIG_CLOS, CLOS_PQR_ASSOC, param, 0, ret = isst_send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PQR_ASSOC, param, 0,
&resp); &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CLOS_PQR_ASSOC param:%x resp:%x\n", cpu, param, debug_printf("cpu:%d CLOS_PQR_ASSOC param:%x resp:%x\n", id->cpu, param,
resp); resp);
*clos_id = (resp >> 16) & 0x03; *clos_id = (resp >> 16) & 0x03;
return 0; return 0;
} }
int isst_clos_associate(int cpu, int clos_id) int isst_clos_associate(struct isst_id *id, int clos_id)
{ {
unsigned int req, resp; unsigned int req, resp;
unsigned int param; unsigned int param;
int core_id, ret; int core_id, ret;
req = (clos_id & 0x03) << 16; req = (clos_id & 0x03) << 16;
core_id = find_phy_core_num(cpu); core_id = find_phy_core_num(id->cpu);
param = BIT(MBOX_CMD_WRITE_BIT) | core_id; param = BIT(MBOX_CMD_WRITE_BIT) | core_id;
ret = isst_send_mbox_command(cpu, CONFIG_CLOS, CLOS_PQR_ASSOC, param, ret = isst_send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PQR_ASSOC, param,
req, &resp); req, &resp);
if (ret) if (ret)
return ret; return ret;
debug_printf("cpu:%d CLOS_PQR_ASSOC param:%x req:%x\n", cpu, param, debug_printf("cpu:%d CLOS_PQR_ASSOC param:%x req:%x\n", id->cpu, param,
req); req);
return 0; return 0;
......
...@@ -32,62 +32,60 @@ static void init_levels(void) ...@@ -32,62 +32,60 @@ static void init_levels(void)
per_package_levels_info[i][j] = -1; per_package_levels_info[i][j] = -1;
} }
void process_level_change(int cpu) void process_level_change(struct isst_id *id)
{ {
struct isst_pkg_ctdp_level_info ctdp_level; struct isst_pkg_ctdp_level_info ctdp_level;
int pkg_id = get_physical_package_id(cpu);
int die_id = get_physical_die_id(cpu);
struct isst_pkg_ctdp pkg_dev; struct isst_pkg_ctdp pkg_dev;
time_t tm; time_t tm;
int ret; int ret;
if (pkg_id >= MAX_PACKAGE_COUNT || die_id >= MAX_DIE_PER_PACKAGE) { if (id->pkg < 0 || id->die < 0) {
debug_printf("Invalid package/die info for cpu:%d\n", cpu); debug_printf("Invalid package/die info for cpu:%d\n", id->cpu);
return; return;
} }
tm = time(NULL); tm = time(NULL);
if (tm - per_package_levels_tm[pkg_id][die_id] < 2 ) if (tm - per_package_levels_tm[id->pkg][id->die] < 2)
return; return;
per_package_levels_tm[pkg_id][die_id] = tm; per_package_levels_tm[id->pkg][id->die] = tm;
ret = isst_get_ctdp_levels(cpu, &pkg_dev); ret = isst_get_ctdp_levels(id, &pkg_dev);
if (ret) { if (ret) {
debug_printf("Can't get tdp levels for cpu:%d\n", cpu); debug_printf("Can't get tdp levels for cpu:%d\n", id->cpu);
return; return;
} }
debug_printf("Get Config level %d pkg:%d die:%d current_level:%d \n", cpu, debug_printf("Get Config level %d pkg:%d die:%d current_level:%d\n", id->cpu,
pkg_id, die_id, pkg_dev.current_level); id->pkg, id->die, pkg_dev.current_level);
if (pkg_dev.locked) { if (pkg_dev.locked) {
debug_printf("config TDP s locked \n"); debug_printf("config TDP s locked \n");
return; return;
} }
if (per_package_levels_info[pkg_id][die_id] == pkg_dev.current_level) if (per_package_levels_info[id->pkg][id->die] == pkg_dev.current_level)
return; return;
debug_printf("**Config level change for cpu:%d pkg:%d die:%d from %d to %d\n", debug_printf("**Config level change for cpu:%d pkg:%d die:%d from %d to %d\n",
cpu, pkg_id, die_id, per_package_levels_info[pkg_id][die_id], id->cpu, id->pkg, id->die, per_package_levels_info[id->pkg][id->die],
pkg_dev.current_level); pkg_dev.current_level);
per_package_levels_info[pkg_id][die_id] = pkg_dev.current_level; per_package_levels_info[id->pkg][id->die] = pkg_dev.current_level;
ctdp_level.core_cpumask_size = ctdp_level.core_cpumask_size =
alloc_cpu_set(&ctdp_level.core_cpumask); alloc_cpu_set(&ctdp_level.core_cpumask);
ret = isst_get_coremask_info(cpu, pkg_dev.current_level, &ctdp_level); ret = isst_get_coremask_info(id, pkg_dev.current_level, &ctdp_level);
if (ret) { if (ret) {
free_cpu_set(ctdp_level.core_cpumask); free_cpu_set(ctdp_level.core_cpumask);
debug_printf("Can't get core_mask:%d\n", cpu); debug_printf("Can't get core_mask:%d\n", id->cpu);
return; return;
} }
if (ctdp_level.cpu_count) { if (ctdp_level.cpu_count) {
int i, max_cpus = get_topo_max_cpus(); int i, max_cpus = get_topo_max_cpus();
for (i = 0; i < max_cpus; ++i) { for (i = 0; i < max_cpus; ++i) {
if (pkg_id != get_physical_package_id(i) || die_id != get_physical_die_id(i)) if (!is_cpu_in_power_domain(i, id))
continue; continue;
if (CPU_ISSET_S(i, ctdp_level.core_cpumask_size, ctdp_level.core_cpumask)) { if (CPU_ISSET_S(i, ctdp_level.core_cpumask_size, ctdp_level.core_cpumask)) {
fprintf(stderr, "online cpu %d\n", i); fprintf(stderr, "online cpu %d\n", i);
...@@ -102,10 +100,10 @@ void process_level_change(int cpu) ...@@ -102,10 +100,10 @@ void process_level_change(int cpu)
free_cpu_set(ctdp_level.core_cpumask); free_cpu_set(ctdp_level.core_cpumask);
} }
static void _poll_for_config_change(int cpu, void *arg1, void *arg2, static void _poll_for_config_change(struct isst_id *id, void *arg1, void *arg2,
void *arg3, void *arg4) void *arg3, void *arg4)
{ {
process_level_change(cpu); process_level_change(id);
} }
static void poll_for_config_change(void) static void poll_for_config_change(void)
......
...@@ -166,29 +166,27 @@ static void format_and_print(FILE *outf, int level, char *header, char *value) ...@@ -166,29 +166,27 @@ static void format_and_print(FILE *outf, int level, char *header, char *value)
last_level = level; last_level = level;
} }
static int print_package_info(int cpu, FILE *outf) static int print_package_info(struct isst_id *id, FILE *outf)
{ {
char header[256]; char header[256];
if (out_format_is_json()) { if (out_format_is_json()) {
snprintf(header, sizeof(header), "package-%d:die-%d:cpu-%d", snprintf(header, sizeof(header), "package-%d:die-%d:cpu-%d",
get_physical_package_id(cpu), get_physical_die_id(cpu), id->pkg, id->die, id->cpu);
cpu);
format_and_print(outf, 1, header, NULL); format_and_print(outf, 1, header, NULL);
return 1; return 1;
} }
snprintf(header, sizeof(header), "package-%d", snprintf(header, sizeof(header), "package-%d", id->pkg);
get_physical_package_id(cpu));
format_and_print(outf, 1, header, NULL); format_and_print(outf, 1, header, NULL);
snprintf(header, sizeof(header), "die-%d", get_physical_die_id(cpu)); snprintf(header, sizeof(header), "die-%d", id->die);
format_and_print(outf, 2, header, NULL); format_and_print(outf, 2, header, NULL);
snprintf(header, sizeof(header), "cpu-%d", cpu); snprintf(header, sizeof(header), "cpu-%d", id->cpu);
format_and_print(outf, 3, header, NULL); format_and_print(outf, 3, header, NULL);
return 3; return 3;
} }
static void _isst_pbf_display_information(int cpu, FILE *outf, int level, static void _isst_pbf_display_information(struct isst_id *id, FILE *outf, int level,
struct isst_pbf_info *pbf_info, struct isst_pbf_info *pbf_info,
int disp_level) int disp_level)
{ {
...@@ -231,7 +229,7 @@ static void _isst_pbf_display_information(int cpu, FILE *outf, int level, ...@@ -231,7 +229,7 @@ static void _isst_pbf_display_information(int cpu, FILE *outf, int level,
format_and_print(outf, disp_level + 1, header, value); format_and_print(outf, disp_level + 1, header, value);
} }
static void _isst_fact_display_information(int cpu, FILE *outf, int level, static void _isst_fact_display_information(struct isst_id *id, FILE *outf, int level,
int fact_bucket, int fact_avx, int fact_bucket, int fact_avx,
struct isst_fact_info *fact_info, struct isst_fact_info *fact_info,
int base_level) int base_level)
...@@ -319,7 +317,7 @@ static void _isst_fact_display_information(int cpu, FILE *outf, int level, ...@@ -319,7 +317,7 @@ static void _isst_fact_display_information(int cpu, FILE *outf, int level,
format_and_print(outf, base_level + 2, header, value); format_and_print(outf, base_level + 2, header, value);
} }
void isst_ctdp_display_core_info(int cpu, FILE *outf, char *prefix, void isst_ctdp_display_core_info(struct isst_id *id, FILE *outf, char *prefix,
unsigned int val, char *str0, char *str1) unsigned int val, char *str0, char *str1)
{ {
char header[256]; char header[256];
...@@ -328,17 +326,14 @@ void isst_ctdp_display_core_info(int cpu, FILE *outf, char *prefix, ...@@ -328,17 +326,14 @@ void isst_ctdp_display_core_info(int cpu, FILE *outf, char *prefix,
if (out_format_is_json()) { if (out_format_is_json()) {
snprintf(header, sizeof(header), "package-%d:die-%d:cpu-%d", snprintf(header, sizeof(header), "package-%d:die-%d:cpu-%d",
get_physical_package_id(cpu), get_physical_die_id(cpu), id->pkg, id->die, id->cpu);
cpu);
format_and_print(outf, level++, header, NULL); format_and_print(outf, level++, header, NULL);
} else { } else {
snprintf(header, sizeof(header), "package-%d", snprintf(header, sizeof(header), "package-%d", id->pkg);
get_physical_package_id(cpu));
format_and_print(outf, level++, header, NULL); format_and_print(outf, level++, header, NULL);
snprintf(header, sizeof(header), "die-%d", snprintf(header, sizeof(header), "die-%d", id->die);
get_physical_die_id(cpu));
format_and_print(outf, level++, header, NULL); format_and_print(outf, level++, header, NULL);
snprintf(header, sizeof(header), "cpu-%d", cpu); snprintf(header, sizeof(header), "cpu-%d", id->cpu);
format_and_print(outf, level++, header, NULL); format_and_print(outf, level++, header, NULL);
} }
...@@ -353,7 +348,7 @@ void isst_ctdp_display_core_info(int cpu, FILE *outf, char *prefix, ...@@ -353,7 +348,7 @@ void isst_ctdp_display_core_info(int cpu, FILE *outf, char *prefix,
format_and_print(outf, 1, NULL, NULL); format_and_print(outf, 1, NULL, NULL);
} }
void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level, void isst_ctdp_display_information(struct isst_id *id, FILE *outf, int tdp_level,
struct isst_pkg_ctdp *pkg_dev) struct isst_pkg_ctdp *pkg_dev)
{ {
char header[256]; char header[256];
...@@ -362,7 +357,7 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level, ...@@ -362,7 +357,7 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
int i; int i;
if (pkg_dev->processed) if (pkg_dev->processed)
level = print_package_info(cpu, outf); level = print_package_info(id, outf);
for (i = 0; i <= pkg_dev->levels; ++i) { for (i = 0; i <= pkg_dev->levels; ++i) {
struct isst_pkg_ctdp_level_info *ctdp_level; struct isst_pkg_ctdp_level_info *ctdp_level;
...@@ -377,8 +372,7 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level, ...@@ -377,8 +372,7 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
format_and_print(outf, level + 1, header, NULL); format_and_print(outf, level + 1, header, NULL);
snprintf(header, sizeof(header), "cpu-count"); snprintf(header, sizeof(header), "cpu-count");
j = get_cpu_count(get_physical_die_id(cpu), j = get_cpu_count(id);
get_physical_die_id(cpu));
snprintf(value, sizeof(value), "%d", j); snprintf(value, sizeof(value), "%d", j);
format_and_print(outf, level + 2, header, value); format_and_print(outf, level + 2, header, value);
...@@ -485,7 +479,7 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level, ...@@ -485,7 +479,7 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
if (is_clx_n_platform()) { if (is_clx_n_platform()) {
if (ctdp_level->pbf_support) if (ctdp_level->pbf_support)
_isst_pbf_display_information(cpu, outf, _isst_pbf_display_information(id, outf,
tdp_level, tdp_level,
&ctdp_level->pbf_info, &ctdp_level->pbf_info,
level + 2); level + 2);
...@@ -557,11 +551,11 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level, ...@@ -557,11 +551,11 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
} }
if (ctdp_level->pbf_support) if (ctdp_level->pbf_support)
_isst_pbf_display_information(cpu, outf, i, _isst_pbf_display_information(id, outf, i,
&ctdp_level->pbf_info, &ctdp_level->pbf_info,
level + 2); level + 2);
if (ctdp_level->fact_support) if (ctdp_level->fact_support)
_isst_fact_display_information(cpu, outf, i, 0xff, 0xff, _isst_fact_display_information(id, outf, i, 0xff, 0xff,
&ctdp_level->fact_info, &ctdp_level->fact_info,
level + 2); level + 2);
} }
...@@ -583,36 +577,36 @@ void isst_ctdp_display_information_end(FILE *outf) ...@@ -583,36 +577,36 @@ void isst_ctdp_display_information_end(FILE *outf)
start = 0; start = 0;
} }
void isst_pbf_display_information(int cpu, FILE *outf, int level, void isst_pbf_display_information(struct isst_id *id, FILE *outf, int level,
struct isst_pbf_info *pbf_info) struct isst_pbf_info *pbf_info)
{ {
int _level; int _level;
_level = print_package_info(cpu, outf); _level = print_package_info(id, outf);
_isst_pbf_display_information(cpu, outf, level, pbf_info, _level + 1); _isst_pbf_display_information(id, outf, level, pbf_info, _level + 1);
format_and_print(outf, 1, NULL, NULL); format_and_print(outf, 1, NULL, NULL);
} }
void isst_fact_display_information(int cpu, FILE *outf, int level, void isst_fact_display_information(struct isst_id *id, FILE *outf, int level,
int fact_bucket, int fact_avx, int fact_bucket, int fact_avx,
struct isst_fact_info *fact_info) struct isst_fact_info *fact_info)
{ {
int _level; int _level;
_level = print_package_info(cpu, outf); _level = print_package_info(id, outf);
_isst_fact_display_information(cpu, outf, level, fact_bucket, fact_avx, _isst_fact_display_information(id, outf, level, fact_bucket, fact_avx,
fact_info, _level + 1); fact_info, _level + 1);
format_and_print(outf, 1, NULL, NULL); format_and_print(outf, 1, NULL, NULL);
} }
void isst_clos_display_information(int cpu, FILE *outf, int clos, void isst_clos_display_information(struct isst_id *id, FILE *outf, int clos,
struct isst_clos_config *clos_config) struct isst_clos_config *clos_config)
{ {
char header[256]; char header[256];
char value[256]; char value[256];
int level; int level;
level = print_package_info(cpu, outf); level = print_package_info(id, outf);
snprintf(header, sizeof(header), "core-power"); snprintf(header, sizeof(header), "core-power");
format_and_print(outf, level + 1, header, NULL); format_and_print(outf, level + 1, header, NULL);
...@@ -647,7 +641,7 @@ void isst_clos_display_information(int cpu, FILE *outf, int clos, ...@@ -647,7 +641,7 @@ void isst_clos_display_information(int cpu, FILE *outf, int clos,
format_and_print(outf, level, NULL, NULL); format_and_print(outf, level, NULL, NULL);
} }
void isst_clos_display_clos_information(int cpu, FILE *outf, void isst_clos_display_clos_information(struct isst_id *id, FILE *outf,
int clos_enable, int type, int clos_enable, int type,
int state, int cap) int state, int cap)
{ {
...@@ -655,7 +649,7 @@ void isst_clos_display_clos_information(int cpu, FILE *outf, ...@@ -655,7 +649,7 @@ void isst_clos_display_clos_information(int cpu, FILE *outf,
char value[256]; char value[256];
int level; int level;
level = print_package_info(cpu, outf); level = print_package_info(id, outf);
snprintf(header, sizeof(header), "core-power"); snprintf(header, sizeof(header), "core-power");
format_and_print(outf, level + 1, header, NULL); format_and_print(outf, level + 1, header, NULL);
...@@ -691,13 +685,13 @@ void isst_clos_display_clos_information(int cpu, FILE *outf, ...@@ -691,13 +685,13 @@ void isst_clos_display_clos_information(int cpu, FILE *outf,
format_and_print(outf, level, NULL, NULL); format_and_print(outf, level, NULL, NULL);
} }
void isst_clos_display_assoc_information(int cpu, FILE *outf, int clos) void isst_clos_display_assoc_information(struct isst_id *id, FILE *outf, int clos)
{ {
char header[256]; char header[256];
char value[256]; char value[256];
int level; int level;
level = print_package_info(cpu, outf); level = print_package_info(id, outf);
snprintf(header, sizeof(header), "get-assoc"); snprintf(header, sizeof(header), "get-assoc");
format_and_print(outf, level + 1, header, NULL); format_and_print(outf, level + 1, header, NULL);
...@@ -709,15 +703,15 @@ void isst_clos_display_assoc_information(int cpu, FILE *outf, int clos) ...@@ -709,15 +703,15 @@ void isst_clos_display_assoc_information(int cpu, FILE *outf, int clos)
format_and_print(outf, level, NULL, NULL); format_and_print(outf, level, NULL, NULL);
} }
void isst_display_result(int cpu, FILE *outf, char *feature, char *cmd, void isst_display_result(struct isst_id *id, FILE *outf, char *feature, char *cmd,
int result) int result)
{ {
char header[256]; char header[256];
char value[256]; char value[256];
int level = 3; int level = 3;
if (cpu >= 0) if (id->cpu >= 0)
level = print_package_info(cpu, outf); level = print_package_info(id, outf);
snprintf(header, sizeof(header), "%s", feature); snprintf(header, sizeof(header), "%s", feature);
format_and_print(outf, level + 1, header, NULL); format_and_print(outf, level + 1, header, NULL);
...@@ -772,13 +766,13 @@ void isst_display_error_info_message(int error, char *msg, int arg_valid, int ar ...@@ -772,13 +766,13 @@ void isst_display_error_info_message(int error, char *msg, int arg_valid, int ar
format_and_print(outf, 0, NULL, NULL); format_and_print(outf, 0, NULL, NULL);
} }
void isst_trl_display_information(int cpu, FILE *outf, unsigned long long trl) void isst_trl_display_information(struct isst_id *id, FILE *outf, unsigned long long trl)
{ {
char header[256]; char header[256];
char value[256]; char value[256];
int level; int level;
level = print_package_info(cpu, outf); level = print_package_info(id, outf);
snprintf(header, sizeof(header), "get-trl"); snprintf(header, sizeof(header), "get-trl");
format_and_print(outf, level + 1, header, NULL); format_and_print(outf, level + 1, header, NULL);
......
...@@ -79,9 +79,14 @@ ...@@ -79,9 +79,14 @@
#define MAX_PACKAGE_COUNT 8 #define MAX_PACKAGE_COUNT 8
#define MAX_DIE_PER_PACKAGE 2 #define MAX_DIE_PER_PACKAGE 2
/* Unified structure to specific a CPU or a Power Domain */
struct isst_id {
int cpu;
int pkg;
int die;
};
struct isst_clos_config { struct isst_clos_config {
int pkg_id;
int die_id;
unsigned char epp; unsigned char epp;
unsigned char clos_prop_prio; unsigned char clos_prop_prio;
unsigned char clos_min; unsigned char clos_min;
...@@ -171,22 +176,20 @@ struct isst_pkg_ctdp { ...@@ -171,22 +176,20 @@ struct isst_pkg_ctdp {
struct isst_pkg_ctdp_level_info ctdp_level[ISST_MAX_TDP_LEVELS]; struct isst_pkg_ctdp_level_info ctdp_level[ISST_MAX_TDP_LEVELS];
}; };
extern int is_cpu_in_power_domain(int cpu, struct isst_id *id);
extern int get_topo_max_cpus(void); extern int get_topo_max_cpus(void);
extern int get_cpu_count(int pkg_id, int die_id); extern int get_cpu_count(struct isst_id *id);
extern int get_max_punit_core_id(int pkg_id, int die_id); extern int get_max_punit_core_id(struct isst_id *id);
/* Common interfaces */ /* Common interfaces */
FILE *get_output_file(void); FILE *get_output_file(void);
extern void debug_printf(const char *format, ...); extern void debug_printf(const char *format, ...);
extern int out_format_is_json(void); extern int out_format_is_json(void);
extern int get_physical_package_id(int cpu); extern void set_isst_id(struct isst_id *id, int cpu);
extern int get_physical_die_id(int cpu);
extern size_t alloc_cpu_set(cpu_set_t **cpu_set); extern size_t alloc_cpu_set(cpu_set_t **cpu_set);
extern void free_cpu_set(cpu_set_t *cpu_set); extern void free_cpu_set(cpu_set_t *cpu_set);
extern int find_logical_cpu(int pkg_id, int die_id, int phy_cpu);
extern int find_phy_cpu_num(int logical_cpu);
extern int find_phy_core_num(int logical_cpu); extern int find_phy_core_num(int logical_cpu);
extern void set_cpu_mask_from_punit_coremask(int cpu, extern void set_cpu_mask_from_punit_coremask(struct isst_id *id,
unsigned long long core_mask, unsigned long long core_mask,
size_t core_cpumask_size, size_t core_cpumask_size,
cpu_set_t *core_cpumask, cpu_set_t *core_cpumask,
...@@ -200,77 +203,74 @@ extern int isst_send_mbox_command(unsigned int cpu, unsigned char command, ...@@ -200,77 +203,74 @@ extern int isst_send_mbox_command(unsigned int cpu, unsigned char command,
extern int isst_send_msr_command(unsigned int cpu, unsigned int command, extern int isst_send_msr_command(unsigned int cpu, unsigned int command,
int write, unsigned long long *req_resp); int write, unsigned long long *req_resp);
extern int isst_get_ctdp_levels(int cpu, struct isst_pkg_ctdp *pkg_dev); extern int isst_get_ctdp_levels(struct isst_id *id, struct isst_pkg_ctdp *pkg_dev);
extern int isst_get_ctdp_control(int cpu, int config_index, extern int isst_get_ctdp_control(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level); struct isst_pkg_ctdp_level_info *ctdp_level);
extern int isst_get_coremask_info(int cpu, int config_index, extern int isst_get_coremask_info(struct isst_id *id, int config_index,
struct isst_pkg_ctdp_level_info *ctdp_level); struct isst_pkg_ctdp_level_info *ctdp_level);
extern int isst_get_process_ctdp(int cpu, int tdp_level, extern int isst_get_process_ctdp(struct isst_id *id, int tdp_level,
struct isst_pkg_ctdp *pkg_dev); struct isst_pkg_ctdp *pkg_dev);
extern void isst_get_process_ctdp_complete(int cpu, extern void isst_get_process_ctdp_complete(struct isst_id *id,
struct isst_pkg_ctdp *pkg_dev); struct isst_pkg_ctdp *pkg_dev);
extern void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level, extern void isst_ctdp_display_information(struct isst_id *id, FILE *outf, int tdp_level,
struct isst_pkg_ctdp *pkg_dev); struct isst_pkg_ctdp *pkg_dev);
extern void isst_ctdp_display_core_info(int cpu, FILE *outf, char *prefix, extern void isst_ctdp_display_core_info(struct isst_id *id, FILE *outf, char *prefix,
unsigned int val, char *str0, char *str1); unsigned int val, char *str0, char *str1);
extern void isst_ctdp_display_information_start(FILE *outf); extern void isst_ctdp_display_information_start(FILE *outf);
extern void isst_ctdp_display_information_end(FILE *outf); extern void isst_ctdp_display_information_end(FILE *outf);
extern void isst_pbf_display_information(int cpu, FILE *outf, int level, extern void isst_pbf_display_information(struct isst_id *id, FILE *outf, int level,
struct isst_pbf_info *info); struct isst_pbf_info *info);
extern int isst_set_tdp_level(int cpu, int tdp_level); extern int isst_set_tdp_level(struct isst_id *id, int tdp_level);
extern int isst_set_tdp_level_msr(int cpu, int tdp_level); extern int isst_set_pbf_fact_status(struct isst_id *id, int pbf, int enable);
extern int isst_set_pbf_fact_status(int cpu, int pbf, int enable); extern int isst_get_pbf_info(struct isst_id *id, int level,
extern int isst_get_pbf_info(int cpu, int level,
struct isst_pbf_info *pbf_info); struct isst_pbf_info *pbf_info);
extern void isst_get_pbf_info_complete(struct isst_pbf_info *pbf_info); extern void isst_get_pbf_info_complete(struct isst_pbf_info *pbf_info);
extern int isst_get_fact_info(int cpu, int level, int fact_bucket, extern int isst_get_fact_info(struct isst_id *id, int level, int fact_bucket,
struct isst_fact_info *fact_info); struct isst_fact_info *fact_info);
extern int isst_get_fact_bucket_info(int cpu, int level, extern int isst_get_fact_bucket_info(struct isst_id *id, int level,
struct isst_fact_bucket_info *bucket_info); struct isst_fact_bucket_info *bucket_info);
extern void isst_fact_display_information(int cpu, FILE *outf, int level, extern void isst_fact_display_information(struct isst_id *id, FILE *outf, int level,
int fact_bucket, int fact_avx, int fact_bucket, int fact_avx,
struct isst_fact_info *fact_info); struct isst_fact_info *fact_info);
extern int isst_set_trl(int cpu, unsigned long long trl); extern int isst_set_trl(struct isst_id *id, unsigned long long trl);
extern int isst_get_trl(int cpu, unsigned long long *trl); extern int isst_get_trl(struct isst_id *id, unsigned long long *trl);
extern int isst_set_trl_from_current_tdp(int cpu, unsigned long long trl); extern int isst_set_trl_from_current_tdp(struct isst_id *id, unsigned long long trl);
extern int isst_get_config_tdp_lock_status(int cpu); extern int isst_get_config_tdp_lock_status(struct isst_id *id);
extern int isst_pm_qos_config(int cpu, int enable_clos, int priority_type); extern int isst_pm_qos_config(struct isst_id *id, int enable_clos, int priority_type);
extern int isst_pm_get_clos(int cpu, int clos, extern int isst_pm_get_clos(struct isst_id *id, int clos,
struct isst_clos_config *clos_config); struct isst_clos_config *clos_config);
extern int isst_set_clos(int cpu, int clos, extern int isst_set_clos(struct isst_id *id, int clos,
struct isst_clos_config *clos_config); struct isst_clos_config *clos_config);
extern int isst_clos_associate(int cpu, int clos); extern int isst_clos_associate(struct isst_id *id, int clos);
extern int isst_clos_get_assoc_status(int cpu, int *clos_id); extern int isst_clos_get_assoc_status(struct isst_id *id, int *clos_id);
extern void isst_clos_display_information(int cpu, FILE *outf, int clos, extern void isst_clos_display_information(struct isst_id *id, FILE *outf, int clos,
struct isst_clos_config *clos_config); struct isst_clos_config *clos_config);
extern void isst_clos_display_assoc_information(int cpu, FILE *outf, int clos); extern void isst_clos_display_assoc_information(struct isst_id *id, FILE *outf, int clos);
extern int isst_read_reg(unsigned short reg, unsigned int *val);
extern int isst_write_reg(int reg, unsigned int val);
extern void isst_display_result(int cpu, FILE *outf, char *feature, char *cmd, extern void isst_display_result(struct isst_id *id, FILE *outf, char *feature, char *cmd,
int result); int result);
extern int isst_clos_get_clos_information(int cpu, int *enable, int *type); extern int isst_clos_get_clos_information(struct isst_id *id, int *enable, int *type);
extern void isst_clos_display_clos_information(int cpu, FILE *outf, extern void isst_clos_display_clos_information(struct isst_id *id, FILE *outf,
int clos_enable, int type, int clos_enable, int type,
int state, int cap); int state, int cap);
extern int is_clx_n_platform(void); extern int is_clx_n_platform(void);
extern int get_cpufreq_base_freq(int cpu); extern int get_cpufreq_base_freq(int cpu);
extern int isst_read_pm_config(int cpu, int *cp_state, int *cp_cap); extern int isst_read_pm_config(struct isst_id *id, int *cp_state, int *cp_cap);
extern void isst_display_error_info_message(int error, char *msg, int arg_valid, int arg); 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_skx_based_platform(void);
extern int is_spr_platform(void); extern int is_spr_platform(void);
extern int is_icx_platform(void); extern int is_icx_platform(void);
extern void isst_trl_display_information(int cpu, FILE *outf, unsigned long long trl); extern void isst_trl_display_information(struct isst_id *id, FILE *outf, unsigned long long trl);
extern void set_cpu_online_offline(int cpu, int state); extern void set_cpu_online_offline(int cpu, int state);
extern void for_each_online_package_in_set(void (*callback)(int, void *, void *, extern void for_each_online_package_in_set(void (*callback)(struct isst_id *, void *, void *,
void *, void *), void *, void *),
void *arg1, void *arg2, void *arg3, void *arg1, void *arg2, void *arg3,
void *arg4); void *arg4);
extern int isst_daemon(int debug_mode, int poll_interval, int no_daemon); extern int isst_daemon(int debug_mode, int poll_interval, int no_daemon);
extern void process_level_change(int cpu); extern void process_level_change(struct isst_id *id);
extern int hfi_main(void); extern int hfi_main(void);
extern void hfi_exit(void); extern void hfi_exit(void);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment