Lines Matching refs:hisi_pmu

59 	struct hisi_pmu *hisi_pmu = to_hisi_pmu(dev_get_drvdata(dev));  in hisi_cpumask_sysfs_show()  local
61 return sysfs_emit(buf, "%d\n", hisi_pmu->on_cpu); in hisi_cpumask_sysfs_show()
68 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu); in hisi_validate_event_group() local
95 return counters <= hisi_pmu->num_counters; in hisi_validate_event_group()
100 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu); in hisi_uncore_pmu_get_event_idx() local
101 unsigned long *used_mask = hisi_pmu->pmu_events.used_mask; in hisi_uncore_pmu_get_event_idx()
102 u32 num_counters = hisi_pmu->num_counters; in hisi_uncore_pmu_get_event_idx()
119 struct hisi_pmu *hisi_pmu = to_hisi_pmu(dev_get_drvdata(dev)); in hisi_uncore_pmu_identifier_attr_show() local
121 return sysfs_emit(page, "0x%08x\n", hisi_pmu->identifier); in hisi_uncore_pmu_identifier_attr_show()
125 static void hisi_uncore_pmu_clear_event_idx(struct hisi_pmu *hisi_pmu, int idx) in hisi_uncore_pmu_clear_event_idx() argument
127 clear_bit(idx, hisi_pmu->pmu_events.used_mask); in hisi_uncore_pmu_clear_event_idx()
132 struct hisi_pmu *hisi_pmu = data; in hisi_uncore_pmu_isr() local
137 overflown = hisi_pmu->ops->get_int_status(hisi_pmu); in hisi_uncore_pmu_isr()
145 for_each_set_bit(idx, &overflown, hisi_pmu->num_counters) { in hisi_uncore_pmu_isr()
147 hisi_pmu->ops->clear_int_status(hisi_pmu, idx); in hisi_uncore_pmu_isr()
149 event = hisi_pmu->pmu_events.hw_events[idx]; in hisi_uncore_pmu_isr()
160 int hisi_uncore_pmu_init_irq(struct hisi_pmu *hisi_pmu, in hisi_uncore_pmu_init_irq() argument
171 dev_name(&pdev->dev), hisi_pmu); in hisi_uncore_pmu_init_irq()
178 hisi_pmu->irq = irq; in hisi_uncore_pmu_init_irq()
187 struct hisi_pmu *hisi_pmu; in hisi_uncore_pmu_event_init() local
214 hisi_pmu = to_hisi_pmu(event->pmu); in hisi_uncore_pmu_event_init()
215 if (event->attr.config > hisi_pmu->check_event) in hisi_uncore_pmu_event_init()
218 if (hisi_pmu->on_cpu == -1) in hisi_uncore_pmu_event_init()
228 if (hisi_pmu->ops->check_filter && hisi_pmu->ops->check_filter(event)) in hisi_uncore_pmu_event_init()
232 event->cpu = hisi_pmu->on_cpu; in hisi_uncore_pmu_event_init()
244 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu); in hisi_uncore_pmu_enable_event() local
247 hisi_pmu->ops->write_evtype(hisi_pmu, hwc->idx, in hisi_uncore_pmu_enable_event()
250 if (hisi_pmu->ops->enable_filter) in hisi_uncore_pmu_enable_event()
251 hisi_pmu->ops->enable_filter(event); in hisi_uncore_pmu_enable_event()
253 hisi_pmu->ops->enable_counter_int(hisi_pmu, hwc); in hisi_uncore_pmu_enable_event()
254 hisi_pmu->ops->enable_counter(hisi_pmu, hwc); in hisi_uncore_pmu_enable_event()
262 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu); in hisi_uncore_pmu_disable_event() local
265 hisi_pmu->ops->disable_counter(hisi_pmu, hwc); in hisi_uncore_pmu_disable_event()
266 hisi_pmu->ops->disable_counter_int(hisi_pmu, hwc); in hisi_uncore_pmu_disable_event()
268 if (hisi_pmu->ops->disable_filter) in hisi_uncore_pmu_disable_event()
269 hisi_pmu->ops->disable_filter(event); in hisi_uncore_pmu_disable_event()
274 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu); in hisi_uncore_pmu_set_event_period() local
284 u64 val = BIT_ULL(hisi_pmu->counter_bits - 1); in hisi_uncore_pmu_set_event_period()
288 hisi_pmu->ops->write_counter(hisi_pmu, hwc, val); in hisi_uncore_pmu_set_event_period()
294 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu); in hisi_uncore_pmu_event_update() local
300 new_raw_count = hisi_pmu->ops->read_counter(hisi_pmu, hwc); in hisi_uncore_pmu_event_update()
308 HISI_MAX_PERIOD(hisi_pmu->counter_bits); in hisi_uncore_pmu_event_update()
315 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu); in hisi_uncore_pmu_start() local
328 hisi_pmu->ops->write_counter(hisi_pmu, hwc, prev_raw_count); in hisi_uncore_pmu_start()
355 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu); in hisi_uncore_pmu_add() local
362 idx = hisi_pmu->ops->get_event_idx(event); in hisi_uncore_pmu_add()
367 hisi_pmu->pmu_events.hw_events[idx] = event; in hisi_uncore_pmu_add()
378 struct hisi_pmu *hisi_pmu = to_hisi_pmu(event->pmu); in hisi_uncore_pmu_del() local
382 hisi_uncore_pmu_clear_event_idx(hisi_pmu, hwc->idx); in hisi_uncore_pmu_del()
384 hisi_pmu->pmu_events.hw_events[hwc->idx] = NULL; in hisi_uncore_pmu_del()
397 struct hisi_pmu *hisi_pmu = to_hisi_pmu(pmu); in hisi_uncore_pmu_enable() local
398 bool enabled = !bitmap_empty(hisi_pmu->pmu_events.used_mask, in hisi_uncore_pmu_enable()
399 hisi_pmu->num_counters); in hisi_uncore_pmu_enable()
404 hisi_pmu->ops->start_counters(hisi_pmu); in hisi_uncore_pmu_enable()
410 struct hisi_pmu *hisi_pmu = to_hisi_pmu(pmu); in hisi_uncore_pmu_disable() local
412 hisi_pmu->ops->stop_counters(hisi_pmu); in hisi_uncore_pmu_disable()
459 static bool hisi_pmu_cpu_is_associated_pmu(struct hisi_pmu *hisi_pmu) in hisi_pmu_cpu_is_associated_pmu() argument
464 if (hisi_pmu->sccl_id == -1) in hisi_pmu_cpu_is_associated_pmu()
467 if (hisi_pmu->ccl_id == -1) { in hisi_pmu_cpu_is_associated_pmu()
471 return sccl_id == hisi_pmu->sccl_id; in hisi_pmu_cpu_is_associated_pmu()
476 return sccl_id == hisi_pmu->sccl_id && ccl_id == hisi_pmu->ccl_id; in hisi_pmu_cpu_is_associated_pmu()
481 struct hisi_pmu *hisi_pmu = hlist_entry_safe(node, struct hisi_pmu, in hisi_uncore_pmu_online_cpu() local
484 if (!hisi_pmu_cpu_is_associated_pmu(hisi_pmu)) in hisi_uncore_pmu_online_cpu()
487 cpumask_set_cpu(cpu, &hisi_pmu->associated_cpus); in hisi_uncore_pmu_online_cpu()
490 if (hisi_pmu->on_cpu != -1) in hisi_uncore_pmu_online_cpu()
494 hisi_pmu->on_cpu = cpu; in hisi_uncore_pmu_online_cpu()
497 WARN_ON(irq_set_affinity(hisi_pmu->irq, cpumask_of(cpu))); in hisi_uncore_pmu_online_cpu()
505 struct hisi_pmu *hisi_pmu = hlist_entry_safe(node, struct hisi_pmu, in hisi_uncore_pmu_offline_cpu() local
510 if (!cpumask_test_and_clear_cpu(cpu, &hisi_pmu->associated_cpus)) in hisi_uncore_pmu_offline_cpu()
514 if (hisi_pmu->on_cpu != cpu) in hisi_uncore_pmu_offline_cpu()
518 hisi_pmu->on_cpu = -1; in hisi_uncore_pmu_offline_cpu()
521 cpumask_and(&pmu_online_cpus, &hisi_pmu->associated_cpus, in hisi_uncore_pmu_offline_cpu()
527 perf_pmu_migrate_context(&hisi_pmu->pmu, cpu, target); in hisi_uncore_pmu_offline_cpu()
529 hisi_pmu->on_cpu = target; in hisi_uncore_pmu_offline_cpu()
530 WARN_ON(irq_set_affinity(hisi_pmu->irq, cpumask_of(target))); in hisi_uncore_pmu_offline_cpu()
536 void hisi_pmu_init(struct hisi_pmu *hisi_pmu, struct module *module) in hisi_pmu_init() argument
538 struct pmu *pmu = &hisi_pmu->pmu; in hisi_pmu_init()
550 pmu->attr_groups = hisi_pmu->pmu_events.attr_groups; in hisi_pmu_init()