|
@@ -15,6 +15,25 @@
|
|
|
#define PCI_DEVICE_ID_INTEL_SKL_HQ_IMC 0x1910
|
|
|
#define PCI_DEVICE_ID_INTEL_SKL_SD_IMC 0x190f
|
|
|
#define PCI_DEVICE_ID_INTEL_SKL_SQ_IMC 0x191f
|
|
|
+#define PCI_DEVICE_ID_INTEL_KBL_Y_IMC 0x590c
|
|
|
+#define PCI_DEVICE_ID_INTEL_KBL_U_IMC 0x5904
|
|
|
+#define PCI_DEVICE_ID_INTEL_KBL_UQ_IMC 0x5914
|
|
|
+#define PCI_DEVICE_ID_INTEL_KBL_SD_IMC 0x590f
|
|
|
+#define PCI_DEVICE_ID_INTEL_KBL_SQ_IMC 0x591f
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_2U_IMC 0x3ecc
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_4U_IMC 0x3ed0
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_4H_IMC 0x3e10
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_6H_IMC 0x3ec4
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_2S_D_IMC 0x3e0f
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_4S_D_IMC 0x3e1f
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_6S_D_IMC 0x3ec2
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_8S_D_IMC 0x3e30
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_4S_W_IMC 0x3e18
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_6S_W_IMC 0x3ec6
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_8S_W_IMC 0x3e31
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_4S_S_IMC 0x3e33
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_6S_S_IMC 0x3eca
|
|
|
+#define PCI_DEVICE_ID_INTEL_CFL_8S_S_IMC 0x3e32
|
|
|
|
|
|
/* SNB event control */
|
|
|
#define SNB_UNC_CTL_EV_SEL_MASK 0x000000ff
|
|
@@ -202,6 +221,10 @@ static void skl_uncore_msr_init_box(struct intel_uncore_box *box)
|
|
|
wrmsrl(SKL_UNC_PERF_GLOBAL_CTL,
|
|
|
SNB_UNC_GLOBAL_CTL_EN | SKL_UNC_GLOBAL_CTL_CORE_ALL);
|
|
|
}
|
|
|
+
|
|
|
+ /* The 8th CBOX has different MSR space */
|
|
|
+ if (box->pmu->pmu_idx == 7)
|
|
|
+ __set_bit(UNCORE_BOX_FLAG_CFL8_CBOX_MSR_OFFS, &box->flags);
|
|
|
}
|
|
|
|
|
|
static void skl_uncore_msr_enable_box(struct intel_uncore_box *box)
|
|
@@ -228,7 +251,7 @@ static struct intel_uncore_ops skl_uncore_msr_ops = {
|
|
|
static struct intel_uncore_type skl_uncore_cbox = {
|
|
|
.name = "cbox",
|
|
|
.num_counters = 4,
|
|
|
- .num_boxes = 5,
|
|
|
+ .num_boxes = 8,
|
|
|
.perf_ctr_bits = 44,
|
|
|
.fixed_ctr_bits = 48,
|
|
|
.perf_ctr = SNB_UNC_CBO_0_PER_CTR0,
|
|
@@ -569,7 +592,82 @@ static const struct pci_device_id skl_uncore_pci_ids[] = {
|
|
|
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SKL_SQ_IMC),
|
|
|
.driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
},
|
|
|
-
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_KBL_Y_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_KBL_U_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_KBL_UQ_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_KBL_SD_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_KBL_SQ_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_2U_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_4U_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_4H_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_6H_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_2S_D_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_4S_D_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_6S_D_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_8S_D_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_4S_W_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_6S_W_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_8S_W_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_4S_S_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_6S_S_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
+ { /* IMC */
|
|
|
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CFL_8S_S_IMC),
|
|
|
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
|
|
+ },
|
|
|
{ /* end: all zeroes */ },
|
|
|
};
|
|
|
|
|
@@ -618,6 +716,25 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = {
|
|
|
IMC_DEV(SKL_HQ_IMC, &skl_uncore_pci_driver), /* 6th Gen Core H Quad Core */
|
|
|
IMC_DEV(SKL_SD_IMC, &skl_uncore_pci_driver), /* 6th Gen Core S Dual Core */
|
|
|
IMC_DEV(SKL_SQ_IMC, &skl_uncore_pci_driver), /* 6th Gen Core S Quad Core */
|
|
|
+ IMC_DEV(KBL_Y_IMC, &skl_uncore_pci_driver), /* 7th Gen Core Y */
|
|
|
+ IMC_DEV(KBL_U_IMC, &skl_uncore_pci_driver), /* 7th Gen Core U */
|
|
|
+ IMC_DEV(KBL_UQ_IMC, &skl_uncore_pci_driver), /* 7th Gen Core U Quad Core */
|
|
|
+ IMC_DEV(KBL_SD_IMC, &skl_uncore_pci_driver), /* 7th Gen Core S Dual Core */
|
|
|
+ IMC_DEV(KBL_SQ_IMC, &skl_uncore_pci_driver), /* 7th Gen Core S Quad Core */
|
|
|
+ IMC_DEV(CFL_2U_IMC, &skl_uncore_pci_driver), /* 8th Gen Core U 2 Cores */
|
|
|
+ IMC_DEV(CFL_4U_IMC, &skl_uncore_pci_driver), /* 8th Gen Core U 4 Cores */
|
|
|
+ IMC_DEV(CFL_4H_IMC, &skl_uncore_pci_driver), /* 8th Gen Core H 4 Cores */
|
|
|
+ IMC_DEV(CFL_6H_IMC, &skl_uncore_pci_driver), /* 8th Gen Core H 6 Cores */
|
|
|
+ IMC_DEV(CFL_2S_D_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 2 Cores Desktop */
|
|
|
+ IMC_DEV(CFL_4S_D_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 4 Cores Desktop */
|
|
|
+ IMC_DEV(CFL_6S_D_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 6 Cores Desktop */
|
|
|
+ IMC_DEV(CFL_8S_D_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 8 Cores Desktop */
|
|
|
+ IMC_DEV(CFL_4S_W_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 4 Cores Work Station */
|
|
|
+ IMC_DEV(CFL_6S_W_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 6 Cores Work Station */
|
|
|
+ IMC_DEV(CFL_8S_W_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 8 Cores Work Station */
|
|
|
+ IMC_DEV(CFL_4S_S_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 4 Cores Server */
|
|
|
+ IMC_DEV(CFL_6S_S_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 6 Cores Server */
|
|
|
+ IMC_DEV(CFL_8S_S_IMC, &skl_uncore_pci_driver), /* 8th Gen Core S 8 Cores Server */
|
|
|
{ /* end marker */ }
|
|
|
};
|
|
|
|