diff options
Diffstat (limited to 'arch/x86/kernel/cpu/perf_event_intel.c')
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 25 | 
1 files changed, 24 insertions, 1 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 7f2739e03e7..6bca492b854 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c @@ -2008,6 +2008,7 @@ __init int intel_pmu_init(void)  		break;  	case 28: /* Atom */ +	case 54: /* Cedariew */  		memcpy(hw_cache_event_ids, atom_hw_cache_event_ids,  		       sizeof(hw_cache_event_ids)); @@ -2047,7 +2048,6 @@ __init int intel_pmu_init(void)  	case 42: /* SandyBridge */  	case 45: /* SandyBridge, "Romely-EP" */  		x86_add_quirk(intel_sandybridge_quirk); -	case 58: /* IvyBridge */  		memcpy(hw_cache_event_ids, snb_hw_cache_event_ids,  		       sizeof(hw_cache_event_ids));  		memcpy(hw_cache_extra_regs, snb_hw_cache_extra_regs, @@ -2072,6 +2072,29 @@ __init int intel_pmu_init(void)  		pr_cont("SandyBridge events, ");  		break; +	case 58: /* IvyBridge */ +		memcpy(hw_cache_event_ids, snb_hw_cache_event_ids, +		       sizeof(hw_cache_event_ids)); +		memcpy(hw_cache_extra_regs, snb_hw_cache_extra_regs, +		       sizeof(hw_cache_extra_regs)); + +		intel_pmu_lbr_init_snb(); + +		x86_pmu.event_constraints = intel_snb_event_constraints; +		x86_pmu.pebs_constraints = intel_ivb_pebs_event_constraints; +		x86_pmu.pebs_aliases = intel_pebs_aliases_snb; +		x86_pmu.extra_regs = intel_snb_extra_regs; +		/* all extra regs are per-cpu when HT is on */ +		x86_pmu.er_flags |= ERF_HAS_RSP_1; +		x86_pmu.er_flags |= ERF_NO_HT_SHARING; + +		/* UOPS_ISSUED.ANY,c=1,i=1 to count stall cycles */ +		intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = +			X86_CONFIG(.event=0x0e, .umask=0x01, .inv=1, .cmask=1); + +		pr_cont("IvyBridge events, "); +		break; +  	default:  		switch (x86_pmu.version) {  |