mirror of https://gitee.com/openkylin/linux.git
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: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20191014201404.22468-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
3c00660db1
commit
b8d49f28aa
|
@ -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,
|
||||||
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)
|
||||||
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);
|
||||||
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 {
|
||||||
* 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 {
|
||||||
* 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 {
|
||||||
* 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 {
|
||||||
* 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 {
|
||||||
* 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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue