Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755599AbbDWHCF (ORCPT ); Thu, 23 Apr 2015 03:02:05 -0400 Received: from mail-qc0-f174.google.com ([209.85.216.174]:36795 "EHLO mail-qc0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754634AbbDWHCB (ORCPT ); Thu, 23 Apr 2015 03:02:01 -0400 MIME-Version: 1.0 In-Reply-To: <20150423065642.GA4890@thinkpad> References: <20150423065642.GA4890@thinkpad> From: Sonny Rao Date: Thu, 23 Apr 2015 00:01:40 -0700 X-Google-Sender-Auth: zNWnJ8cP6Pvpq0q9zEkyj3RdM2I Message-ID: Subject: Re: [PATCH] perf/x86/intel/uncore: add Broadwell-U uncore IMC PMU support To: Stephane Eranian Cc: "linux-kernel@vger.kernel.org" , Peter Zijlstra , ak@linux.intel.com, kan.liang@intel.com, Ingo Molnar Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4128 Lines: 108 On Wed, Apr 22, 2015 at 11:56 PM, Stephane Eranian wrote: > > This patch enables the uncore Memory Controller (IMC) PMU support > for Intel Broadwell-U (Model 61) mobile processors. > The IMC PMU enables measuring memory bandwidth. > > To use with perf: > $ perf stat -a -I 1000 -e uncore_imc/data_reads/,uncore_imc/data_writes/ sleep 10 > > Signed-off-by: Stephane Eranian Tested-by: Sonny Rao > --- > > diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c > index c635b8b..a03f964 100644 > --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c > +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c > @@ -922,6 +922,9 @@ static int __init uncore_pci_init(void) > case 69: /* Haswell Celeron */ > ret = hsw_uncore_pci_init(); > break; > + case 61: /* Broadwell */ > + ret = bdw_uncore_pci_init(); > + break; > default: > return 0; > } > diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h > index 6c8c1e7..06b0793 100644 > --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h > +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h > @@ -326,6 +326,7 @@ extern struct event_constraint uncore_constraint_empty; > int snb_uncore_pci_init(void); > int ivb_uncore_pci_init(void); > int hsw_uncore_pci_init(void); > +int bdw_uncore_pci_init(void); > void snb_uncore_cpu_init(void); > void nhm_uncore_cpu_init(void); > > diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c > index 0333d0b..0f768bf 100644 > --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c > +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c > @@ -7,6 +7,7 @@ > #define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150 > #define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00 > #define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04 > +#define PCI_DEVICE_ID_INTEL_BDW_IMC 0x1604 > > /* SNB event control */ > #define SNB_UNC_CTL_EV_SEL_MASK 0x000000ff > @@ -488,6 +489,14 @@ static const struct pci_device_id hsw_uncore_pci_ids[] = { > { /* end: all zeroes */ }, > }; > > +static const struct pci_device_id bdw_uncore_pci_ids[] = { > + { /* IMC */ > + PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BDW_IMC), > + .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0), > + }, > + { /* end: all zeroes */ }, > +}; > + > static struct pci_driver snb_uncore_pci_driver = { > .name = "snb_uncore", > .id_table = snb_uncore_pci_ids, > @@ -503,6 +512,11 @@ static struct pci_driver hsw_uncore_pci_driver = { > .id_table = hsw_uncore_pci_ids, > }; > > +static struct pci_driver bdw_uncore_pci_driver = { > + .name = "bdw_uncore", > + .id_table = bdw_uncore_pci_ids, > +}; > + > struct imc_uncore_pci_dev { > __u32 pci_id; > struct pci_driver *driver; > @@ -516,6 +530,7 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = { > IMC_DEV(IVB_E3_IMC, &ivb_uncore_pci_driver), /* Xeon E3-1200 v2/3rd Gen Core processor */ > IMC_DEV(HSW_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core Processor */ > IMC_DEV(HSW_U_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core ULT Mobile Processor */ > + IMC_DEV(BDW_IMC, &bdw_uncore_pci_driver), /* 5th Gen Core U */ > { /* end marker */ } > }; > > @@ -563,6 +578,11 @@ int hsw_uncore_pci_init(void) > return imc_uncore_pci_init(); > } > > +int bdw_uncore_pci_init(void) > +{ > + return imc_uncore_pci_init(); > +} > + > /* end of Sandy Bridge uncore support */ > > /* Nehalem uncore support */ > -- > 2.1.0 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/