Lines Matching refs:hisi_pmu

45 	struct hisi_pmu *hisi_pmu = to_hisi_pmu(dev_get_drvdata(dev));
47 return sysfs_emit(buf, "%d\n", hisi_pmu->on_cpu);
54 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu);
81 return counters <= hisi_pmu->num_counters;
86 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu);
87 unsigned long *used_mask = hisi_pmu->pmu_events.used_mask;
88 u32 num_counters = hisi_pmu->num_counters;
105 struct hisi_pmu *hisi_pmu = to_hisi_pmu(dev_get_drvdata(dev));
107 return sysfs_emit(page, "0x%08x\n", hisi_pmu->identifier);
111 static void hisi_uncore_pmu_clear_event_idx(struct hisi_pmu *hisi_pmu, int idx)
113 clear_bit(idx, hisi_pmu->pmu_events.used_mask);
118 struct hisi_pmu *hisi_pmu = data;
123 overflown = hisi_pmu->ops->get_int_status(hisi_pmu);
131 for_each_set_bit(idx, &overflown, hisi_pmu->num_counters) {
133 hisi_pmu->ops->clear_int_status(hisi_pmu, idx);
135 event = hisi_pmu->pmu_events.hw_events[idx];
146 int hisi_uncore_pmu_init_irq(struct hisi_pmu *hisi_pmu,
157 dev_name(&pdev->dev), hisi_pmu);
164 hisi_pmu->irq = irq;
173 struct hisi_pmu *hisi_pmu;
200 hisi_pmu = to_hisi_pmu(event->pmu);
201 if (event->attr.config > hisi_pmu->check_event)
204 if (hisi_pmu->on_cpu == -1)
214 if (hisi_pmu->ops->check_filter && hisi_pmu->ops->check_filter(event))
218 event->cpu = hisi_pmu->on_cpu;
230 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu);
233 hisi_pmu->ops->write_evtype(hisi_pmu, hwc->idx,
236 if (hisi_pmu->ops->enable_filter)
237 hisi_pmu->ops->enable_filter(event);
239 hisi_pmu->ops->enable_counter_int(hisi_pmu, hwc);
240 hisi_pmu->ops->enable_counter(hisi_pmu, hwc);
248 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu);
251 hisi_pmu->ops->disable_counter(hisi_pmu, hwc);
252 hisi_pmu->ops->disable_counter_int(hisi_pmu, hwc);
254 if (hisi_pmu->ops->disable_filter)
255 hisi_pmu->ops->disable_filter(event);
260 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu);
270 u64 val = BIT_ULL(hisi_pmu->counter_bits - 1);
274 hisi_pmu->ops->write_counter(hisi_pmu, hwc, val);
280 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu);
286 new_raw_count = hisi_pmu->ops->read_counter(hisi_pmu, hwc);
294 HISI_MAX_PERIOD(hisi_pmu->counter_bits);
301 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu);
314 hisi_pmu->ops->write_counter(hisi_pmu, hwc, prev_raw_count);
341 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu);
348 idx = hisi_pmu->ops->get_event_idx(event);
353 hisi_pmu->pmu_events.hw_events[idx] = event;
364 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu);
368 hisi_uncore_pmu_clear_event_idx(hisi_pmu, hwc->idx);
370 hisi_pmu->pmu_events.hw_events[hwc->idx] = NULL;
383 struct hisi_pmu *hisi_pmu = to_hisi_pmu(pmu);
384 bool enabled = !bitmap_empty(hisi_pmu->pmu_events.used_mask,
385 hisi_pmu->num_counters);
390 hisi_pmu->ops->start_counters(hisi_pmu);
396 struct hisi_pmu *hisi_pmu = to_hisi_pmu(pmu);
398 hisi_pmu->ops->stop_counters(hisi_pmu);
445 static bool hisi_pmu_cpu_is_associated_pmu(struct hisi_pmu *hisi_pmu)
450 if (hisi_pmu->sccl_id == -1)
453 if (hisi_pmu->ccl_id == -1) {
457 return sccl_id == hisi_pmu->sccl_id;
462 return sccl_id == hisi_pmu->sccl_id && ccl_id == hisi_pmu->ccl_id;
467 struct hisi_pmu *hisi_pmu = hlist_entry_safe(node, struct hisi_pmu,
470 if (!hisi_pmu_cpu_is_associated_pmu(hisi_pmu))
473 cpumask_set_cpu(cpu, &hisi_pmu->associated_cpus);
476 if (hisi_pmu->on_cpu != -1)
480 hisi_pmu->on_cpu = cpu;
483 WARN_ON(irq_set_affinity(hisi_pmu->irq, cpumask_of(cpu)));
491 struct hisi_pmu *hisi_pmu = hlist_entry_safe(node, struct hisi_pmu,
495 if (!cpumask_test_and_clear_cpu(cpu, &hisi_pmu->associated_cpus))
499 if (hisi_pmu->on_cpu != cpu)
503 hisi_pmu->on_cpu = -1;
506 target = cpumask_any_and_but(&hisi_pmu->associated_cpus,
511 perf_pmu_migrate_context(&hisi_pmu->pmu, cpu, target);
513 hisi_pmu->on_cpu = target;
514 WARN_ON(irq_set_affinity(hisi_pmu->irq, cpumask_of(target)));
520 void hisi_pmu_init(struct hisi_pmu *hisi_pmu, struct module *module)
522 struct pmu *pmu = &hisi_pmu->pmu;
525 pmu->parent = hisi_pmu->dev;
535 pmu->attr_groups = hisi_pmu->pmu_events.attr_groups;