Lines Matching refs:event

212 GEN_PMU_FORMAT_ATTR(event);
251 unsigned int dmc620_event_to_counter_control(struct perf_event *event) in dmc620_event_to_counter_control() argument
253 struct perf_event_attr *attr = &event->attr; in dmc620_event_to_counter_control()
259 ATTR_CFG_GET_FLD(attr, event)); in dmc620_event_to_counter_control()
266 static int dmc620_get_event_idx(struct perf_event *event) in dmc620_get_event_idx() argument
268 struct dmc620_pmu *dmc620_pmu = to_dmc620_pmu(event->pmu); in dmc620_get_event_idx()
271 if (ATTR_CFG_GET_FLD(&event->attr, clkdiv2)) { in dmc620_get_event_idx()
289 u64 dmc620_pmu_read_counter(struct perf_event *event) in dmc620_pmu_read_counter() argument
291 struct dmc620_pmu *dmc620_pmu = to_dmc620_pmu(event->pmu); in dmc620_pmu_read_counter()
294 event->hw.idx, DMC620_PMU_COUNTERn_VALUE); in dmc620_pmu_read_counter()
297 static void dmc620_pmu_event_update(struct perf_event *event) in dmc620_pmu_event_update() argument
299 struct hw_perf_event *hwc = &event->hw; in dmc620_pmu_event_update()
305 new_count = dmc620_pmu_read_counter(event); in dmc620_pmu_event_update()
309 local64_add(delta, &event->count); in dmc620_pmu_event_update()
312 static void dmc620_pmu_event_set_period(struct perf_event *event) in dmc620_pmu_event_set_period() argument
314 struct dmc620_pmu *dmc620_pmu = to_dmc620_pmu(event->pmu); in dmc620_pmu_event_set_period()
316 local64_set(&event->hw.prev_count, DMC620_CNT_INIT); in dmc620_pmu_event_set_period()
318 event->hw.idx, DMC620_PMU_COUNTERn_VALUE, DMC620_CNT_INIT); in dmc620_pmu_event_set_period()
321 static void dmc620_pmu_enable_counter(struct perf_event *event) in dmc620_pmu_enable_counter() argument
323 struct dmc620_pmu *dmc620_pmu = to_dmc620_pmu(event->pmu); in dmc620_pmu_enable_counter()
326 reg = dmc620_event_to_counter_control(event) | DMC620_PMU_COUNTERn_CONTROL_ENABLE; in dmc620_pmu_enable_counter()
328 event->hw.idx, DMC620_PMU_COUNTERn_CONTROL, reg); in dmc620_pmu_enable_counter()
331 static void dmc620_pmu_disable_counter(struct perf_event *event) in dmc620_pmu_disable_counter() argument
333 struct dmc620_pmu *dmc620_pmu = to_dmc620_pmu(event->pmu); in dmc620_pmu_disable_counter()
336 event->hw.idx, DMC620_PMU_COUNTERn_CONTROL, 0); in dmc620_pmu_disable_counter()
348 struct perf_event *event; in dmc620_pmu_handle_irq() local
357 event = dmc620_pmu->events[idx]; in dmc620_pmu_handle_irq()
358 if (!event) in dmc620_pmu_handle_irq()
360 dmc620_pmu_disable_counter(event); in dmc620_pmu_handle_irq()
369 event = dmc620_pmu->events[idx]; in dmc620_pmu_handle_irq()
370 if (WARN_ON_ONCE(!event)) in dmc620_pmu_handle_irq()
372 dmc620_pmu_event_update(event); in dmc620_pmu_handle_irq()
373 dmc620_pmu_event_set_period(event); in dmc620_pmu_handle_irq()
385 event = dmc620_pmu->events[idx]; in dmc620_pmu_handle_irq()
386 if (!event) in dmc620_pmu_handle_irq()
388 if (!(event->hw.state & PERF_HES_STOPPED)) in dmc620_pmu_handle_irq()
389 dmc620_pmu_enable_counter(event); in dmc620_pmu_handle_irq()
483 static int dmc620_pmu_event_init(struct perf_event *event) in dmc620_pmu_event_init() argument
485 struct dmc620_pmu *dmc620_pmu = to_dmc620_pmu(event->pmu); in dmc620_pmu_event_init()
486 struct hw_perf_event *hwc = &event->hw; in dmc620_pmu_event_init()
489 if (event->attr.type != event->pmu->type) in dmc620_pmu_event_init()
496 if (is_sampling_event(event) || in dmc620_pmu_event_init()
497 event->attach_state & PERF_ATTACH_TASK) { in dmc620_pmu_event_init()
512 event->cpu = dmc620_pmu->irq->cpu; in dmc620_pmu_event_init()
513 if (event->cpu < 0) in dmc620_pmu_event_init()
520 if (event->group_leader != event && in dmc620_pmu_event_init()
521 !is_software_event(event->group_leader)) in dmc620_pmu_event_init()
524 for_each_sibling_event(sibling, event->group_leader) { in dmc620_pmu_event_init()
525 if (sibling != event && in dmc620_pmu_event_init()
534 static void dmc620_pmu_read(struct perf_event *event) in dmc620_pmu_read() argument
536 dmc620_pmu_event_update(event); in dmc620_pmu_read()
539 static void dmc620_pmu_start(struct perf_event *event, int flags) in dmc620_pmu_start() argument
541 event->hw.state = 0; in dmc620_pmu_start()
542 dmc620_pmu_event_set_period(event); in dmc620_pmu_start()
543 dmc620_pmu_enable_counter(event); in dmc620_pmu_start()
546 static void dmc620_pmu_stop(struct perf_event *event, int flags) in dmc620_pmu_stop() argument
548 if (event->hw.state & PERF_HES_STOPPED) in dmc620_pmu_stop()
551 dmc620_pmu_disable_counter(event); in dmc620_pmu_stop()
552 dmc620_pmu_event_update(event); in dmc620_pmu_stop()
553 event->hw.state |= PERF_HES_STOPPED | PERF_HES_UPTODATE; in dmc620_pmu_stop()
556 static int dmc620_pmu_add(struct perf_event *event, int flags) in dmc620_pmu_add() argument
558 struct dmc620_pmu *dmc620_pmu = to_dmc620_pmu(event->pmu); in dmc620_pmu_add()
559 struct perf_event_attr *attr = &event->attr; in dmc620_pmu_add()
560 struct hw_perf_event *hwc = &event->hw; in dmc620_pmu_add()
564 idx = dmc620_get_event_idx(event); in dmc620_pmu_add()
569 dmc620_pmu->events[idx] = event; in dmc620_pmu_add()
585 dmc620_pmu_start(event, PERF_EF_RELOAD); in dmc620_pmu_add()
587 perf_event_update_userpage(event); in dmc620_pmu_add()
591 static void dmc620_pmu_del(struct perf_event *event, int flags) in dmc620_pmu_del() argument
593 struct dmc620_pmu *dmc620_pmu = to_dmc620_pmu(event->pmu); in dmc620_pmu_del()
594 struct hw_perf_event *hwc = &event->hw; in dmc620_pmu_del()
597 dmc620_pmu_stop(event, PERF_EF_UPDATE); in dmc620_pmu_del()
600 perf_event_update_userpage(event); in dmc620_pmu_del()