^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Intel dynamic_speed_select -- Enumerate and control features
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 2019 Intel Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include "isst.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) static void printcpulist(int str_len, char *str, int mask_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) cpu_set_t *cpu_mask)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) int i, first, curr_index, index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) if (!CPU_COUNT_S(mask_size, cpu_mask)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) snprintf(str, str_len, "none");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) curr_index = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) first = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) for (i = 0; i < get_topo_max_cpus(); ++i) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) if (!CPU_ISSET_S(i, mask_size, cpu_mask))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) if (!first) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) index = snprintf(&str[curr_index],
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) str_len - curr_index, ",");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) curr_index += index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) if (curr_index >= str_len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) index = snprintf(&str[curr_index], str_len - curr_index, "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) curr_index += index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) if (curr_index >= str_len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) first = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) static void printcpumask(int str_len, char *str, int mask_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) cpu_set_t *cpu_mask)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) int i, max_cpus = get_topo_max_cpus();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) unsigned int *mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) int size, index, curr_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) size = max_cpus / (sizeof(unsigned int) * 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) if (max_cpus % (sizeof(unsigned int) * 8))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) size++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) mask = calloc(size, sizeof(unsigned int));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) if (!mask)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) for (i = 0; i < max_cpus; ++i) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) int mask_index, bit_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) if (!CPU_ISSET_S(i, mask_size, cpu_mask))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) mask_index = i / (sizeof(unsigned int) * 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) bit_index = i % (sizeof(unsigned int) * 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) mask[mask_index] |= BIT(bit_index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) curr_index = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) for (i = size - 1; i >= 0; --i) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) index = snprintf(&str[curr_index], str_len - curr_index, "%08x",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) mask[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) curr_index += index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) if (curr_index >= str_len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) if (i) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) strncat(&str[curr_index], ",", str_len - curr_index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) curr_index++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) if (curr_index >= str_len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) free(mask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) static void format_and_print_txt(FILE *outf, int level, char *header,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) char *value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) char *spaces = " ";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) static char delimiters[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) int i, j = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) if (!level)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) if (level == 1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) strcpy(delimiters, " ");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) for (i = 0; i < level - 1; ++i)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) j += snprintf(&delimiters[j], sizeof(delimiters) - j,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) "%s", spaces);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) if (header && value) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) fprintf(outf, "%s", delimiters);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) fprintf(outf, "%s:%s\n", header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) } else if (header) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) fprintf(outf, "%s", delimiters);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) fprintf(outf, "%s\n", header);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) static int last_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) static void format_and_print(FILE *outf, int level, char *header, char *value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) char *spaces = " ";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) static char delimiters[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) if (!out_format_is_json()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) format_and_print_txt(outf, level, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) if (level == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) if (header)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) fprintf(outf, "{");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) fprintf(outf, "\n}\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) int j = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) for (i = 0; i < level; ++i)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) j += snprintf(&delimiters[j], sizeof(delimiters) - j,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) "%s", spaces);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) if (last_level == level)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) fprintf(outf, ",\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) if (value) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) if (last_level != level)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) fprintf(outf, "\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) fprintf(outf, "%s\"%s\": ", delimiters, header);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) fprintf(outf, "\"%s\"", value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) for (i = last_level - 1; i >= level; --i) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) int k = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) for (j = i; j > 0; --j)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) k += snprintf(&delimiters[k],
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) sizeof(delimiters) - k,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) "%s", spaces);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) if (i == level && header)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) fprintf(outf, "\n%s},", delimiters);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) fprintf(outf, "\n%s}", delimiters);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) if (abs(last_level - level) < 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) fprintf(outf, "\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) if (header)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) fprintf(outf, "%s\"%s\": {", delimiters,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) header);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) last_level = level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) static int print_package_info(int cpu, FILE *outf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) if (out_format_is_json()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) snprintf(header, sizeof(header), "package-%d:die-%d:cpu-%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) get_physical_package_id(cpu), get_physical_die_id(cpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) cpu);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) format_and_print(outf, 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) snprintf(header, sizeof(header), "package-%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) get_physical_package_id(cpu));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) format_and_print(outf, 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) snprintf(header, sizeof(header), "die-%d", get_physical_die_id(cpu));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) format_and_print(outf, 2, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) snprintf(header, sizeof(header), "cpu-%d", cpu);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) format_and_print(outf, 3, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) return 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) static void _isst_pbf_display_information(int cpu, FILE *outf, int level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) struct isst_pbf_info *pbf_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) int disp_level)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) char value[512];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) snprintf(header, sizeof(header), "speed-select-base-freq-properties");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) format_and_print(outf, disp_level, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) snprintf(header, sizeof(header), "high-priority-base-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) pbf_info->p1_high * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) format_and_print(outf, disp_level + 1, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) snprintf(header, sizeof(header), "high-priority-cpu-mask");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) printcpumask(sizeof(value), value, pbf_info->core_cpumask_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) pbf_info->core_cpumask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) format_and_print(outf, disp_level + 1, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) snprintf(header, sizeof(header), "high-priority-cpu-list");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) printcpulist(sizeof(value), value,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) pbf_info->core_cpumask_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) pbf_info->core_cpumask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) format_and_print(outf, disp_level + 1, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) snprintf(header, sizeof(header), "low-priority-base-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) pbf_info->p1_low * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) format_and_print(outf, disp_level + 1, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) if (is_clx_n_platform())
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) snprintf(header, sizeof(header), "tjunction-temperature(C)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) snprintf(value, sizeof(value), "%d", pbf_info->t_prochot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) format_and_print(outf, disp_level + 1, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) snprintf(header, sizeof(header), "thermal-design-power(W)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) snprintf(value, sizeof(value), "%d", pbf_info->tdp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) format_and_print(outf, disp_level + 1, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) static void _isst_fact_display_information(int cpu, FILE *outf, int level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) int fact_bucket, int fact_avx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) struct isst_fact_info *fact_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) int base_level)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) struct isst_fact_bucket_info *bucket_info = fact_info->bucket_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) char value[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) int print = 0, j;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) for (j = 0; j < ISST_FACT_MAX_BUCKETS; ++j) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) if (fact_bucket != 0xff && fact_bucket != j)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) if (!bucket_info[j].high_priority_cores_count)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) print = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) if (!print) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) fprintf(stderr, "Invalid bucket\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) snprintf(header, sizeof(header), "speed-select-turbo-freq-properties");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) format_and_print(outf, base_level, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) for (j = 0; j < ISST_FACT_MAX_BUCKETS; ++j) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) if (fact_bucket != 0xff && fact_bucket != j)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) if (!bucket_info[j].high_priority_cores_count)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) snprintf(header, sizeof(header), "bucket-%d", j);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) format_and_print(outf, base_level + 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) snprintf(header, sizeof(header), "high-priority-cores-count");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) bucket_info[j].high_priority_cores_count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) format_and_print(outf, base_level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) if (fact_avx & 0x01) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) "high-priority-max-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) bucket_info[j].sse_trl * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) format_and_print(outf, base_level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) if (fact_avx & 0x02) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) "high-priority-max-avx2-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) bucket_info[j].avx_trl * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) format_and_print(outf, base_level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) if (fact_avx & 0x04) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) "high-priority-max-avx512-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) bucket_info[j].avx512_trl *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) format_and_print(outf, base_level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) "speed-select-turbo-freq-clip-frequencies");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) format_and_print(outf, base_level + 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) snprintf(header, sizeof(header), "low-priority-max-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) fact_info->lp_clipping_ratio_license_sse *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) format_and_print(outf, base_level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) "low-priority-max-avx2-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) fact_info->lp_clipping_ratio_license_avx2 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) format_and_print(outf, base_level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) "low-priority-max-avx512-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) fact_info->lp_clipping_ratio_license_avx512 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) format_and_print(outf, base_level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) void isst_ctdp_display_core_info(int cpu, FILE *outf, char *prefix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) unsigned int val, char *str0, char *str1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) char value[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) int level = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) if (out_format_is_json()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) snprintf(header, sizeof(header), "package-%d:die-%d:cpu-%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) get_physical_package_id(cpu), get_physical_die_id(cpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) cpu);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) format_and_print(outf, level++, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) snprintf(header, sizeof(header), "package-%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) get_physical_package_id(cpu));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) format_and_print(outf, level++, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) snprintf(header, sizeof(header), "die-%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) get_physical_die_id(cpu));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) format_and_print(outf, level++, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) snprintf(header, sizeof(header), "cpu-%d", cpu);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) format_and_print(outf, level++, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) if (str0 && !val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) snprintf(value, sizeof(value), "%s", str0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) else if (str1 && val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) snprintf(value, sizeof(value), "%s", str1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) snprintf(value, sizeof(value), "%u", val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) format_and_print(outf, level, prefix, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) format_and_print(outf, 1, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) struct isst_pkg_ctdp *pkg_dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) char value[512];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) static int level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) if (pkg_dev->processed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) level = print_package_info(cpu, outf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) for (i = 0; i <= pkg_dev->levels; ++i) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) struct isst_pkg_ctdp_level_info *ctdp_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) int j;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) ctdp_level = &pkg_dev->ctdp_level[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) if (!ctdp_level->processed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) snprintf(header, sizeof(header), "perf-profile-level-%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) ctdp_level->level);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) format_and_print(outf, level + 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) snprintf(header, sizeof(header), "cpu-count");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) j = get_cpu_count(get_physical_die_id(cpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) get_physical_die_id(cpu));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) snprintf(value, sizeof(value), "%d", j);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) j = CPU_COUNT_S(ctdp_level->core_cpumask_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) ctdp_level->core_cpumask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) if (j) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) snprintf(header, sizeof(header), "enable-cpu-count");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) snprintf(value, sizeof(value), "%d", j);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) if (ctdp_level->core_cpumask_size) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) snprintf(header, sizeof(header), "enable-cpu-mask");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) printcpumask(sizeof(value), value,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) ctdp_level->core_cpumask_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) ctdp_level->core_cpumask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) snprintf(header, sizeof(header), "enable-cpu-list");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) printcpulist(sizeof(value), value,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) ctdp_level->core_cpumask_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) ctdp_level->core_cpumask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) snprintf(header, sizeof(header), "thermal-design-power-ratio");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) snprintf(value, sizeof(value), "%d", ctdp_level->tdp_ratio);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) snprintf(header, sizeof(header), "base-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) if (!ctdp_level->sse_p1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) ctdp_level->sse_p1 = ctdp_level->tdp_ratio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) ctdp_level->sse_p1 * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) if (ctdp_level->avx2_p1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) snprintf(header, sizeof(header), "base-frequency-avx2(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) ctdp_level->avx2_p1 * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) if (ctdp_level->avx512_p1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) snprintf(header, sizeof(header), "base-frequency-avx512(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) ctdp_level->avx512_p1 * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) if (ctdp_level->uncore_p1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) snprintf(header, sizeof(header), "uncore-frequency-min(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) ctdp_level->uncore_p1 * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) if (ctdp_level->uncore_p0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) snprintf(header, sizeof(header), "uncore-frequency-max(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) ctdp_level->uncore_p0 * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) if (ctdp_level->mem_freq) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) snprintf(header, sizeof(header), "mem-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) ctdp_level->mem_freq * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) "speed-select-turbo-freq");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) if (ctdp_level->fact_support) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) if (ctdp_level->fact_enabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) snprintf(value, sizeof(value), "enabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) snprintf(value, sizeof(value), "disabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) } else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) snprintf(value, sizeof(value), "unsupported");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) "speed-select-base-freq");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) if (ctdp_level->pbf_support) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) if (ctdp_level->pbf_enabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) snprintf(value, sizeof(value), "enabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) snprintf(value, sizeof(value), "disabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) } else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) snprintf(value, sizeof(value), "unsupported");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) "speed-select-core-power");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) if (ctdp_level->sst_cp_support) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) if (ctdp_level->sst_cp_enabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) snprintf(value, sizeof(value), "enabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) snprintf(value, sizeof(value), "disabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) } else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) snprintf(value, sizeof(value), "unsupported");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) if (is_clx_n_platform()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) if (ctdp_level->pbf_support)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) _isst_pbf_display_information(cpu, outf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) tdp_level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) &ctdp_level->pbf_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) level + 2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) if (ctdp_level->pkg_tdp) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) snprintf(header, sizeof(header), "thermal-design-power(W)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) snprintf(value, sizeof(value), "%d", ctdp_level->pkg_tdp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) if (ctdp_level->t_proc_hot) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) snprintf(header, sizeof(header), "tjunction-max(C)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) snprintf(value, sizeof(value), "%d", ctdp_level->t_proc_hot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) snprintf(header, sizeof(header), "turbo-ratio-limits-sse");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) format_and_print(outf, level + 2, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) for (j = 0; j < 8; ++j) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) snprintf(header, sizeof(header), "bucket-%d", j);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) format_and_print(outf, level + 3, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) snprintf(header, sizeof(header), "core-count");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) snprintf(value, sizeof(value), "%llu", (ctdp_level->buckets_info >> (j * 8)) & 0xff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) format_and_print(outf, level + 4, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) snprintf(header, sizeof(header),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) "max-turbo-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) snprintf(value, sizeof(value), "%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) ctdp_level->trl_sse_active_cores[j] *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) format_and_print(outf, level + 4, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) if (ctdp_level->trl_avx_active_cores[0]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) snprintf(header, sizeof(header), "turbo-ratio-limits-avx2");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) format_and_print(outf, level + 2, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) for (j = 0; j < 8; ++j) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) snprintf(header, sizeof(header), "bucket-%d", j);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) format_and_print(outf, level + 3, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) snprintf(header, sizeof(header), "core-count");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) snprintf(value, sizeof(value), "%llu", (ctdp_level->buckets_info >> (j * 8)) & 0xff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) format_and_print(outf, level + 4, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) snprintf(header, sizeof(header), "max-turbo-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) snprintf(value, sizeof(value), "%d", ctdp_level->trl_avx_active_cores[j] * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) format_and_print(outf, level + 4, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) if (ctdp_level->trl_avx_512_active_cores[0]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) snprintf(header, sizeof(header), "turbo-ratio-limits-avx512");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) format_and_print(outf, level + 2, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) for (j = 0; j < 8; ++j) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) snprintf(header, sizeof(header), "bucket-%d", j);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) format_and_print(outf, level + 3, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) snprintf(header, sizeof(header), "core-count");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) snprintf(value, sizeof(value), "%llu", (ctdp_level->buckets_info >> (j * 8)) & 0xff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) format_and_print(outf, level + 4, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) snprintf(header, sizeof(header), "max-turbo-frequency(MHz)");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) snprintf(value, sizeof(value), "%d", ctdp_level->trl_avx_512_active_cores[j] * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) format_and_print(outf, level + 4, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) if (ctdp_level->pbf_support)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) _isst_pbf_display_information(cpu, outf, i,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) &ctdp_level->pbf_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) level + 2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) if (ctdp_level->fact_support)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) _isst_fact_display_information(cpu, outf, i, 0xff, 0xff,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) &ctdp_level->fact_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) level + 2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) format_and_print(outf, 1, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) static int start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) void isst_ctdp_display_information_start(FILE *outf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) last_level = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) format_and_print(outf, 0, "start", NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) start = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) void isst_ctdp_display_information_end(FILE *outf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) format_and_print(outf, 0, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) start = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) void isst_pbf_display_information(int cpu, FILE *outf, int level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) struct isst_pbf_info *pbf_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) int _level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) _level = print_package_info(cpu, outf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) _isst_pbf_display_information(cpu, outf, level, pbf_info, _level + 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) format_and_print(outf, 1, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) void isst_fact_display_information(int cpu, FILE *outf, int level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) int fact_bucket, int fact_avx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) struct isst_fact_info *fact_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) int _level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) _level = print_package_info(cpu, outf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) _isst_fact_display_information(cpu, outf, level, fact_bucket, fact_avx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) fact_info, _level + 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) format_and_print(outf, 1, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) void isst_clos_display_information(int cpu, FILE *outf, int clos,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) struct isst_clos_config *clos_config)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) char value[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) int level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) level = print_package_info(cpu, outf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) snprintf(header, sizeof(header), "core-power");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) format_and_print(outf, level + 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) snprintf(header, sizeof(header), "clos");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) snprintf(value, sizeof(value), "%d", clos);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) snprintf(header, sizeof(header), "epp");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) snprintf(value, sizeof(value), "%d", clos_config->epp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) snprintf(header, sizeof(header), "clos-proportional-priority");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) snprintf(value, sizeof(value), "%d", clos_config->clos_prop_prio);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) snprintf(header, sizeof(header), "clos-min");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) snprintf(value, sizeof(value), "%d MHz", clos_config->clos_min * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) snprintf(header, sizeof(header), "clos-max");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) if (clos_config->clos_max == 0xff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) snprintf(value, sizeof(value), "Max Turbo frequency");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) snprintf(value, sizeof(value), "%d MHz", clos_config->clos_max * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) snprintf(header, sizeof(header), "clos-desired");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) snprintf(value, sizeof(value), "%d MHz", clos_config->clos_desired * DISP_FREQ_MULTIPLIER);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) format_and_print(outf, level, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) void isst_clos_display_clos_information(int cpu, FILE *outf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) int clos_enable, int type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) int state, int cap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) char value[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) int level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) level = print_package_info(cpu, outf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) snprintf(header, sizeof(header), "core-power");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) format_and_print(outf, level + 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) snprintf(header, sizeof(header), "support-status");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) if (cap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) snprintf(value, sizeof(value), "supported");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) snprintf(value, sizeof(value), "unsupported");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) snprintf(header, sizeof(header), "enable-status");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) if (state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) snprintf(value, sizeof(value), "enabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) snprintf(value, sizeof(value), "disabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) snprintf(header, sizeof(header), "clos-enable-status");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) if (clos_enable)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) snprintf(value, sizeof(value), "enabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) snprintf(value, sizeof(value), "disabled");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) snprintf(header, sizeof(header), "priority-type");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) if (type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) snprintf(value, sizeof(value), "ordered");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) snprintf(value, sizeof(value), "proportional");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) format_and_print(outf, level, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) void isst_clos_display_assoc_information(int cpu, FILE *outf, int clos)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) char value[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) int level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) level = print_package_info(cpu, outf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) snprintf(header, sizeof(header), "get-assoc");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) format_and_print(outf, level + 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) snprintf(header, sizeof(header), "clos");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) snprintf(value, sizeof(value), "%d", clos);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) format_and_print(outf, level, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) void isst_display_result(int cpu, FILE *outf, char *feature, char *cmd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) int result)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) char value[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) int level = 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) if (cpu >= 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) level = print_package_info(cpu, outf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) snprintf(header, sizeof(header), "%s", feature);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) format_and_print(outf, level + 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) snprintf(header, sizeof(header), "%s", cmd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) if (!result)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) snprintf(value, sizeof(value), "success");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) snprintf(value, sizeof(value), "failed(error %d)", result);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) format_and_print(outf, level + 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) format_and_print(outf, level, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) void isst_display_error_info_message(int error, char *msg, int arg_valid, int arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) FILE *outf = get_output_file();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) static int error_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) char header[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) char value[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) if (!out_format_is_json()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) if (arg_valid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) snprintf(value, sizeof(value), "%s %d", msg, arg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) snprintf(value, sizeof(value), "%s", msg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) if (error)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) fprintf(outf, "Error: %s\n", value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) fprintf(outf, "Information: %s\n", value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) if (!start)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) format_and_print(outf, 0, "start", NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) if (error)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) snprintf(header, sizeof(header), "Error%d", error_index++);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) snprintf(header, sizeof(header), "Information:%d", error_index++);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) format_and_print(outf, 1, header, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) snprintf(header, sizeof(header), "message");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) if (arg_valid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) snprintf(value, sizeof(value), "%s %d", msg, arg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) snprintf(value, sizeof(value), "%s", msg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) format_and_print(outf, 2, header, value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) format_and_print(outf, 1, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) if (!start)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) format_and_print(outf, 0, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) }