From f0c62b643823f91f91ce5bcb3c7fa39bee9eebae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Fri, 10 May 2024 10:24:50 -0700 Subject: [PATCH] intel/perf: Implement function that returns OA format for Xe KMD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Lionel Landwerlin Signed-off-by: José Roberto de Souza Part-of: --- src/intel/perf/intel_perf.c | 3 +++ src/intel/perf/intel_perf.h | 2 +- src/intel/perf/meson.build | 2 ++ src/intel/perf/xe/intel_perf.c | 29 +++++++++++++++++++++++++++++ src/intel/perf/xe/intel_perf.h | 12 ++++++++++++ 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/intel/perf/xe/intel_perf.c create mode 100644 src/intel/perf/xe/intel_perf.h diff --git a/src/intel/perf/intel_perf.c b/src/intel/perf/intel_perf.c index 6007de5fe42..d14cb24eaef 100644 --- a/src/intel/perf/intel_perf.c +++ b/src/intel/perf/intel_perf.c @@ -42,6 +42,7 @@ #include "dev/intel_device_info.h" #include "perf/i915/intel_perf.h" +#include "perf/xe/intel_perf.h" #include "perf/intel_perf.h" #include "perf/intel_perf_common.h" #include "perf/intel_perf_regs.h" @@ -1489,6 +1490,8 @@ intel_perf_get_oa_format(struct intel_perf_config *perf_cfg) switch (perf_cfg->devinfo->kmd_type) { case INTEL_KMD_TYPE_I915: return i915_perf_get_oa_format(perf_cfg); + case INTEL_KMD_TYPE_XE: + return xe_perf_get_oa_format(perf_cfg); default: unreachable("missing"); return 0; diff --git a/src/intel/perf/intel_perf.h b/src/intel/perf/intel_perf.h index dc5bd7c8996..b0d36416617 100644 --- a/src/intel/perf/intel_perf.h +++ b/src/intel/perf/intel_perf.h @@ -254,7 +254,7 @@ struct intel_perf_query_info { /* OA specific */ uint64_t oa_metrics_set_id; - uint64_t oa_format; + uint64_t oa_format;/* KMD value */ /* For indexing into the accumulator[] ... */ int gpu_time_offset; diff --git a/src/intel/perf/meson.build b/src/intel/perf/meson.build index a589509b047..c1f9bef487e 100644 --- a/src/intel/perf/meson.build +++ b/src/intel/perf/meson.build @@ -20,6 +20,8 @@ endforeach intel_perf_sources = [ 'i915/intel_perf.c', 'i915/intel_perf.h', + 'xe/intel_perf.c', + 'xe/intel_perf.h', 'intel_perf_common.c', 'intel_perf_common.h', 'intel_perf.c', diff --git a/src/intel/perf/xe/intel_perf.c b/src/intel/perf/xe/intel_perf.c new file mode 100644 index 00000000000..9536460a10e --- /dev/null +++ b/src/intel/perf/xe/intel_perf.c @@ -0,0 +1,29 @@ +/* + * Copyright 2024 Intel Corporation + * SPDX-License-Identifier: MIT + */ + +#include "perf/xe/intel_perf.h" + +#include + +#include "perf/intel_perf.h" + +#include "drm-uapi/xe_drm.h" + +#define FIELD_PREP_ULL(_mask, _val) (((_val) << (ffsll(_mask) - 1)) & (_mask)) + +uint64_t xe_perf_get_oa_format(struct intel_perf_config *perf) +{ + uint64_t fmt = FIELD_PREP_ULL(DRM_XE_OA_FORMAT_MASK_FMT_TYPE, DRM_XE_OA_FMT_TYPE_OAG); + + /* same as I915_OA_FORMAT_A24u40_A14u32_B8_C8 and + * I915_OA_FORMAT_A32u40_A4u32_B8_C8 returned for gfx 125+ and gfx 120 + * respectively. + */ + fmt |= FIELD_PREP_ULL(DRM_XE_OA_FORMAT_MASK_COUNTER_SEL, 5); + fmt |= FIELD_PREP_ULL(DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE, 0); + fmt |= FIELD_PREP_ULL(DRM_XE_OA_FORMAT_MASK_BC_REPORT, 0); + + return fmt; +} diff --git a/src/intel/perf/xe/intel_perf.h b/src/intel/perf/xe/intel_perf.h new file mode 100644 index 00000000000..4fa99bdcb1d --- /dev/null +++ b/src/intel/perf/xe/intel_perf.h @@ -0,0 +1,12 @@ +/* + * Copyright 2024 Intel Corporation + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include + +struct intel_perf_config; + +uint64_t xe_perf_get_oa_format(struct intel_perf_config *perf);