Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 89ba7d8c authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branch 'turbostat' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux into pm-tools

Pull turbostat changes for v4.4 from Len Brown.

* 'turbostat' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux:
  tools/power turbostat: bugfix: print MAX_NON_TURBO_RATIO
  tools/power turbostat: simplify Bzy_MHz calculation
parents 57ab3b08 759d2a93
Loading
Loading
Loading
Loading
+18 −12
Original line number Original line Diff line number Diff line
@@ -75,6 +75,7 @@ unsigned int aperf_mperf_multiplier = 1;
int do_smi;
int do_smi;
double bclk;
double bclk;
double base_hz;
double base_hz;
unsigned int has_base_hz;
double tsc_tweak = 1.0;
double tsc_tweak = 1.0;
unsigned int show_pkg;
unsigned int show_pkg;
unsigned int show_core;
unsigned int show_core;
@@ -96,6 +97,7 @@ unsigned int do_ring_perf_limit_reasons;
unsigned int crystal_hz;
unsigned int crystal_hz;
unsigned long long tsc_hz;
unsigned long long tsc_hz;
int base_cpu;
int base_cpu;
double discover_bclk(unsigned int family, unsigned int model);


#define RAPL_PKG		(1 << 0)
#define RAPL_PKG		(1 << 0)
					/* 0x610 MSR_PKG_POWER_LIMIT */
					/* 0x610 MSR_PKG_POWER_LIMIT */
@@ -511,9 +513,13 @@ int format_counters(struct thread_data *t, struct core_data *c,
	}
	}


	/* Bzy_MHz */
	/* Bzy_MHz */
	if (has_aperf)
	if (has_aperf) {
		if (has_base_hz)
			outp += sprintf(outp, "%8.0f", base_hz / units * t->aperf / t->mperf);
		else
			outp += sprintf(outp, "%8.0f",
			outp += sprintf(outp, "%8.0f",
			1.0 * t->tsc * tsc_tweak / units * t->aperf / t->mperf / interval_float);
				1.0 * t->tsc / units * t->aperf / t->mperf / interval_float);
	}


	/* TSC_MHz */
	/* TSC_MHz */
	outp += sprintf(outp, "%8.0f", 1.0 * t->tsc/units/interval_float);
	outp += sprintf(outp, "%8.0f", 1.0 * t->tsc/units/interval_float);
@@ -1158,12 +1164,6 @@ int phi_pkg_cstate_limits[16] = {PCL__0, PCL__2, PCL_6N, PCL_6R, PCLRSV, PCLRSV,
static void
static void
calculate_tsc_tweak()
calculate_tsc_tweak()
{
{
	unsigned long long msr;
	unsigned int base_ratio;

	get_msr(base_cpu, MSR_NHM_PLATFORM_INFO, &msr);
	base_ratio = (msr >> 8) & 0xFF;
	base_hz = base_ratio * bclk * 1000000;
	tsc_tweak = base_hz / tsc_hz;
	tsc_tweak = base_hz / tsc_hz;
}
}


@@ -1440,7 +1440,7 @@ dump_config_tdp(void)
	
	
	get_msr(base_cpu, MSR_TURBO_ACTIVATION_RATIO, &msr);
	get_msr(base_cpu, MSR_TURBO_ACTIVATION_RATIO, &msr);
	fprintf(stderr, "cpu%d: MSR_TURBO_ACTIVATION_RATIO: 0x%08llx (", base_cpu, 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, "MAX_NON_TURBO_RATIO=%d", (unsigned int)(msr) & 0x7F);
	fprintf(stderr, " lock=%d", (unsigned int)(msr >> 31) & 1);
	fprintf(stderr, " lock=%d", (unsigned int)(msr >> 31) & 1);
	fprintf(stderr, ")\n");
	fprintf(stderr, ")\n");
}
}
@@ -1821,6 +1821,7 @@ void check_permissions()
int probe_nhm_msrs(unsigned int family, unsigned int model)
int probe_nhm_msrs(unsigned int family, unsigned int model)
{
{
	unsigned long long msr;
	unsigned long long msr;
	unsigned int base_ratio;
	int *pkg_cstate_limits;
	int *pkg_cstate_limits;


	if (!genuine_intel)
	if (!genuine_intel)
@@ -1829,6 +1830,8 @@ int probe_nhm_msrs(unsigned int family, unsigned int model)
	if (family != 6)
	if (family != 6)
		return 0;
		return 0;


	bclk = discover_bclk(family, model);

	switch (model) {
	switch (model) {
	case 0x1A:	/* Core i7, Xeon 5500 series - Bloomfield, Gainstown NHM-EP */
	case 0x1A:	/* Core i7, Xeon 5500 series - Bloomfield, Gainstown NHM-EP */
	case 0x1E:	/* Core i7 and i5 Processor - Clarksfield, Lynnfield, Jasper Forest */
	case 0x1E:	/* Core i7 and i5 Processor - Clarksfield, Lynnfield, Jasper Forest */
@@ -1871,9 +1874,13 @@ int probe_nhm_msrs(unsigned int family, unsigned int model)
		return 0;
		return 0;
	}
	}
	get_msr(base_cpu, MSR_NHM_SNB_PKG_CST_CFG_CTL, &msr);
	get_msr(base_cpu, MSR_NHM_SNB_PKG_CST_CFG_CTL, &msr);

	pkg_cstate_limit = pkg_cstate_limits[msr & 0xF];
	pkg_cstate_limit = pkg_cstate_limits[msr & 0xF];


	get_msr(base_cpu, MSR_NHM_PLATFORM_INFO, &msr);
	base_ratio = (msr >> 8) & 0xFF;

	base_hz = base_ratio * bclk * 1000000;
	has_base_hz = 1;
	return 1;
	return 1;
}
}
int has_nhm_turbo_ratio_limit(unsigned int family, unsigned int model)
int has_nhm_turbo_ratio_limit(unsigned int family, unsigned int model)
@@ -2780,7 +2787,6 @@ void process_cpuid()
	do_skl_residency = has_skl_msrs(family, model);
	do_skl_residency = has_skl_msrs(family, model);
	do_slm_cstates = is_slm(family, model);
	do_slm_cstates = is_slm(family, model);
	do_knl_cstates  = is_knl(family, model);
	do_knl_cstates  = is_knl(family, model);
	bclk = discover_bclk(family, model);


	rapl_probe(family, model);
	rapl_probe(family, model);
	perf_limit_reasons_probe(family, model);
	perf_limit_reasons_probe(family, model);