Lines Matching refs:idxd

126 	struct idxd_device *idxd = idxd_pmu->idxd;  in perfmon_assign_hw_event()  local
130 hwc->config_base = ioread64(CNTRCFG_REG(idxd, idx)); in perfmon_assign_hw_event()
131 hwc->event_base = ioread64(CNTRCFG_REG(idxd, idx)); in perfmon_assign_hw_event()
200 struct idxd_device *idxd; in perfmon_pmu_event_init() local
203 idxd = event_to_idxd(event); in perfmon_pmu_event_init()
216 if (event->pmu != &idxd->idxd_pmu->pmu) in perfmon_pmu_event_init()
219 event->hw.event_base = ioread64(PERFMON_TABLE_OFFSET(idxd)); in perfmon_pmu_event_init()
220 event->cpu = idxd->idxd_pmu->cpu; in perfmon_pmu_event_init()
225 ret = perfmon_validate_group(idxd->idxd_pmu, event); in perfmon_pmu_event_init()
233 struct idxd_device *idxd; in perfmon_pmu_read_counter() local
236 idxd = event_to_idxd(event); in perfmon_pmu_read_counter()
238 return ioread64(CNTRDATA_REG(idxd, cntr)); in perfmon_pmu_read_counter()
243 struct idxd_device *idxd = event_to_idxd(event); in perfmon_pmu_event_update() local
245 int shift = 64 - idxd->idxd_pmu->counter_width; in perfmon_pmu_event_update()
262 void perfmon_counter_overflow(struct idxd_device *idxd) in perfmon_counter_overflow() argument
268 n_counters = min(idxd->idxd_pmu->n_counters, OVERFLOW_SIZE); in perfmon_counter_overflow()
270 ovfstatus = ioread32(OVFSTATUS_REG(idxd)); in perfmon_counter_overflow()
286 event = idxd->idxd_pmu->event_list[i]; in perfmon_counter_overflow()
290 iowrite32(ovfstatus_clear, OVFSTATUS_REG(idxd)); in perfmon_counter_overflow()
293 ovfstatus = ioread32(OVFSTATUS_REG(idxd)); in perfmon_counter_overflow()
303 static inline void perfmon_reset_config(struct idxd_device *idxd) in perfmon_reset_config() argument
305 iowrite32(CONFIG_RESET, PERFRST_REG(idxd)); in perfmon_reset_config()
306 iowrite32(0, OVFSTATUS_REG(idxd)); in perfmon_reset_config()
307 iowrite32(0, PERFFRZ_REG(idxd)); in perfmon_reset_config()
310 static inline void perfmon_reset_counters(struct idxd_device *idxd) in perfmon_reset_counters() argument
312 iowrite32(CNTR_RESET, PERFRST_REG(idxd)); in perfmon_reset_counters()
315 static inline void perfmon_reset(struct idxd_device *idxd) in perfmon_reset() argument
317 perfmon_reset_config(idxd); in perfmon_reset()
318 perfmon_reset_counters(idxd); in perfmon_reset()
328 struct idxd_device *idxd; in perfmon_pmu_event_start() local
331 idxd = event_to_idxd(event); in perfmon_pmu_event_start()
349 if (flt_wq && test_bit(FLT_WQ, &idxd->idxd_pmu->supported_filters)) in perfmon_pmu_event_start()
350 iowrite32(flt_wq, FLTCFG_REG(idxd, cntr, FLT_WQ)); in perfmon_pmu_event_start()
351 if (flt_tc && test_bit(FLT_TC, &idxd->idxd_pmu->supported_filters)) in perfmon_pmu_event_start()
352 iowrite32(flt_tc, FLTCFG_REG(idxd, cntr, FLT_TC)); in perfmon_pmu_event_start()
353 if (flt_pg_sz && test_bit(FLT_PG_SZ, &idxd->idxd_pmu->supported_filters)) in perfmon_pmu_event_start()
354 iowrite32(flt_pg_sz, FLTCFG_REG(idxd, cntr, FLT_PG_SZ)); in perfmon_pmu_event_start()
355 if (flt_xfer_sz && test_bit(FLT_XFER_SZ, &idxd->idxd_pmu->supported_filters)) in perfmon_pmu_event_start()
356 iowrite32(flt_xfer_sz, FLTCFG_REG(idxd, cntr, FLT_XFER_SZ)); in perfmon_pmu_event_start()
357 if (flt_eng && test_bit(FLT_ENG, &idxd->idxd_pmu->supported_filters)) in perfmon_pmu_event_start()
358 iowrite32(flt_eng, FLTCFG_REG(idxd, cntr, FLT_ENG)); in perfmon_pmu_event_start()
361 cntrdata = ioread64(CNTRDATA_REG(idxd, cntr)); in perfmon_pmu_event_start()
370 iowrite64(cntr_cfg, CNTRCFG_REG(idxd, cntr)); in perfmon_pmu_event_start()
376 struct idxd_device *idxd; in perfmon_pmu_event_stop() local
380 idxd = event_to_idxd(event); in perfmon_pmu_event_stop()
383 for (i = 0; i < idxd->idxd_pmu->n_events; i++) { in perfmon_pmu_event_stop()
384 if (event != idxd->idxd_pmu->event_list[i]) in perfmon_pmu_event_stop()
387 for (++i; i < idxd->idxd_pmu->n_events; i++) in perfmon_pmu_event_stop()
388 idxd->idxd_pmu->event_list[i - 1] = idxd->idxd_pmu->event_list[i]; in perfmon_pmu_event_stop()
389 --idxd->idxd_pmu->n_events; in perfmon_pmu_event_stop()
393 cntr_cfg = ioread64(CNTRCFG_REG(idxd, cntr)); in perfmon_pmu_event_stop()
395 iowrite64(cntr_cfg, CNTRCFG_REG(idxd, cntr)); in perfmon_pmu_event_stop()
401 clear_bit(cntr, idxd->idxd_pmu->used_mask); in perfmon_pmu_event_stop()
411 struct idxd_device *idxd = event_to_idxd(event); in perfmon_pmu_event_add() local
412 struct idxd_pmu *idxd_pmu = idxd->idxd_pmu; in perfmon_pmu_event_add()
438 static void enable_perfmon_pmu(struct idxd_device *idxd) in enable_perfmon_pmu() argument
440 iowrite32(COUNTER_UNFREEZE, PERFFRZ_REG(idxd)); in enable_perfmon_pmu()
443 static void disable_perfmon_pmu(struct idxd_device *idxd) in disable_perfmon_pmu() argument
445 iowrite32(COUNTER_FREEZE, PERFFRZ_REG(idxd)); in disable_perfmon_pmu()
450 struct idxd_device *idxd = pmu_to_idxd(pmu); in perfmon_pmu_enable() local
452 enable_perfmon_pmu(idxd); in perfmon_pmu_enable()
457 struct idxd_device *idxd = pmu_to_idxd(pmu); in perfmon_pmu_disable() local
459 disable_perfmon_pmu(idxd); in perfmon_pmu_disable()
495 void perfmon_pmu_remove(struct idxd_device *idxd) in perfmon_pmu_remove() argument
497 if (!idxd->idxd_pmu) in perfmon_pmu_remove()
500 cpuhp_state_remove_instance(cpuhp_slot, &idxd->idxd_pmu->cpuhp_node); in perfmon_pmu_remove()
501 perf_pmu_unregister(&idxd->idxd_pmu->pmu); in perfmon_pmu_remove()
502 kfree(idxd->idxd_pmu); in perfmon_pmu_remove()
503 idxd->idxd_pmu = NULL; in perfmon_pmu_remove()
544 int perfmon_pmu_init(struct idxd_device *idxd) in perfmon_pmu_init() argument
560 if (idxd->perfmon_offset == 0) in perfmon_pmu_init()
567 idxd_pmu->idxd = idxd; in perfmon_pmu_init()
568 idxd->idxd_pmu = idxd_pmu; in perfmon_pmu_init()
570 if (idxd->data->type == IDXD_TYPE_DSA) { in perfmon_pmu_init()
571 rc = sprintf(idxd_pmu->name, "dsa%d", idxd->id); in perfmon_pmu_init()
574 } else if (idxd->data->type == IDXD_TYPE_IAX) { in perfmon_pmu_init()
575 rc = sprintf(idxd_pmu->name, "iax%d", idxd->id); in perfmon_pmu_init()
582 perfmon_reset(idxd); in perfmon_pmu_init()
584 perfcap.bits = ioread64(PERFCAP_REG(idxd)); in perfmon_pmu_init()
633 perf_pmu_unregister(&idxd->idxd_pmu->pmu); in perfmon_pmu_init()
640 idxd->idxd_pmu = NULL; in perfmon_pmu_init()