Commit b8d49f28 authored by Lionel Landwerlin's avatar Lionel Landwerlin Committed by Chris Wilson

drm/i915/perf: introduce a versioning of the i915-perf uapi

Reporting this version will help application figure out what level of
the support the running kernel provides.

v2: Add i915_perf_ioctl_version() (Chris)
Signed-off-by: default avatarLionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20191014201404.22468-1-chris@chris-wilson.co.uk
parent 3c00660d
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "gt/intel_engine_user.h" #include "gt/intel_engine_user.h"
#include "i915_drv.h" #include "i915_drv.h"
#include "i915_perf.h"
int i915_getparam_ioctl(struct drm_device *dev, void *data, int i915_getparam_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv) struct drm_file *file_priv)
...@@ -156,6 +157,9 @@ int i915_getparam_ioctl(struct drm_device *dev, void *data, ...@@ -156,6 +157,9 @@ int i915_getparam_ioctl(struct drm_device *dev, void *data,
case I915_PARAM_MMAP_GTT_COHERENT: case I915_PARAM_MMAP_GTT_COHERENT:
value = INTEL_INFO(i915)->has_coherent_ggtt; value = INTEL_INFO(i915)->has_coherent_ggtt;
break; break;
case I915_PARAM_PERF_REVISION:
value = i915_perf_ioctl_version();
break;
default: default:
DRM_DEBUG("Unknown parameter %d\n", param->param); DRM_DEBUG("Unknown parameter %d\n", param->param);
return -EINVAL; return -EINVAL;
......
...@@ -4017,6 +4017,16 @@ void i915_perf_fini(struct drm_i915_private *i915) ...@@ -4017,6 +4017,16 @@ void i915_perf_fini(struct drm_i915_private *i915)
perf->i915 = NULL; perf->i915 = NULL;
} }
/**
* i915_perf_ioctl_version - Version of the i915-perf subsystem
*
* This version number is used by userspace to detect available features.
*/
int i915_perf_ioctl_version(void)
{
return 1;
}
#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST) #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
#include "selftests/i915_perf.c" #include "selftests/i915_perf.c"
#endif #endif
...@@ -22,6 +22,7 @@ void i915_perf_init(struct drm_i915_private *i915); ...@@ -22,6 +22,7 @@ void i915_perf_init(struct drm_i915_private *i915);
void i915_perf_fini(struct drm_i915_private *i915); void i915_perf_fini(struct drm_i915_private *i915);
void i915_perf_register(struct drm_i915_private *i915); void i915_perf_register(struct drm_i915_private *i915);
void i915_perf_unregister(struct drm_i915_private *i915); void i915_perf_unregister(struct drm_i915_private *i915);
int i915_perf_ioctl_version(void);
int i915_perf_open_ioctl(struct drm_device *dev, void *data, int i915_perf_open_ioctl(struct drm_device *dev, void *data,
struct drm_file *file); struct drm_file *file);
......
...@@ -611,6 +611,13 @@ typedef struct drm_i915_irq_wait { ...@@ -611,6 +611,13 @@ typedef struct drm_i915_irq_wait {
* See I915_EXEC_FENCE_OUT and I915_EXEC_FENCE_SUBMIT. * See I915_EXEC_FENCE_OUT and I915_EXEC_FENCE_SUBMIT.
*/ */
#define I915_PARAM_HAS_EXEC_SUBMIT_FENCE 53 #define I915_PARAM_HAS_EXEC_SUBMIT_FENCE 53
/*
* Revision of the i915-perf uAPI. The value returned helps determine what
* i915-perf features are available. See drm_i915_perf_property_id.
*/
#define I915_PARAM_PERF_REVISION 54
/* Must be kept compact -- no holes and well documented */ /* Must be kept compact -- no holes and well documented */
typedef struct drm_i915_getparam { typedef struct drm_i915_getparam {
...@@ -1844,23 +1851,31 @@ enum drm_i915_perf_property_id { ...@@ -1844,23 +1851,31 @@ enum drm_i915_perf_property_id {
* Open the stream for a specific context handle (as used with * Open the stream for a specific context handle (as used with
* execbuffer2). A stream opened for a specific context this way * execbuffer2). A stream opened for a specific context this way
* won't typically require root privileges. * won't typically require root privileges.
*
* This property is available in perf revision 1.
*/ */
DRM_I915_PERF_PROP_CTX_HANDLE = 1, DRM_I915_PERF_PROP_CTX_HANDLE = 1,
/** /**
* A value of 1 requests the inclusion of raw OA unit reports as * A value of 1 requests the inclusion of raw OA unit reports as
* part of stream samples. * part of stream samples.
*
* This property is available in perf revision 1.
*/ */
DRM_I915_PERF_PROP_SAMPLE_OA, DRM_I915_PERF_PROP_SAMPLE_OA,
/** /**
* The value specifies which set of OA unit metrics should be * The value specifies which set of OA unit metrics should be
* be configured, defining the contents of any OA unit reports. * be configured, defining the contents of any OA unit reports.
*
* This property is available in perf revision 1.
*/ */
DRM_I915_PERF_PROP_OA_METRICS_SET, DRM_I915_PERF_PROP_OA_METRICS_SET,
/** /**
* The value specifies the size and layout of OA unit reports. * The value specifies the size and layout of OA unit reports.
*
* This property is available in perf revision 1.
*/ */
DRM_I915_PERF_PROP_OA_FORMAT, DRM_I915_PERF_PROP_OA_FORMAT,
...@@ -1870,6 +1885,8 @@ enum drm_i915_perf_property_id { ...@@ -1870,6 +1885,8 @@ enum drm_i915_perf_property_id {
* from this exponent as follows: * from this exponent as follows:
* *
* 80ns * 2^(period_exponent + 1) * 80ns * 2^(period_exponent + 1)
*
* This property is available in perf revision 1.
*/ */
DRM_I915_PERF_PROP_OA_EXPONENT, DRM_I915_PERF_PROP_OA_EXPONENT,
...@@ -1901,6 +1918,8 @@ struct drm_i915_perf_open_param { ...@@ -1901,6 +1918,8 @@ struct drm_i915_perf_open_param {
* to close and re-open a stream with the same configuration. * to close and re-open a stream with the same configuration.
* *
* It's undefined whether any pending data for the stream will be lost. * It's undefined whether any pending data for the stream will be lost.
*
* This ioctl is available in perf revision 1.
*/ */
#define I915_PERF_IOCTL_ENABLE _IO('i', 0x0) #define I915_PERF_IOCTL_ENABLE _IO('i', 0x0)
...@@ -1908,6 +1927,8 @@ struct drm_i915_perf_open_param { ...@@ -1908,6 +1927,8 @@ struct drm_i915_perf_open_param {
* Disable data capture for a stream. * Disable data capture for a stream.
* *
* It is an error to try and read a stream that is disabled. * It is an error to try and read a stream that is disabled.
*
* This ioctl is available in perf revision 1.
*/ */
#define I915_PERF_IOCTL_DISABLE _IO('i', 0x1) #define I915_PERF_IOCTL_DISABLE _IO('i', 0x1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment