mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	tools/power turbostat: dump CONFIG_TDP
Config TDP is a feature that allows parts to be configured for different thermal limits after they have left the factory. This can have an effect on the operation of the part, particularly in determiniing... Max Non-turbo Ratio Turbo Activation Ratio Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
		
							parent
							
								
									bfae205226
								
							
						
					
					
						commit
						6fb3143b56
					
				| @ -169,6 +169,12 @@ | |||||||
| #define MSR_PP1_ENERGY_STATUS		0x00000641 | #define MSR_PP1_ENERGY_STATUS		0x00000641 | ||||||
| #define MSR_PP1_POLICY			0x00000642 | #define MSR_PP1_POLICY			0x00000642 | ||||||
| 
 | 
 | ||||||
|  | #define MSR_CONFIG_TDP_NOMINAL		0x00000648 | ||||||
|  | #define MSR_CONFIG_TDP_LEVEL_1		0x00000649 | ||||||
|  | #define MSR_CONFIG_TDP_LEVEL_2		0x0000064A | ||||||
|  | #define MSR_CONFIG_TDP_CONTROL		0x0000064B | ||||||
|  | #define MSR_TURBO_ACTIVATION_RATIO	0x0000064C | ||||||
|  | 
 | ||||||
| #define MSR_PKG_WEIGHTED_CORE_C0_RES	0x00000658 | #define MSR_PKG_WEIGHTED_CORE_C0_RES	0x00000658 | ||||||
| #define MSR_PKG_ANY_CORE_C0_RES		0x00000659 | #define MSR_PKG_ANY_CORE_C0_RES		0x00000659 | ||||||
| #define MSR_PKG_ANY_GFXE_C0_RES		0x0000065A | #define MSR_PKG_ANY_GFXE_C0_RES		0x0000065A | ||||||
|  | |||||||
| @ -1384,6 +1384,49 @@ dump_nhm_cst_cfg(void) | |||||||
| 	return; | 	return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void | ||||||
|  | dump_config_tdp(void) | ||||||
|  | { | ||||||
|  | 	unsigned long long msr; | ||||||
|  | 
 | ||||||
|  | 	get_msr(base_cpu, MSR_CONFIG_TDP_NOMINAL, &msr); | ||||||
|  | 	fprintf(stderr, "cpu%d: MSR_CONFIG_TDP_NOMINAL: 0x%08llx", base_cpu, msr); | ||||||
|  | 	fprintf(stderr, " (base_ratio=%d)\n", (unsigned int)msr & 0xEF); | ||||||
|  | 
 | ||||||
|  | 	get_msr(base_cpu, MSR_CONFIG_TDP_LEVEL_1, &msr); | ||||||
|  | 	fprintf(stderr, "cpu%d: MSR_CONFIG_TDP_LEVEL_1: 0x%08llx (", base_cpu, msr); | ||||||
|  | 	if (msr) { | ||||||
|  | 		fprintf(stderr, "PKG_MIN_PWR_LVL1=%d ", (unsigned int)(msr >> 48) & 0xEFFF); | ||||||
|  | 		fprintf(stderr, "PKG_MAX_PWR_LVL1=%d ", (unsigned int)(msr >> 32) & 0xEFFF); | ||||||
|  | 		fprintf(stderr, "LVL1_RATIO=%d ", (unsigned int)(msr >> 16) & 0xEF); | ||||||
|  | 		fprintf(stderr, "PKG_TDP_LVL1=%d", (unsigned int)(msr) & 0xEFFF); | ||||||
|  | 	} | ||||||
|  | 	fprintf(stderr, ")\n"); | ||||||
|  | 
 | ||||||
|  | 	get_msr(base_cpu, MSR_CONFIG_TDP_LEVEL_2, &msr); | ||||||
|  | 	fprintf(stderr, "cpu%d: MSR_CONFIG_TDP_LEVEL_2: 0x%08llx (", base_cpu, msr); | ||||||
|  | 	if (msr) { | ||||||
|  | 		fprintf(stderr, "PKG_MIN_PWR_LVL2=%d ", (unsigned int)(msr >> 48) & 0xEFFF); | ||||||
|  | 		fprintf(stderr, "PKG_MAX_PWR_LVL2=%d ", (unsigned int)(msr >> 32) & 0xEFFF); | ||||||
|  | 		fprintf(stderr, "LVL2_RATIO=%d ", (unsigned int)(msr >> 16) & 0xEF); | ||||||
|  | 		fprintf(stderr, "PKG_TDP_LVL2=%d", (unsigned int)(msr) & 0xEFFF); | ||||||
|  | 	} | ||||||
|  | 	fprintf(stderr, ")\n"); | ||||||
|  | 
 | ||||||
|  | 	get_msr(base_cpu, MSR_CONFIG_TDP_CONTROL, &msr); | ||||||
|  | 	fprintf(stderr, "cpu%d: MSR_CONFIG_TDP_CONTROL: 0x%08llx (", base_cpu, msr); | ||||||
|  | 	if ((msr) & 0x3) | ||||||
|  | 		fprintf(stderr, "TDP_LEVEL=%d ", (unsigned int)(msr) & 0x3); | ||||||
|  | 	fprintf(stderr, " lock=%d", (unsigned int)(msr >> 31) & 1); | ||||||
|  | 	fprintf(stderr, ")\n"); | ||||||
|  | 	 | ||||||
|  | 	get_msr(base_cpu, MSR_TURBO_ACTIVATION_RATIO, &msr); | ||||||
|  | 	fprintf(stderr, "cpu%d: MSR_TURBO_ACTIVATION_RATIO: 0x%08llx (", base_cpu, msr); | ||||||
|  | 	fprintf(stderr, "MAX_NON_TURBO_RATIO=%d", (unsigned int)(msr) & 0xEF); | ||||||
|  | 	fprintf(stderr, " lock=%d", (unsigned int)(msr >> 31) & 1); | ||||||
|  | 	fprintf(stderr, ")\n"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void free_all_buffers(void) | void free_all_buffers(void) | ||||||
| { | { | ||||||
| 	CPU_FREE(cpu_present_set); | 	CPU_FREE(cpu_present_set); | ||||||
| @ -1873,6 +1916,36 @@ int has_knl_turbo_ratio_limit(unsigned int family, unsigned int model) | |||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | int has_config_tdp(unsigned int family, unsigned int model) | ||||||
|  | { | ||||||
|  | 	if (!genuine_intel) | ||||||
|  | 		return 0; | ||||||
|  | 
 | ||||||
|  | 	if (family != 6) | ||||||
|  | 		return 0; | ||||||
|  | 
 | ||||||
|  | 	switch (model) { | ||||||
|  | 	case 0x3A:	/* IVB */ | ||||||
|  | 	case 0x3E:	/* IVB Xeon */ | ||||||
|  | 
 | ||||||
|  | 	case 0x3C:	/* HSW */ | ||||||
|  | 	case 0x3F:	/* HSX */ | ||||||
|  | 	case 0x45:	/* HSW */ | ||||||
|  | 	case 0x46:	/* HSW */ | ||||||
|  | 	case 0x3D:	/* BDW */ | ||||||
|  | 	case 0x47:	/* BDW */ | ||||||
|  | 	case 0x4F:	/* BDX */ | ||||||
|  | 	case 0x56:	/* BDX-DE */ | ||||||
|  | 	case 0x4E:	/* SKL */ | ||||||
|  | 	case 0x5E:	/* SKL */ | ||||||
|  | 
 | ||||||
|  | 	case 0x57:	/* Knights Landing */ | ||||||
|  | 		return 1; | ||||||
|  | 	default: | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static void | static void | ||||||
| dump_cstate_pstate_config_info(family, model) | dump_cstate_pstate_config_info(family, model) | ||||||
| { | { | ||||||
| @ -1893,6 +1966,9 @@ dump_cstate_pstate_config_info(family, model) | |||||||
| 	if (has_knl_turbo_ratio_limit(family, model)) | 	if (has_knl_turbo_ratio_limit(family, model)) | ||||||
| 		dump_knl_turbo_ratio_limits(); | 		dump_knl_turbo_ratio_limits(); | ||||||
| 
 | 
 | ||||||
|  | 	if (has_config_tdp(family, model)) | ||||||
|  | 		dump_config_tdp(); | ||||||
|  | 
 | ||||||
| 	dump_nhm_cst_cfg(); | 	dump_nhm_cst_cfg(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -3014,7 +3090,7 @@ int get_and_dump_counters(void) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void print_version() { | void print_version() { | ||||||
| 	fprintf(stderr, "turbostat version 4.7 27-May, 2015" | 	fprintf(stderr, "turbostat version 4.7 17-June, 2015" | ||||||
| 		" - Len Brown <lenb@kernel.org>\n"); | 		" - Len Brown <lenb@kernel.org>\n"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Len Brown
						Len Brown