Lines Matching refs:pmu_mmdc
126 struct mmdc_pmu *pmu_mmdc = dev_get_drvdata(dev); in mmdc_pmu_cpumask_show() local
128 return cpumap_print_to_pagebuf(true, buf, &pmu_mmdc->cpu); in mmdc_pmu_cpumask_show()
183 static u32 mmdc_pmu_read_counter(struct mmdc_pmu *pmu_mmdc, int cfg) in mmdc_pmu_read_counter() argument
187 mmdc_base = pmu_mmdc->mmdc_base; in mmdc_pmu_read_counter()
217 struct mmdc_pmu *pmu_mmdc = hlist_entry_safe(node, struct mmdc_pmu, node); in mmdc_pmu_offline_cpu() local
220 if (!cpumask_test_and_clear_cpu(cpu, &pmu_mmdc->cpu)) in mmdc_pmu_offline_cpu()
227 perf_pmu_migrate_context(&pmu_mmdc->pmu, cpu, target); in mmdc_pmu_offline_cpu()
228 cpumask_set_cpu(target, &pmu_mmdc->cpu); in mmdc_pmu_offline_cpu()
278 struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); in mmdc_pmu_event_init() local
288 dev_warn(pmu_mmdc->dev, "Can't provide per-task data!\n"); in mmdc_pmu_event_init()
301 event->cpu = cpumask_first(&pmu_mmdc->cpu); in mmdc_pmu_event_init()
307 struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); in mmdc_pmu_event_update() local
313 new_raw_count = mmdc_pmu_read_counter(pmu_mmdc, in mmdc_pmu_event_update()
325 struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); in mmdc_pmu_event_start() local
330 mmdc_base = pmu_mmdc->mmdc_base; in mmdc_pmu_event_start()
337 hrtimer_start(&pmu_mmdc->hrtimer, mmdc_pmu_timer_period(), in mmdc_pmu_event_start()
353 if (pmu_mmdc->devtype_data->flags & MMDC_FLAG_PROFILE_SEL) in mmdc_pmu_event_start()
361 struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); in mmdc_pmu_event_add() local
369 if (pmu_mmdc->mmdc_events[cfg] != NULL) in mmdc_pmu_event_add()
372 pmu_mmdc->mmdc_events[cfg] = event; in mmdc_pmu_event_add()
373 pmu_mmdc->active_events++; in mmdc_pmu_event_add()
375 local64_set(&hwc->prev_count, mmdc_pmu_read_counter(pmu_mmdc, cfg)); in mmdc_pmu_event_add()
382 struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); in mmdc_pmu_event_stop() local
385 mmdc_base = pmu_mmdc->mmdc_base; in mmdc_pmu_event_stop()
398 struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); in mmdc_pmu_event_del() local
401 pmu_mmdc->mmdc_events[cfg] = NULL; in mmdc_pmu_event_del()
402 pmu_mmdc->active_events--; in mmdc_pmu_event_del()
404 if (pmu_mmdc->active_events == 0) in mmdc_pmu_event_del()
405 hrtimer_cancel(&pmu_mmdc->hrtimer); in mmdc_pmu_event_del()
410 static void mmdc_pmu_overflow_handler(struct mmdc_pmu *pmu_mmdc) in mmdc_pmu_overflow_handler() argument
415 struct perf_event *event = pmu_mmdc->mmdc_events[i]; in mmdc_pmu_overflow_handler()
424 struct mmdc_pmu *pmu_mmdc = container_of(hrtimer, struct mmdc_pmu, in mmdc_pmu_timer_handler() local
427 mmdc_pmu_overflow_handler(pmu_mmdc); in mmdc_pmu_timer_handler()
433 static int mmdc_pmu_init(struct mmdc_pmu *pmu_mmdc, in mmdc_pmu_init() argument
438 *pmu_mmdc = (struct mmdc_pmu) { in mmdc_pmu_init()
462 struct mmdc_pmu *pmu_mmdc = platform_get_drvdata(pdev); in imx_mmdc_remove() local
464 cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node); in imx_mmdc_remove()
465 perf_pmu_unregister(&pmu_mmdc->pmu); in imx_mmdc_remove()
466 iounmap(pmu_mmdc->mmdc_base); in imx_mmdc_remove()
467 clk_disable_unprepare(pmu_mmdc->mmdc_ipg_clk); in imx_mmdc_remove()
468 kfree(pmu_mmdc); in imx_mmdc_remove()
475 struct mmdc_pmu *pmu_mmdc; in imx_mmdc_perf_init() local
482 pmu_mmdc = kzalloc(sizeof(*pmu_mmdc), GFP_KERNEL); in imx_mmdc_perf_init()
483 if (!pmu_mmdc) { in imx_mmdc_perf_init()
500 mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev); in imx_mmdc_perf_init()
501 pmu_mmdc->mmdc_ipg_clk = mmdc_ipg_clk; in imx_mmdc_perf_init()
508 pmu_mmdc->devtype_data = (struct fsl_mmdc_devtype_data *)of_id->data; in imx_mmdc_perf_init()
510 hrtimer_init(&pmu_mmdc->hrtimer, CLOCK_MONOTONIC, in imx_mmdc_perf_init()
512 pmu_mmdc->hrtimer.function = mmdc_pmu_timer_handler; in imx_mmdc_perf_init()
514 cpumask_set_cpu(raw_smp_processor_id(), &pmu_mmdc->cpu); in imx_mmdc_perf_init()
517 cpuhp_state_add_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node); in imx_mmdc_perf_init()
519 ret = perf_pmu_register(&(pmu_mmdc->pmu), name, -1); in imx_mmdc_perf_init()
523 platform_set_drvdata(pdev, pmu_mmdc); in imx_mmdc_perf_init()
528 cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node); in imx_mmdc_perf_init()
529 hrtimer_cancel(&pmu_mmdc->hrtimer); in imx_mmdc_perf_init()
531 kfree(pmu_mmdc); in imx_mmdc_perf_init()