Lines Matching refs:pcie_pmu

133 	struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(dev_get_drvdata(dev));  in cpumask_show()  local
135 return cpumap_print_to_pagebuf(true, buf, cpumask_of(pcie_pmu->on_cpu)); in cpumask_show()
141 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(dev_get_drvdata(dev)); in identifier_show() local
143 return sysfs_emit(buf, "%#x\n", pcie_pmu->identifier); in identifier_show()
149 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(dev_get_drvdata(dev)); in bus_show() local
151 return sysfs_emit(buf, "%#04x\n", PCI_BUS_NUM(pcie_pmu->bdf_min)); in bus_show()
156 hisi_pcie_parse_reg_value(struct hisi_pcie_pmu *pcie_pmu, u32 reg_off) in hisi_pcie_parse_reg_value() argument
158 u32 val = readl_relaxed(pcie_pmu->base + reg_off); in hisi_pcie_parse_reg_value()
190 static u32 hisi_pcie_pmu_readl(struct hisi_pcie_pmu *pcie_pmu, u32 reg_offset, in hisi_pcie_pmu_readl() argument
195 return readl_relaxed(pcie_pmu->base + offset); in hisi_pcie_pmu_readl()
198 static void hisi_pcie_pmu_writel(struct hisi_pcie_pmu *pcie_pmu, u32 reg_offset, u32 idx, u32 val) in hisi_pcie_pmu_writel() argument
202 writel_relaxed(val, pcie_pmu->base + offset); in hisi_pcie_pmu_writel()
205 static u64 hisi_pcie_pmu_readq(struct hisi_pcie_pmu *pcie_pmu, u32 reg_offset, u32 idx) in hisi_pcie_pmu_readq() argument
209 return readq_relaxed(pcie_pmu->base + offset); in hisi_pcie_pmu_readq()
212 static void hisi_pcie_pmu_writeq(struct hisi_pcie_pmu *pcie_pmu, u32 reg_offset, u32 idx, u64 val) in hisi_pcie_pmu_writeq() argument
216 writeq_relaxed(val, pcie_pmu->base + offset); in hisi_pcie_pmu_writeq()
221 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); in hisi_pcie_pmu_config_filter() local
259 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, hwc->idx, reg); in hisi_pcie_pmu_config_filter()
264 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); in hisi_pcie_pmu_clear_filter() local
267 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, hwc->idx, HISI_PCIE_INIT_SET); in hisi_pcie_pmu_clear_filter()
270 static bool hisi_pcie_pmu_valid_requester_id(struct hisi_pcie_pmu *pcie_pmu, u32 bdf) in hisi_pcie_pmu_valid_requester_id() argument
275 pdev = pci_get_domain_bus_and_slot(pci_domain_nr(pcie_pmu->pdev->bus), PCI_BUS_NUM(bdf), in hisi_pcie_pmu_valid_requester_id()
288 return rp_bdf >= pcie_pmu->bdf_min && rp_bdf <= pcie_pmu->bdf_max; in hisi_pcie_pmu_valid_requester_id()
292 struct hisi_pcie_pmu *pcie_pmu) in hisi_pcie_pmu_valid_filter() argument
303 if (!hisi_pcie_pmu_valid_requester_id(pcie_pmu, requester_id)) in hisi_pcie_pmu_valid_filter()
365 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); in hisi_pcie_pmu_event_init() local
372 event->cpu = pcie_pmu->on_cpu; in hisi_pcie_pmu_event_init()
383 if (!hisi_pcie_pmu_valid_filter(event, pcie_pmu)) in hisi_pcie_pmu_event_init()
394 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); in hisi_pcie_pmu_read_counter() local
397 return hisi_pcie_pmu_readq(pcie_pmu, event->hw.event_base, idx); in hisi_pcie_pmu_read_counter()
400 static int hisi_pcie_pmu_find_related_event(struct hisi_pcie_pmu *pcie_pmu, in hisi_pcie_pmu_find_related_event() argument
407 sibling = pcie_pmu->hw_events[idx]; in hisi_pcie_pmu_find_related_event()
424 static int hisi_pcie_pmu_get_event_idx(struct hisi_pcie_pmu *pcie_pmu) in hisi_pcie_pmu_get_event_idx() argument
429 if (!pcie_pmu->hw_events[idx]) in hisi_pcie_pmu_get_event_idx()
458 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); in hisi_pcie_pmu_set_period() local
466 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_CNT, idx, HISI_PCIE_INIT_VAL); in hisi_pcie_pmu_set_period()
467 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EXT_CNT, idx, HISI_PCIE_INIT_VAL); in hisi_pcie_pmu_set_period()
481 static void hisi_pcie_pmu_enable_counter(struct hisi_pcie_pmu *pcie_pmu, struct hw_perf_event *hwc) in hisi_pcie_pmu_enable_counter() argument
486 val = hisi_pcie_pmu_readq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx); in hisi_pcie_pmu_enable_counter()
488 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx, val); in hisi_pcie_pmu_enable_counter()
491 static void hisi_pcie_pmu_disable_counter(struct hisi_pcie_pmu *pcie_pmu, struct hw_perf_event *hwc) in hisi_pcie_pmu_disable_counter() argument
496 val = hisi_pcie_pmu_readq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx); in hisi_pcie_pmu_disable_counter()
498 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx, val); in hisi_pcie_pmu_disable_counter()
501 static void hisi_pcie_pmu_enable_int(struct hisi_pcie_pmu *pcie_pmu, struct hw_perf_event *hwc) in hisi_pcie_pmu_enable_int() argument
505 hisi_pcie_pmu_writel(pcie_pmu, HISI_PCIE_INT_MASK, idx, 0); in hisi_pcie_pmu_enable_int()
508 static void hisi_pcie_pmu_disable_int(struct hisi_pcie_pmu *pcie_pmu, struct hw_perf_event *hwc) in hisi_pcie_pmu_disable_int() argument
512 hisi_pcie_pmu_writel(pcie_pmu, HISI_PCIE_INT_MASK, idx, 1); in hisi_pcie_pmu_disable_int()
515 static void hisi_pcie_pmu_reset_counter(struct hisi_pcie_pmu *pcie_pmu, int idx) in hisi_pcie_pmu_reset_counter() argument
517 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx, HISI_PCIE_RESET_CNT); in hisi_pcie_pmu_reset_counter()
518 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx, HISI_PCIE_INIT_SET); in hisi_pcie_pmu_reset_counter()
523 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); in hisi_pcie_pmu_start() local
535 hisi_pcie_pmu_enable_counter(pcie_pmu, hwc); in hisi_pcie_pmu_start()
536 hisi_pcie_pmu_enable_int(pcie_pmu, hwc); in hisi_pcie_pmu_start()
541 hisi_pcie_pmu_writeq(pcie_pmu, hwc->event_base, idx, prev_cnt); in hisi_pcie_pmu_start()
549 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); in hisi_pcie_pmu_stop() local
553 hisi_pcie_pmu_disable_int(pcie_pmu, hwc); in hisi_pcie_pmu_stop()
554 hisi_pcie_pmu_disable_counter(pcie_pmu, hwc); in hisi_pcie_pmu_stop()
567 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); in hisi_pcie_pmu_add() local
574 idx = hisi_pcie_pmu_find_related_event(pcie_pmu, event); in hisi_pcie_pmu_add()
584 idx = hisi_pcie_pmu_get_event_idx(pcie_pmu); in hisi_pcie_pmu_add()
589 pcie_pmu->hw_events[idx] = event; in hisi_pcie_pmu_add()
591 hisi_pcie_pmu_reset_counter(pcie_pmu, idx); in hisi_pcie_pmu_add()
602 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); in hisi_pcie_pmu_del() local
606 pcie_pmu->hw_events[hwc->idx] = NULL; in hisi_pcie_pmu_del()
612 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(pmu); in hisi_pcie_pmu_enable() local
616 if (pcie_pmu->hw_events[num]) in hisi_pcie_pmu_enable()
623 writel(HISI_PCIE_GLOBAL_EN, pcie_pmu->base + HISI_PCIE_GLOBAL_CTRL); in hisi_pcie_pmu_enable()
628 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(pmu); in hisi_pcie_pmu_disable() local
630 writel(HISI_PCIE_GLOBAL_NONE, pcie_pmu->base + HISI_PCIE_GLOBAL_CTRL); in hisi_pcie_pmu_disable()
635 struct hisi_pcie_pmu *pcie_pmu = data; in hisi_pcie_pmu_irq() local
642 overflown = hisi_pcie_pmu_readl(pcie_pmu, HISI_PCIE_INT_STAT, idx); in hisi_pcie_pmu_irq()
647 hisi_pcie_pmu_writel(pcie_pmu, HISI_PCIE_INT_STAT, idx, 1); in hisi_pcie_pmu_irq()
648 event = pcie_pmu->hw_events[idx]; in hisi_pcie_pmu_irq()
660 static int hisi_pcie_pmu_irq_register(struct pci_dev *pdev, struct hisi_pcie_pmu *pcie_pmu) in hisi_pcie_pmu_irq_register() argument
672 pcie_pmu); in hisi_pcie_pmu_irq_register()
679 pcie_pmu->irq = irq; in hisi_pcie_pmu_irq_register()
684 static void hisi_pcie_pmu_irq_unregister(struct pci_dev *pdev, struct hisi_pcie_pmu *pcie_pmu) in hisi_pcie_pmu_irq_unregister() argument
686 free_irq(pcie_pmu->irq, pcie_pmu); in hisi_pcie_pmu_irq_unregister()
692 struct hisi_pcie_pmu *pcie_pmu = hlist_entry_safe(node, struct hisi_pcie_pmu, node); in hisi_pcie_pmu_online_cpu() local
694 if (pcie_pmu->on_cpu == -1) { in hisi_pcie_pmu_online_cpu()
695 pcie_pmu->on_cpu = cpumask_local_spread(0, dev_to_node(&pcie_pmu->pdev->dev)); in hisi_pcie_pmu_online_cpu()
696 WARN_ON(irq_set_affinity(pcie_pmu->irq, cpumask_of(pcie_pmu->on_cpu))); in hisi_pcie_pmu_online_cpu()
704 struct hisi_pcie_pmu *pcie_pmu = hlist_entry_safe(node, struct hisi_pcie_pmu, node); in hisi_pcie_pmu_offline_cpu() local
710 if (pcie_pmu->on_cpu != cpu) in hisi_pcie_pmu_offline_cpu()
713 pcie_pmu->on_cpu = -1; in hisi_pcie_pmu_offline_cpu()
716 numa_node = dev_to_node(&pcie_pmu->pdev->dev); in hisi_pcie_pmu_offline_cpu()
724 pci_err(pcie_pmu->pdev, "There is no CPU to set\n"); in hisi_pcie_pmu_offline_cpu()
728 perf_pmu_migrate_context(&pcie_pmu->pmu, cpu, target); in hisi_pcie_pmu_offline_cpu()
730 pcie_pmu->on_cpu = target; in hisi_pcie_pmu_offline_cpu()
731 WARN_ON(irq_set_affinity(pcie_pmu->irq, cpumask_of(target))); in hisi_pcie_pmu_offline_cpu()
808 static int hisi_pcie_alloc_pmu(struct pci_dev *pdev, struct hisi_pcie_pmu *pcie_pmu) in hisi_pcie_alloc_pmu() argument
814 regs = hisi_pcie_parse_reg_value(pcie_pmu, HISI_PCIE_REG_BDF); in hisi_pcie_alloc_pmu()
815 pcie_pmu->bdf_min = regs.lo; in hisi_pcie_alloc_pmu()
816 pcie_pmu->bdf_max = regs.hi; in hisi_pcie_alloc_pmu()
818 regs = hisi_pcie_parse_reg_value(pcie_pmu, HISI_PCIE_REG_INFO); in hisi_pcie_alloc_pmu()
826 pcie_pmu->pdev = pdev; in hisi_pcie_alloc_pmu()
827 pcie_pmu->on_cpu = -1; in hisi_pcie_alloc_pmu()
828 pcie_pmu->identifier = readl(pcie_pmu->base + HISI_PCIE_REG_VERSION); in hisi_pcie_alloc_pmu()
829 pcie_pmu->pmu = (struct pmu) { in hisi_pcie_alloc_pmu()
848 static int hisi_pcie_init_pmu(struct pci_dev *pdev, struct hisi_pcie_pmu *pcie_pmu) in hisi_pcie_init_pmu() argument
852 pcie_pmu->base = pci_ioremap_bar(pdev, 2); in hisi_pcie_init_pmu()
853 if (!pcie_pmu->base) { in hisi_pcie_init_pmu()
858 ret = hisi_pcie_alloc_pmu(pdev, pcie_pmu); in hisi_pcie_init_pmu()
862 ret = hisi_pcie_pmu_irq_register(pdev, pcie_pmu); in hisi_pcie_init_pmu()
866 ret = cpuhp_state_add_instance(CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE, &pcie_pmu->node); in hisi_pcie_init_pmu()
872 ret = perf_pmu_register(&pcie_pmu->pmu, pcie_pmu->pmu.name, -1); in hisi_pcie_init_pmu()
882 CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE, &pcie_pmu->node); in hisi_pcie_init_pmu()
885 hisi_pcie_pmu_irq_unregister(pdev, pcie_pmu); in hisi_pcie_init_pmu()
888 iounmap(pcie_pmu->base); in hisi_pcie_init_pmu()
895 struct hisi_pcie_pmu *pcie_pmu = pci_get_drvdata(pdev); in hisi_pcie_uninit_pmu() local
897 perf_pmu_unregister(&pcie_pmu->pmu); in hisi_pcie_uninit_pmu()
899 CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE, &pcie_pmu->node); in hisi_pcie_uninit_pmu()
900 hisi_pcie_pmu_irq_unregister(pdev, pcie_pmu); in hisi_pcie_uninit_pmu()
901 iounmap(pcie_pmu->base); in hisi_pcie_uninit_pmu()
927 struct hisi_pcie_pmu *pcie_pmu; in hisi_pcie_pmu_probe() local
930 pcie_pmu = devm_kzalloc(&pdev->dev, sizeof(*pcie_pmu), GFP_KERNEL); in hisi_pcie_pmu_probe()
931 if (!pcie_pmu) in hisi_pcie_pmu_probe()
938 ret = hisi_pcie_init_pmu(pdev, pcie_pmu); in hisi_pcie_pmu_probe()
942 pci_set_drvdata(pdev, pcie_pmu); in hisi_pcie_pmu_probe()