Lines Matching refs:perf
409 i915_perf_get_oa_config(struct i915_perf *perf, int metrics_set) in i915_perf_get_oa_config() argument
414 oa_config = idr_find(&perf->metrics_idr, metrics_set); in i915_perf_get_oa_config()
469 (GRAPHICS_VER(stream->perf->i915) == 12 ? in oa_report_reason()
485 stream->perf->gen8_valid_ctx_bit); in oa_report_ctx_invalid()
557 hw_tail = stream->perf->ops.oa_hw_tail_read(stream); in oa_buffer_check_unlocked()
600 __ratelimit(&stream->perf->tail_pointer_race)) in oa_buffer_check_unlocked()
916 oaheadptr = GRAPHICS_VER(stream->perf->i915) == 12 ? in gen8_append_oa_reports()
970 oastatus_reg = GRAPHICS_VER(stream->perf->i915) == 12 ? in gen8_oa_read()
996 drm_dbg(&stream->perf->i915->drm, in gen8_oa_read()
1000 stream->perf->ops.oa_disable(stream); in gen8_oa_read()
1001 stream->perf->ops.oa_enable(stream); in gen8_oa_read()
1121 if (__ratelimit(&stream->perf->spurious_report_rs)) in gen7_append_oa_reports()
1192 oastatus1 &= ~stream->perf->gen7_latched_oastatus1; in gen7_oa_read()
1220 drm_dbg(&stream->perf->i915->drm, in gen7_oa_read()
1224 stream->perf->ops.oa_disable(stream); in gen7_oa_read()
1225 stream->perf->ops.oa_enable(stream); in gen7_oa_read()
1235 stream->perf->gen7_latched_oastatus1 |= in gen7_oa_read()
1300 return stream->perf->ops.read(stream, buf, count, offset); in i915_oa_read()
1514 struct i915_perf *perf = &ce->engine->i915->perf; in set_oa_ctx_ctrl_offset() local
1515 u32 offset = perf->ctx_oactxctrl_offset; in set_oa_ctx_ctrl_offset()
1522 perf->ctx_oactxctrl_offset = offset; in set_oa_ctx_ctrl_offset()
1557 HAS_LOGICAL_RING_CONTEXTS(stream->perf->i915)) { in oa_get_render_ctx_id()
1565 drm_err(&stream->perf->i915->drm, in oa_get_render_ctx_id()
1622 drm_dbg(&stream->perf->i915->drm, in oa_get_render_ctx_id()
1688 struct i915_perf *perf = stream->perf; in i915_oa_stream_destroy() local
1702 perf->ops.disable_metric_set(stream); in i915_oa_stream_destroy()
1722 if (perf->spurious_report_rs.missed) { in i915_oa_stream_destroy()
1725 perf->spurious_report_rs.missed); in i915_oa_stream_destroy()
1758 stream->perf->gen7_latched_oastatus1 = 0; in gen7_init_oa_buffer()
1883 struct drm_i915_private *i915 = stream->perf->i915; in alloc_oa_buffer()
1895 bo = i915_gem_object_create_shmem(stream->perf->i915, OA_BUFFER_SIZE); in alloc_oa_buffer()
1952 if (GRAPHICS_VER(stream->perf->i915) >= 8) in save_restore_register()
1967 struct drm_i915_private *i915 = stream->perf->i915; in alloc_noa_wait()
1972 intel_gt_ns_to_clock_interval(to_gt(stream->perf->i915), in alloc_noa_wait()
1973 atomic64_read(&stream->perf->noa_programming_delay)); in alloc_noa_wait()
2242 obj = i915_gem_object_create_shmem(stream->perf->i915, config_length); in alloc_oa_config_buffer()
2271 *cs++ = (GRAPHICS_VER(stream->perf->i915) < 8 ? in alloc_oa_config_buffer()
2480 u32 ctx_oactxctrl = stream->perf->ctx_oactxctrl_offset; in gen8_update_reg_state_unlocked()
2481 u32 ctx_flexeu0 = stream->perf->ctx_flexeu0_offset; in gen8_update_reg_state_unlocked()
2645 u32 offset = stream->perf->ctx_oactxctrl_offset; in gen12_configure_oar_context()
2720 struct drm_i915_private *i915 = stream->perf->i915; in oa_configure_all_contexts()
2726 lockdep_assert_held(>->perf.lock); in oa_configure_all_contexts()
2789 u32 ctx_oactxctrl = stream->perf->ctx_oactxctrl_offset; in lrc_configure_all_contexts()
2791 const u32 ctx_flexeu0 = stream->perf->ctx_flexeu0_offset; in lrc_configure_all_contexts()
2857 if (IS_GRAPHICS_VER(stream->perf->i915, 9, 11)) { in gen8_enable_metric_set()
2888 struct drm_i915_private *i915 = stream->perf->i915; in gen12_enable_metric_set()
2973 struct drm_i915_private *i915 = stream->perf->i915; in gen12_disable_metric_set()
3091 stream->perf->ops.oa_enable(stream); in i915_oa_stream_enable()
3107 drm_err(&stream->perf->i915->drm, in gen7_oa_disable()
3119 drm_err(&stream->perf->i915->drm, in gen8_oa_disable()
3132 drm_err(&stream->perf->i915->drm, in gen12_oa_disable()
3140 drm_err(&stream->perf->i915->drm, in gen12_oa_disable()
3154 stream->perf->ops.oa_disable(stream); in i915_oa_stream_disable()
3178 err = stream->perf->ops.enable_metric_set(stream, active); in i915_perf_stream_enable_sync()
3266 struct drm_i915_private *i915 = stream->perf->i915; in i915_oa_stream_init()
3267 struct i915_perf *perf = stream->perf; in i915_oa_stream_init() local
3273 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3285 if (!perf->metrics_kobj) { in i915_oa_stream_init()
3286 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3292 (GRAPHICS_VER(perf->i915) < 12 || !stream->ctx)) { in i915_oa_stream_init()
3293 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3298 if (!perf->ops.enable_metric_set) { in i915_oa_stream_init()
3299 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3310 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3316 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3326 stream->oa_buffer.format = &perf->oa_formats[props->oa_format]; in i915_oa_stream_init()
3342 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3350 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3355 stream->oa_config = i915_perf_get_oa_config(perf, props->metrics_set); in i915_oa_stream_init()
3357 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3389 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3403 stream->engine->gt->perf.sseu = props->sseu; in i915_oa_stream_init()
3408 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3413 drm_dbg(&stream->perf->i915->drm, in i915_oa_stream_init()
3428 perf->ops.disable_metric_set(stream); in i915_oa_stream_init()
3462 if (stream && GRAPHICS_VER(stream->perf->i915) < 12) in i915_oa_init_reg_state()
3674 config = i915_perf_get_oa_config(stream->perf, metrics_set); in i915_perf_config_locked()
3792 struct i915_perf *perf = stream->perf; in i915_perf_release() local
3800 mutex_lock(>->perf.lock); in i915_perf_release()
3802 mutex_unlock(>->perf.lock); in i915_perf_release()
3805 drm_dev_put(&perf->i915->drm); in i915_perf_release()
3850 i915_perf_open_ioctl_locked(struct i915_perf *perf, in i915_perf_open_ioctl_locked() argument
3868 drm_dbg(&perf->i915->drm, in i915_perf_open_ioctl_locked()
3895 if (IS_HASWELL(perf->i915) && specific_ctx) in i915_perf_open_ioctl_locked()
3897 else if (GRAPHICS_VER(perf->i915) == 12 && specific_ctx && in i915_perf_open_ioctl_locked()
3903 drm_dbg(&perf->i915->drm, in i915_perf_open_ioctl_locked()
3926 drm_dbg(&perf->i915->drm, in i915_perf_open_ioctl_locked()
3938 stream->perf = perf; in i915_perf_open_ioctl_locked()
3972 drm_dev_get(&perf->i915->drm); in i915_perf_open_ioctl_locked()
3988 static u64 oa_exponent_to_ns(struct i915_perf *perf, int exponent) in oa_exponent_to_ns() argument
3991 u32 den = i915_perf_oa_timestamp_frequency(perf->i915); in oa_exponent_to_ns()
3997 oa_format_valid(struct i915_perf *perf, enum drm_i915_oa_format format) in oa_format_valid() argument
3999 return test_bit(format, perf->format_mask); in oa_format_valid()
4003 oa_format_add(struct i915_perf *perf, enum drm_i915_oa_format format) in oa_format_add() argument
4005 __set_bit(format, perf->format_mask); in oa_format_add()
4023 static int read_properties_unlocked(struct i915_perf *perf, in read_properties_unlocked() argument
4048 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4070 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4086 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4094 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4099 if (!oa_format_valid(perf, value)) { in read_properties_unlocked()
4100 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4109 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4122 oa_period = oa_exponent_to_ns(perf, value); in read_properties_unlocked()
4138 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4151 if (GRAPHICS_VER_FULL(perf->i915) >= IP_VER(12, 50)) { in read_properties_unlocked()
4152 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4154 GRAPHICS_VER_FULL(perf->i915)); in read_properties_unlocked()
4161 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4170 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4195 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4200 props->engine = intel_engine_lookup_user(perf->i915, class, instance); in read_properties_unlocked()
4202 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4209 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4223 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4229 f = &perf->oa_formats[i]; in read_properties_unlocked()
4231 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4240 drm_dbg(&perf->i915->drm, in read_properties_unlocked()
4277 struct i915_perf *perf = &to_i915(dev)->perf; in i915_perf_open_ioctl() local
4284 if (!perf->i915) in i915_perf_open_ioctl()
4291 drm_dbg(&perf->i915->drm, in i915_perf_open_ioctl()
4296 ret = read_properties_unlocked(perf, in i915_perf_open_ioctl()
4305 mutex_lock(>->perf.lock); in i915_perf_open_ioctl()
4306 ret = i915_perf_open_ioctl_locked(perf, param, &props, file); in i915_perf_open_ioctl()
4307 mutex_unlock(>->perf.lock); in i915_perf_open_ioctl()
4322 struct i915_perf *perf = &i915->perf; in i915_perf_register() local
4325 if (!perf->i915) in i915_perf_register()
4332 mutex_lock(>->perf.lock); in i915_perf_register()
4334 perf->metrics_kobj = in i915_perf_register()
4338 mutex_unlock(>->perf.lock); in i915_perf_register()
4352 struct i915_perf *perf = &i915->perf; in i915_perf_unregister() local
4354 if (!perf->metrics_kobj) in i915_perf_unregister()
4357 kobject_put(perf->metrics_kobj); in i915_perf_unregister()
4358 perf->metrics_kobj = NULL; in i915_perf_unregister()
4361 static bool gen8_is_valid_flex_addr(struct i915_perf *perf, u32 addr) in gen8_is_valid_flex_addr() argument
4480 static bool gen7_is_valid_b_counter_addr(struct i915_perf *perf, u32 addr) in gen7_is_valid_b_counter_addr() argument
4485 static bool gen8_is_valid_mux_addr(struct i915_perf *perf, u32 addr) in gen8_is_valid_mux_addr() argument
4491 static bool gen11_is_valid_mux_addr(struct i915_perf *perf, u32 addr) in gen11_is_valid_mux_addr() argument
4498 static bool hsw_is_valid_mux_addr(struct i915_perf *perf, u32 addr) in hsw_is_valid_mux_addr() argument
4504 static bool chv_is_valid_mux_addr(struct i915_perf *perf, u32 addr) in chv_is_valid_mux_addr() argument
4510 static bool gen12_is_valid_b_counter_addr(struct i915_perf *perf, u32 addr) in gen12_is_valid_b_counter_addr() argument
4515 static bool mtl_is_valid_oam_b_counter_addr(struct i915_perf *perf, u32 addr) in mtl_is_valid_oam_b_counter_addr() argument
4517 if (HAS_OAM(perf->i915) && in mtl_is_valid_oam_b_counter_addr()
4518 GRAPHICS_VER_FULL(perf->i915) >= IP_VER(12, 70)) in mtl_is_valid_oam_b_counter_addr()
4524 static bool xehp_is_valid_b_counter_addr(struct i915_perf *perf, u32 addr) in xehp_is_valid_b_counter_addr() argument
4528 mtl_is_valid_oam_b_counter_addr(perf, addr); in xehp_is_valid_b_counter_addr()
4531 static bool gen12_is_valid_mux_addr(struct i915_perf *perf, u32 addr) in gen12_is_valid_mux_addr() argument
4533 if (GRAPHICS_VER_FULL(perf->i915) >= IP_VER(12, 70)) in gen12_is_valid_mux_addr()
4558 static struct i915_oa_reg *alloc_oa_regs(struct i915_perf *perf, in alloc_oa_regs() argument
4559 bool (*is_valid)(struct i915_perf *perf, u32 addr), in alloc_oa_regs() argument
4586 if (!is_valid(perf, addr)) { in alloc_oa_regs()
4587 drm_dbg(&perf->i915->drm, in alloc_oa_regs()
4620 static int create_dynamic_oa_sysfs_entry(struct i915_perf *perf, in create_dynamic_oa_sysfs_entry() argument
4635 return sysfs_create_group(perf->metrics_kobj, in create_dynamic_oa_sysfs_entry()
4655 struct i915_perf *perf = &to_i915(dev)->perf; in i915_perf_add_config_ioctl() local
4661 if (!perf->i915) in i915_perf_add_config_ioctl()
4664 if (!perf->metrics_kobj) { in i915_perf_add_config_ioctl()
4665 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4671 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4679 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4686 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4691 oa_config->perf = perf; in i915_perf_add_config_ioctl()
4695 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4707 regs = alloc_oa_regs(perf, in i915_perf_add_config_ioctl()
4708 perf->ops.is_valid_mux_reg, in i915_perf_add_config_ioctl()
4713 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4721 regs = alloc_oa_regs(perf, in i915_perf_add_config_ioctl()
4722 perf->ops.is_valid_b_counter_reg, in i915_perf_add_config_ioctl()
4727 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4734 if (GRAPHICS_VER(perf->i915) < 8) { in i915_perf_add_config_ioctl()
4741 regs = alloc_oa_regs(perf, in i915_perf_add_config_ioctl()
4742 perf->ops.is_valid_flex_reg, in i915_perf_add_config_ioctl()
4747 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4755 err = mutex_lock_interruptible(&perf->metrics_lock); in i915_perf_add_config_ioctl()
4762 idr_for_each_entry(&perf->metrics_idr, tmp, id) { in i915_perf_add_config_ioctl()
4764 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4771 err = create_dynamic_oa_sysfs_entry(perf, oa_config); in i915_perf_add_config_ioctl()
4773 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4779 oa_config->id = idr_alloc(&perf->metrics_idr, in i915_perf_add_config_ioctl()
4783 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4790 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4792 mutex_unlock(&perf->metrics_lock); in i915_perf_add_config_ioctl()
4797 mutex_unlock(&perf->metrics_lock); in i915_perf_add_config_ioctl()
4800 drm_dbg(&perf->i915->drm, in i915_perf_add_config_ioctl()
4819 struct i915_perf *perf = &to_i915(dev)->perf; in i915_perf_remove_config_ioctl() local
4824 if (!perf->i915) in i915_perf_remove_config_ioctl()
4828 drm_dbg(&perf->i915->drm, in i915_perf_remove_config_ioctl()
4833 ret = mutex_lock_interruptible(&perf->metrics_lock); in i915_perf_remove_config_ioctl()
4837 oa_config = idr_find(&perf->metrics_idr, *arg); in i915_perf_remove_config_ioctl()
4839 drm_dbg(&perf->i915->drm, in i915_perf_remove_config_ioctl()
4847 sysfs_remove_group(perf->metrics_kobj, &oa_config->sysfs_metric); in i915_perf_remove_config_ioctl()
4849 idr_remove(&perf->metrics_idr, *arg); in i915_perf_remove_config_ioctl()
4851 mutex_unlock(&perf->metrics_lock); in i915_perf_remove_config_ioctl()
4853 drm_dbg(&perf->i915->drm, in i915_perf_remove_config_ioctl()
4861 mutex_unlock(&perf->metrics_lock); in i915_perf_remove_config_ioctl()
4955 int i, num_groups = gt->perf.num_perf_groups; in oa_init_groups()
4958 struct i915_perf_group *g = >->perf.group[i]; in oa_init_groups()
4995 gt->perf.num_perf_groups = num_groups; in oa_init_gt()
4996 gt->perf.group = g; in oa_init_gt()
5003 static int oa_init_engine_groups(struct i915_perf *perf) in oa_init_engine_groups() argument
5008 for_each_gt(gt, perf->i915, i) { in oa_init_engine_groups()
5017 static void oa_init_supported_formats(struct i915_perf *perf) in oa_init_supported_formats() argument
5019 struct drm_i915_private *i915 = perf->i915; in oa_init_supported_formats()
5024 oa_format_add(perf, I915_OA_FORMAT_A13); in oa_init_supported_formats()
5025 oa_format_add(perf, I915_OA_FORMAT_A13); in oa_init_supported_formats()
5026 oa_format_add(perf, I915_OA_FORMAT_A29); in oa_init_supported_formats()
5027 oa_format_add(perf, I915_OA_FORMAT_A13_B8_C8); in oa_init_supported_formats()
5028 oa_format_add(perf, I915_OA_FORMAT_B4_C8); in oa_init_supported_formats()
5029 oa_format_add(perf, I915_OA_FORMAT_A45_B8_C8); in oa_init_supported_formats()
5030 oa_format_add(perf, I915_OA_FORMAT_B4_C8_A16); in oa_init_supported_formats()
5031 oa_format_add(perf, I915_OA_FORMAT_C4_B8); in oa_init_supported_formats()
5050 oa_format_add(perf, I915_OA_FORMAT_A12); in oa_init_supported_formats()
5051 oa_format_add(perf, I915_OA_FORMAT_A12_B8_C8); in oa_init_supported_formats()
5052 oa_format_add(perf, I915_OA_FORMAT_A32u40_A4u32_B8_C8); in oa_init_supported_formats()
5053 oa_format_add(perf, I915_OA_FORMAT_C4_B8); in oa_init_supported_formats()
5057 oa_format_add(perf, I915_OAR_FORMAT_A32u40_A4u32_B8_C8); in oa_init_supported_formats()
5058 oa_format_add(perf, I915_OA_FORMAT_A24u40_A14u32_B8_C8); in oa_init_supported_formats()
5062 oa_format_add(perf, I915_OAR_FORMAT_A32u40_A4u32_B8_C8); in oa_init_supported_formats()
5063 oa_format_add(perf, I915_OA_FORMAT_A24u40_A14u32_B8_C8); in oa_init_supported_formats()
5064 oa_format_add(perf, I915_OAM_FORMAT_MPEC8u64_B8_C8); in oa_init_supported_formats()
5065 oa_format_add(perf, I915_OAM_FORMAT_MPEC8u32_B8_C8); in oa_init_supported_formats()
5075 struct i915_perf *perf = &i915->perf; in i915_perf_init_info() local
5079 perf->ctx_oactxctrl_offset = 0x120; in i915_perf_init_info()
5080 perf->ctx_flexeu0_offset = 0x2ce; in i915_perf_init_info()
5081 perf->gen8_valid_ctx_bit = BIT(25); in i915_perf_init_info()
5084 perf->ctx_oactxctrl_offset = 0x128; in i915_perf_init_info()
5085 perf->ctx_flexeu0_offset = 0x3de; in i915_perf_init_info()
5086 perf->gen8_valid_ctx_bit = BIT(16); in i915_perf_init_info()
5089 perf->ctx_oactxctrl_offset = 0x124; in i915_perf_init_info()
5090 perf->ctx_flexeu0_offset = 0x78e; in i915_perf_init_info()
5091 perf->gen8_valid_ctx_bit = BIT(16); in i915_perf_init_info()
5094 perf->gen8_valid_ctx_bit = BIT(16); in i915_perf_init_info()
5116 struct i915_perf *perf = &i915->perf; in i915_perf_init() local
5118 perf->oa_formats = oa_formats; in i915_perf_init()
5120 perf->ops.is_valid_b_counter_reg = gen7_is_valid_b_counter_addr; in i915_perf_init()
5121 perf->ops.is_valid_mux_reg = hsw_is_valid_mux_addr; in i915_perf_init()
5122 perf->ops.is_valid_flex_reg = NULL; in i915_perf_init()
5123 perf->ops.enable_metric_set = hsw_enable_metric_set; in i915_perf_init()
5124 perf->ops.disable_metric_set = hsw_disable_metric_set; in i915_perf_init()
5125 perf->ops.oa_enable = gen7_oa_enable; in i915_perf_init()
5126 perf->ops.oa_disable = gen7_oa_disable; in i915_perf_init()
5127 perf->ops.read = gen7_oa_read; in i915_perf_init()
5128 perf->ops.oa_hw_tail_read = gen7_oa_hw_tail_read; in i915_perf_init()
5136 perf->ops.read = gen8_oa_read; in i915_perf_init()
5140 perf->ops.is_valid_b_counter_reg = in i915_perf_init()
5142 perf->ops.is_valid_mux_reg = in i915_perf_init()
5144 perf->ops.is_valid_flex_reg = in i915_perf_init()
5148 perf->ops.is_valid_mux_reg = in i915_perf_init()
5152 perf->ops.oa_enable = gen8_oa_enable; in i915_perf_init()
5153 perf->ops.oa_disable = gen8_oa_disable; in i915_perf_init()
5154 perf->ops.enable_metric_set = gen8_enable_metric_set; in i915_perf_init()
5155 perf->ops.disable_metric_set = gen8_disable_metric_set; in i915_perf_init()
5156 perf->ops.oa_hw_tail_read = gen8_oa_hw_tail_read; in i915_perf_init()
5158 perf->ops.is_valid_b_counter_reg = in i915_perf_init()
5160 perf->ops.is_valid_mux_reg = in i915_perf_init()
5162 perf->ops.is_valid_flex_reg = in i915_perf_init()
5165 perf->ops.oa_enable = gen8_oa_enable; in i915_perf_init()
5166 perf->ops.oa_disable = gen8_oa_disable; in i915_perf_init()
5167 perf->ops.enable_metric_set = gen8_enable_metric_set; in i915_perf_init()
5168 perf->ops.disable_metric_set = gen11_disable_metric_set; in i915_perf_init()
5169 perf->ops.oa_hw_tail_read = gen8_oa_hw_tail_read; in i915_perf_init()
5171 perf->ops.is_valid_b_counter_reg = in i915_perf_init()
5175 perf->ops.is_valid_mux_reg = in i915_perf_init()
5177 perf->ops.is_valid_flex_reg = in i915_perf_init()
5180 perf->ops.oa_enable = gen12_oa_enable; in i915_perf_init()
5181 perf->ops.oa_disable = gen12_oa_disable; in i915_perf_init()
5182 perf->ops.enable_metric_set = gen12_enable_metric_set; in i915_perf_init()
5183 perf->ops.disable_metric_set = gen12_disable_metric_set; in i915_perf_init()
5184 perf->ops.oa_hw_tail_read = gen12_oa_hw_tail_read; in i915_perf_init()
5188 if (perf->ops.enable_metric_set) { in i915_perf_init()
5193 mutex_init(>->perf.lock); in i915_perf_init()
5198 mutex_init(&perf->metrics_lock); in i915_perf_init()
5199 idr_init_base(&perf->metrics_idr, 1); in i915_perf_init()
5211 ratelimit_state_init(&perf->spurious_report_rs, 5 * HZ, 10); in i915_perf_init()
5216 ratelimit_set_flags(&perf->spurious_report_rs, in i915_perf_init()
5219 ratelimit_state_init(&perf->tail_pointer_race, in i915_perf_init()
5221 ratelimit_set_flags(&perf->tail_pointer_race, in i915_perf_init()
5224 atomic64_set(&perf->noa_programming_delay, in i915_perf_init()
5227 perf->i915 = i915; in i915_perf_init()
5229 ret = oa_init_engine_groups(perf); in i915_perf_init()
5236 oa_init_supported_formats(perf); in i915_perf_init()
5265 struct i915_perf *perf = &i915->perf; in i915_perf_fini() local
5269 if (!perf->i915) in i915_perf_fini()
5272 for_each_gt(gt, perf->i915, i) in i915_perf_fini()
5273 kfree(gt->perf.group); in i915_perf_fini()
5275 idr_for_each(&perf->metrics_idr, destroy_config, perf); in i915_perf_fini()
5276 idr_destroy(&perf->metrics_idr); in i915_perf_fini()
5278 memset(&perf->ops, 0, sizeof(perf->ops)); in i915_perf_fini()
5279 perf->i915 = NULL; in i915_perf_fini()