#include "gen_perf.h"
+static inline uint64_t to_user_pointer(void *ptr)
+{
+ return (uintptr_t) ptr;
+}
+
static inline void
gen_perf_query_add_stat_reg(struct gen_perf_query_info *query, uint32_t reg,
uint32_t numerator, uint32_t denominator,
#include "perf/gen_perf.h"
#include "perf/gen_perf_mdapi.h"
+#include "perf/gen_perf_private.h"
#include "perf/gen_perf_query.h"
#include "perf/gen_perf_regs.h"
}
}
+#define NUM_PERF_PROPERTIES(array) (ARRAY_SIZE(array) / 2)
+
static bool
gen_perf_open(struct gen_perf_context *perf_ctx,
int metrics_set_id,
DRM_I915_PERF_PROP_OA_METRICS_SET, metrics_set_id,
DRM_I915_PERF_PROP_OA_FORMAT, report_format,
DRM_I915_PERF_PROP_OA_EXPONENT, period_exponent,
+
+ /* SSEU configuration */
+ DRM_I915_PERF_PROP_GLOBAL_SSEU, to_user_pointer(&perf_ctx->perf->sseu),
};
struct drm_i915_perf_open_param param = {
.flags = I915_PERF_FLAG_FD_CLOEXEC |
I915_PERF_FLAG_FD_NONBLOCK |
I915_PERF_FLAG_DISABLED,
- .num_properties = ARRAY_SIZE(properties) / 2,
+ .num_properties = perf_ctx->perf->i915_perf_version >= 4 ?
+ NUM_PERF_PROPERTIES(properties) :
+ NUM_PERF_PROPERTIES(properties) - 1,
.properties_ptr = (uintptr_t) properties,
};
int fd = gen_ioctl(drm_fd, DRM_IOCTL_I915_PERF_OPEN, ¶m);