|
@@ -62,6 +62,7 @@ unsigned int dump_only;
|
|
|
unsigned int do_snb_cstates;
|
|
|
unsigned int do_knl_cstates;
|
|
|
unsigned int do_slm_cstates;
|
|
|
+unsigned int do_cnl_cstates;
|
|
|
unsigned int use_c1_residency_msr;
|
|
|
unsigned int has_aperf;
|
|
|
unsigned int has_epb;
|
|
@@ -604,7 +605,7 @@ void print_header(char *delim)
|
|
|
|
|
|
if (DO_BIC(BIC_CPU_c1))
|
|
|
outp += sprintf(outp, "%sCPU%%c1", (printed++ ? delim : ""));
|
|
|
- if (DO_BIC(BIC_CPU_c3) && !do_slm_cstates && !do_knl_cstates)
|
|
|
+ if (DO_BIC(BIC_CPU_c3) && !do_slm_cstates && !do_knl_cstates && !do_cnl_cstates)
|
|
|
outp += sprintf(outp, "%sCPU%%c3", (printed++ ? delim : ""));
|
|
|
if (DO_BIC(BIC_CPU_c6))
|
|
|
outp += sprintf(outp, "%sCPU%%c6", (printed++ ? delim : ""));
|
|
@@ -921,7 +922,7 @@ int format_counters(struct thread_data *t, struct core_data *c,
|
|
|
if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE))
|
|
|
goto done;
|
|
|
|
|
|
- if (DO_BIC(BIC_CPU_c3) && !do_slm_cstates && !do_knl_cstates)
|
|
|
+ if (DO_BIC(BIC_CPU_c3) && !do_slm_cstates && !do_knl_cstates && !do_cnl_cstates)
|
|
|
outp += sprintf(outp, "%s%.2f", (printed++ ? delim : ""), 100.0 * c->c3/tsc);
|
|
|
if (DO_BIC(BIC_CPU_c6))
|
|
|
outp += sprintf(outp, "%s%.2f", (printed++ ? delim : ""), 100.0 * c->c6/tsc);
|
|
@@ -1676,7 +1677,7 @@ retry:
|
|
|
if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE))
|
|
|
goto done;
|
|
|
|
|
|
- if (DO_BIC(BIC_CPU_c3) && !do_slm_cstates && !do_knl_cstates) {
|
|
|
+ if (DO_BIC(BIC_CPU_c3) && !do_slm_cstates && !do_knl_cstates && !do_cnl_cstates) {
|
|
|
if (get_msr(cpu, MSR_CORE_C3_RESIDENCY, &c->c3))
|
|
|
return -6;
|
|
|
}
|
|
@@ -2943,6 +2944,7 @@ int probe_nhm_msrs(unsigned int family, unsigned int model)
|
|
|
case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */
|
|
|
case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */
|
|
|
case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */
|
|
|
+ case INTEL_FAM6_CANNONLAKE_MOBILE: /* CNL */
|
|
|
pkg_cstate_limits = hsw_pkg_cstate_limits;
|
|
|
has_misc_feature_control = 1;
|
|
|
break;
|
|
@@ -3148,6 +3150,7 @@ int has_config_tdp(unsigned int family, unsigned int model)
|
|
|
case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */
|
|
|
case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */
|
|
|
case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */
|
|
|
+ case INTEL_FAM6_CANNONLAKE_MOBILE: /* CNL */
|
|
|
case INTEL_FAM6_SKYLAKE_X: /* SKX */
|
|
|
|
|
|
case INTEL_FAM6_XEON_PHI_KNL: /* Knights Landing */
|
|
@@ -3602,6 +3605,7 @@ void rapl_probe(unsigned int family, unsigned int model)
|
|
|
case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */
|
|
|
case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */
|
|
|
case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */
|
|
|
+ case INTEL_FAM6_CANNONLAKE_MOBILE: /* CNL */
|
|
|
do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_GFX | RAPL_PKG_POWER_INFO;
|
|
|
BIC_PRESENT(BIC_PKG__);
|
|
|
BIC_PRESENT(BIC_RAM__);
|
|
@@ -3937,6 +3941,7 @@ int has_snb_msrs(unsigned int family, unsigned int model)
|
|
|
case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */
|
|
|
case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */
|
|
|
case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */
|
|
|
+ case INTEL_FAM6_CANNONLAKE_MOBILE: /* CNL */
|
|
|
case INTEL_FAM6_SKYLAKE_X: /* SKX */
|
|
|
case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */
|
|
|
case INTEL_FAM6_ATOM_GEMINI_LAKE:
|
|
@@ -3970,6 +3975,7 @@ int has_hsw_msrs(unsigned int family, unsigned int model)
|
|
|
case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */
|
|
|
case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */
|
|
|
case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */
|
|
|
+ case INTEL_FAM6_CANNONLAKE_MOBILE: /* CNL */
|
|
|
case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */
|
|
|
case INTEL_FAM6_ATOM_GEMINI_LAKE:
|
|
|
return 1;
|
|
@@ -3995,6 +4001,7 @@ int has_skl_msrs(unsigned int family, unsigned int model)
|
|
|
case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */
|
|
|
case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */
|
|
|
case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */
|
|
|
+ case INTEL_FAM6_CANNONLAKE_MOBILE: /* CNL */
|
|
|
return 1;
|
|
|
}
|
|
|
return 0;
|
|
@@ -4024,6 +4031,19 @@ int is_knl(unsigned int family, unsigned int model)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int is_cnl(unsigned int family, unsigned int model)
|
|
|
+{
|
|
|
+ if (!genuine_intel)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ switch (model) {
|
|
|
+ case INTEL_FAM6_CANNONLAKE_MOBILE: /* CNL */
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
unsigned int get_aperf_mperf_multiplier(unsigned int family, unsigned int model)
|
|
|
{
|
|
|
if (is_knl(family, model))
|
|
@@ -4461,6 +4481,7 @@ void process_cpuid()
|
|
|
}
|
|
|
do_slm_cstates = is_slm(family, model);
|
|
|
do_knl_cstates = is_knl(family, model);
|
|
|
+ do_cnl_cstates = is_cnl(family, model);
|
|
|
|
|
|
if (!quiet)
|
|
|
decode_misc_pwr_mgmt_msr();
|