diff options
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_uncore.h | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h index 18eb78bbdd10..863d9b02563e 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #define UNCORE_PCI_DEV_TYPE(data) ((data >> 8) & 0xff) | 17 | #define UNCORE_PCI_DEV_TYPE(data) ((data >> 8) & 0xff) |
| 18 | #define UNCORE_PCI_DEV_IDX(data) (data & 0xff) | 18 | #define UNCORE_PCI_DEV_IDX(data) (data & 0xff) |
| 19 | #define UNCORE_EXTRA_PCI_DEV 0xff | 19 | #define UNCORE_EXTRA_PCI_DEV 0xff |
| 20 | #define UNCORE_EXTRA_PCI_DEV_MAX 2 | 20 | #define UNCORE_EXTRA_PCI_DEV_MAX 3 |
| 21 | 21 | ||
| 22 | /* support up to 8 sockets */ | 22 | /* support up to 8 sockets */ |
| 23 | #define UNCORE_SOCKET_MAX 8 | 23 | #define UNCORE_SOCKET_MAX 8 |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c index 745b158e9a65..21af6149edf2 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c | |||
| @@ -891,6 +891,7 @@ void snbep_uncore_cpu_init(void) | |||
| 891 | enum { | 891 | enum { |
| 892 | SNBEP_PCI_QPI_PORT0_FILTER, | 892 | SNBEP_PCI_QPI_PORT0_FILTER, |
| 893 | SNBEP_PCI_QPI_PORT1_FILTER, | 893 | SNBEP_PCI_QPI_PORT1_FILTER, |
| 894 | HSWEP_PCI_PCU_3, | ||
| 894 | }; | 895 | }; |
| 895 | 896 | ||
| 896 | static int snbep_qpi_hw_config(struct intel_uncore_box *box, struct perf_event *event) | 897 | static int snbep_qpi_hw_config(struct intel_uncore_box *box, struct perf_event *event) |
| @@ -2026,6 +2027,17 @@ void hswep_uncore_cpu_init(void) | |||
| 2026 | { | 2027 | { |
| 2027 | if (hswep_uncore_cbox.num_boxes > boot_cpu_data.x86_max_cores) | 2028 | if (hswep_uncore_cbox.num_boxes > boot_cpu_data.x86_max_cores) |
| 2028 | hswep_uncore_cbox.num_boxes = boot_cpu_data.x86_max_cores; | 2029 | hswep_uncore_cbox.num_boxes = boot_cpu_data.x86_max_cores; |
| 2030 | |||
| 2031 | /* Detect 6-8 core systems with only two SBOXes */ | ||
| 2032 | if (uncore_extra_pci_dev[0][HSWEP_PCI_PCU_3]) { | ||
| 2033 | u32 capid4; | ||
| 2034 | |||
| 2035 | pci_read_config_dword(uncore_extra_pci_dev[0][HSWEP_PCI_PCU_3], | ||
| 2036 | 0x94, &capid4); | ||
| 2037 | if (((capid4 >> 6) & 0x3) == 0) | ||
| 2038 | hswep_uncore_sbox.num_boxes = 2; | ||
| 2039 | } | ||
| 2040 | |||
| 2029 | uncore_msr_uncores = hswep_msr_uncores; | 2041 | uncore_msr_uncores = hswep_msr_uncores; |
| 2030 | } | 2042 | } |
| 2031 | 2043 | ||
| @@ -2287,6 +2299,11 @@ static DEFINE_PCI_DEVICE_TABLE(hswep_uncore_pci_ids) = { | |||
| 2287 | .driver_data = UNCORE_PCI_DEV_DATA(UNCORE_EXTRA_PCI_DEV, | 2299 | .driver_data = UNCORE_PCI_DEV_DATA(UNCORE_EXTRA_PCI_DEV, |
| 2288 | SNBEP_PCI_QPI_PORT1_FILTER), | 2300 | SNBEP_PCI_QPI_PORT1_FILTER), |
| 2289 | }, | 2301 | }, |
| 2302 | { /* PCU.3 (for Capability registers) */ | ||
| 2303 | PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x2fc0), | ||
| 2304 | .driver_data = UNCORE_PCI_DEV_DATA(UNCORE_EXTRA_PCI_DEV, | ||
| 2305 | HSWEP_PCI_PCU_3), | ||
| 2306 | }, | ||
| 2290 | { /* end: all zeroes */ } | 2307 | { /* end: all zeroes */ } |
| 2291 | }; | 2308 | }; |
| 2292 | 2309 | ||
