|
@@ -2025,13 +2025,27 @@ static struct intel_uncore_type hswep_uncore_imc = {
|
|
|
SNBEP_UNCORE_PCI_COMMON_INIT(),
|
|
|
};
|
|
|
|
|
|
+static unsigned hswep_uncore_irp_ctrs[] = {0xa0, 0xa8, 0xb0, 0xb8};
|
|
|
+
|
|
|
+static u64 hswep_uncore_irp_read_counter(struct intel_uncore_box *box, struct perf_event *event)
|
|
|
+{
|
|
|
+ struct pci_dev *pdev = box->pci_dev;
|
|
|
+ struct hw_perf_event *hwc = &event->hw;
|
|
|
+ u64 count = 0;
|
|
|
+
|
|
|
+ pci_read_config_dword(pdev, hswep_uncore_irp_ctrs[hwc->idx], (u32 *)&count);
|
|
|
+ pci_read_config_dword(pdev, hswep_uncore_irp_ctrs[hwc->idx] + 4, (u32 *)&count + 1);
|
|
|
+
|
|
|
+ return count;
|
|
|
+}
|
|
|
+
|
|
|
static struct intel_uncore_ops hswep_uncore_irp_ops = {
|
|
|
.init_box = snbep_uncore_pci_init_box,
|
|
|
.disable_box = snbep_uncore_pci_disable_box,
|
|
|
.enable_box = snbep_uncore_pci_enable_box,
|
|
|
.disable_event = ivbep_uncore_irp_disable_event,
|
|
|
.enable_event = ivbep_uncore_irp_enable_event,
|
|
|
- .read_counter = ivbep_uncore_irp_read_counter,
|
|
|
+ .read_counter = hswep_uncore_irp_read_counter,
|
|
|
};
|
|
|
|
|
|
static struct intel_uncore_type hswep_uncore_irp = {
|