Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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) }