perf/x86/intel/uncore: Add Broadwell-U uncore IMC PMU support
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 Tested-by: Sonny Rao <sonnyrao@chromium.org> Signed-off-by: Stephane Eranian <eranian@google.com> Cc: Borislav Petkov <bp@alien8.de> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: kan.liang@intel.com Cc: peterz@infradead.org Link: http://lkml.kernel.org/r/20150423065642.GA4890@thinkpad Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
f7dc7fd1c0
commit
a41f3c8cd4
3 changed files with 24 additions and 0 deletions
|
@ -922,6 +922,9 @@ static int __init uncore_pci_init(void)
|
||||||
case 69: /* Haswell Celeron */
|
case 69: /* Haswell Celeron */
|
||||||
ret = hsw_uncore_pci_init();
|
ret = hsw_uncore_pci_init();
|
||||||
break;
|
break;
|
||||||
|
case 61: /* Broadwell */
|
||||||
|
ret = bdw_uncore_pci_init();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -326,6 +326,7 @@ extern struct event_constraint uncore_constraint_empty;
|
||||||
int snb_uncore_pci_init(void);
|
int snb_uncore_pci_init(void);
|
||||||
int ivb_uncore_pci_init(void);
|
int ivb_uncore_pci_init(void);
|
||||||
int hsw_uncore_pci_init(void);
|
int hsw_uncore_pci_init(void);
|
||||||
|
int bdw_uncore_pci_init(void);
|
||||||
void snb_uncore_cpu_init(void);
|
void snb_uncore_cpu_init(void);
|
||||||
void nhm_uncore_cpu_init(void);
|
void nhm_uncore_cpu_init(void);
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150
|
#define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150
|
||||||
#define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
|
#define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
|
||||||
#define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04
|
#define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04
|
||||||
|
#define PCI_DEVICE_ID_INTEL_BDW_IMC 0x1604
|
||||||
|
|
||||||
/* SNB event control */
|
/* SNB event control */
|
||||||
#define SNB_UNC_CTL_EV_SEL_MASK 0x000000ff
|
#define SNB_UNC_CTL_EV_SEL_MASK 0x000000ff
|
||||||
|
@ -486,6 +487,14 @@ static const struct pci_device_id hsw_uncore_pci_ids[] = {
|
||||||
{ /* end: all zeroes */ },
|
{ /* 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 = {
|
static struct pci_driver snb_uncore_pci_driver = {
|
||||||
.name = "snb_uncore",
|
.name = "snb_uncore",
|
||||||
.id_table = snb_uncore_pci_ids,
|
.id_table = snb_uncore_pci_ids,
|
||||||
|
@ -501,6 +510,11 @@ static struct pci_driver hsw_uncore_pci_driver = {
|
||||||
.id_table = hsw_uncore_pci_ids,
|
.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 {
|
struct imc_uncore_pci_dev {
|
||||||
__u32 pci_id;
|
__u32 pci_id;
|
||||||
struct pci_driver *driver;
|
struct pci_driver *driver;
|
||||||
|
@ -514,6 +528,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(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_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(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 */ }
|
{ /* end marker */ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -561,6 +576,11 @@ int hsw_uncore_pci_init(void)
|
||||||
return imc_uncore_pci_init();
|
return imc_uncore_pci_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bdw_uncore_pci_init(void)
|
||||||
|
{
|
||||||
|
return imc_uncore_pci_init();
|
||||||
|
}
|
||||||
|
|
||||||
/* end of Sandy Bridge uncore support */
|
/* end of Sandy Bridge uncore support */
|
||||||
|
|
||||||
/* Nehalem uncore support */
|
/* Nehalem uncore support */
|
||||||
|
|
Loading…
Add table
Reference in a new issue