From: Lionel Landwerlin <lionel.g.landwer...@intel.com>

---
 include/drm-uapi/amdgpu_drm.h  |  23 ++
 include/drm-uapi/drm.h         |   7 +
 include/drm-uapi/drm_mode.h    |  22 +-
 include/drm-uapi/etnaviv_drm.h |   6 +
 include/drm-uapi/exynos_drm.h  | 240 ++++++++++++++++
 include/drm-uapi/i915_drm.h    |  43 +++
 include/drm-uapi/msm_drm.h     |   2 +
 include/drm-uapi/tegra_drm.h   | 492 ++++++++++++++++++++++++++++++++-
 include/drm-uapi/vc4_drm.h     |  13 +-
 include/drm-uapi/virtgpu_drm.h |   1 +
 10 files changed, 833 insertions(+), 16 deletions(-)

diff --git a/include/drm-uapi/amdgpu_drm.h b/include/drm-uapi/amdgpu_drm.h
index 1816bd8200d1..78b4dd89fcb4 100644
--- a/include/drm-uapi/amdgpu_drm.h
+++ b/include/drm-uapi/amdgpu_drm.h
@@ -78,6 +78,12 @@ extern "C" {
 #define AMDGPU_GEM_DOMAIN_GDS          0x8
 #define AMDGPU_GEM_DOMAIN_GWS          0x10
 #define AMDGPU_GEM_DOMAIN_OA           0x20
+#define AMDGPU_GEM_DOMAIN_MASK         (AMDGPU_GEM_DOMAIN_CPU | \
+                                        AMDGPU_GEM_DOMAIN_GTT | \
+                                        AMDGPU_GEM_DOMAIN_VRAM | \
+                                        AMDGPU_GEM_DOMAIN_GDS | \
+                                        AMDGPU_GEM_DOMAIN_GWS | \
+                                        AMDGPU_GEM_DOMAIN_OA)
 
 /* Flag that CPU access will be required for the case of VRAM domain */
 #define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED  (1 << 0)
@@ -95,6 +101,10 @@ extern "C" {
 #define AMDGPU_GEM_CREATE_VM_ALWAYS_VALID      (1 << 6)
 /* Flag that BO sharing will be explicitly synchronized */
 #define AMDGPU_GEM_CREATE_EXPLICIT_SYNC                (1 << 7)
+/* Flag that indicates allocating MQD gart on GFX9, where the mtype
+ * for the second page onward should be set to NC.
+ */
+#define AMDGPU_GEM_CREATE_MQD_GFX9             (1 << 8)
 
 struct drm_amdgpu_gem_create_in  {
        /** the requested memory size */
@@ -520,6 +530,10 @@ union drm_amdgpu_cs {
 /* Preempt flag, IB should set Pre_enb bit if PREEMPT flag detected */
 #define AMDGPU_IB_FLAG_PREEMPT (1<<2)
 
+/* The IB fence should do the L2 writeback but not invalidate any shader
+ * caches (L2/vL1/sL1/I$). */
+#define AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE (1 << 3)
+
 struct drm_amdgpu_cs_chunk_ib {
        __u32 _pad;
        /** AMDGPU_IB_FLAG_* */
@@ -618,6 +632,14 @@ struct drm_amdgpu_cs_chunk_data {
        #define AMDGPU_INFO_FW_SOS              0x0c
        /* Subquery id: Query PSP ASD firmware version */
        #define AMDGPU_INFO_FW_ASD              0x0d
+       /* Subquery id: Query VCN firmware version */
+       #define AMDGPU_INFO_FW_VCN              0x0e
+       /* Subquery id: Query GFX RLC SRLC firmware version */
+       #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_CNTL 0x0f
+       /* Subquery id: Query GFX RLC SRLG firmware version */
+       #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_GPM_MEM 0x10
+       /* Subquery id: Query GFX RLC SRLS firmware version */
+       #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_SRM_MEM 0x11
 /* number of bytes moved for TTM migration */
 #define AMDGPU_INFO_NUM_BYTES_MOVED            0x0f
 /* the used VRAM size */
@@ -806,6 +828,7 @@ struct drm_amdgpu_info_firmware {
 #define AMDGPU_VRAM_TYPE_GDDR5 5
 #define AMDGPU_VRAM_TYPE_HBM   6
 #define AMDGPU_VRAM_TYPE_DDR3  7
+#define AMDGPU_VRAM_TYPE_DDR4  8
 
 struct drm_amdgpu_info_device {
        /** PCI Device ID */
diff --git a/include/drm-uapi/drm.h b/include/drm-uapi/drm.h
index f0bd91de0cf9..778a97fcfe63 100644
--- a/include/drm-uapi/drm.h
+++ b/include/drm-uapi/drm.h
@@ -674,6 +674,13 @@ struct drm_get_cap {
  */
 #define DRM_CLIENT_CAP_ATOMIC  3
 
+/**
+ * DRM_CLIENT_CAP_ASPECT_RATIO
+ *
+ * If set to 1, the DRM core will provide aspect ratio information in modes.
+ */
+#define DRM_CLIENT_CAP_ASPECT_RATIO    4
+
 /** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
 struct drm_set_client_cap {
        __u64 capability;
diff --git a/include/drm-uapi/drm_mode.h b/include/drm-uapi/drm_mode.h
index 2c575794fb52..971c016b368c 100644
--- a/include/drm-uapi/drm_mode.h
+++ b/include/drm-uapi/drm_mode.h
@@ -93,6 +93,15 @@ extern "C" {
 #define DRM_MODE_PICTURE_ASPECT_NONE           0
 #define DRM_MODE_PICTURE_ASPECT_4_3            1
 #define DRM_MODE_PICTURE_ASPECT_16_9           2
+#define DRM_MODE_PICTURE_ASPECT_64_27          3
+#define DRM_MODE_PICTURE_ASPECT_256_135                4
+
+/* Content type options */
+#define DRM_MODE_CONTENT_TYPE_NO_DATA          0
+#define DRM_MODE_CONTENT_TYPE_GRAPHICS         1
+#define DRM_MODE_CONTENT_TYPE_PHOTO            2
+#define DRM_MODE_CONTENT_TYPE_CINEMA           3
+#define DRM_MODE_CONTENT_TYPE_GAME             4
 
 /* Aspect ratio flag bitmask (4 bits 22:19) */
 #define DRM_MODE_FLAG_PIC_AR_MASK              (0x0F<<19)
@@ -102,6 +111,10 @@ extern "C" {
                        (DRM_MODE_PICTURE_ASPECT_4_3<<19)
 #define  DRM_MODE_FLAG_PIC_AR_16_9 \
                        (DRM_MODE_PICTURE_ASPECT_16_9<<19)
+#define  DRM_MODE_FLAG_PIC_AR_64_27 \
+                       (DRM_MODE_PICTURE_ASPECT_64_27<<19)
+#define  DRM_MODE_FLAG_PIC_AR_256_135 \
+                       (DRM_MODE_PICTURE_ASPECT_256_135<<19)
 
 #define  DRM_MODE_FLAG_ALL     (DRM_MODE_FLAG_PHSYNC |         \
                                 DRM_MODE_FLAG_NHSYNC |         \
@@ -363,7 +376,7 @@ struct drm_mode_get_connector {
        __u32 pad;
 };
 
-#define DRM_MODE_PROP_PENDING  (1<<0)
+#define DRM_MODE_PROP_PENDING  (1<<0) /* deprecated, do not use */
 #define DRM_MODE_PROP_RANGE    (1<<1)
 #define DRM_MODE_PROP_IMMUTABLE        (1<<2)
 #define DRM_MODE_PROP_ENUM     (1<<3) /* enumerated type with text strings */
@@ -598,8 +611,11 @@ struct drm_mode_crtc_lut {
 };
 
 struct drm_color_ctm {
-       /* Conversion matrix in S31.32 format. */
-       __s64 matrix[9];
+       /*
+        * Conversion matrix in S31.32 sign-magnitude
+        * (not two's complement!) format.
+        */
+       __u64 matrix[9];
 };
 
 struct drm_color_lut {
diff --git a/include/drm-uapi/etnaviv_drm.h b/include/drm-uapi/etnaviv_drm.h
index e9b997a0ef27..0d5c49dc478c 100644
--- a/include/drm-uapi/etnaviv_drm.h
+++ b/include/drm-uapi/etnaviv_drm.h
@@ -55,6 +55,12 @@ struct drm_etnaviv_timespec {
 #define ETNAVIV_PARAM_GPU_FEATURES_4                0x07
 #define ETNAVIV_PARAM_GPU_FEATURES_5                0x08
 #define ETNAVIV_PARAM_GPU_FEATURES_6                0x09
+#define ETNAVIV_PARAM_GPU_FEATURES_7                0x0a
+#define ETNAVIV_PARAM_GPU_FEATURES_8                0x0b
+#define ETNAVIV_PARAM_GPU_FEATURES_9                0x0c
+#define ETNAVIV_PARAM_GPU_FEATURES_10               0x0d
+#define ETNAVIV_PARAM_GPU_FEATURES_11               0x0e
+#define ETNAVIV_PARAM_GPU_FEATURES_12               0x0f
 
 #define ETNAVIV_PARAM_GPU_STREAM_COUNT              0x10
 #define ETNAVIV_PARAM_GPU_REGISTER_MAX              0x11
diff --git a/include/drm-uapi/exynos_drm.h b/include/drm-uapi/exynos_drm.h
index a00116b5cc5c..7414cfd76419 100644
--- a/include/drm-uapi/exynos_drm.h
+++ b/include/drm-uapi/exynos_drm.h
@@ -135,6 +135,219 @@ struct drm_exynos_g2d_exec {
        __u64                                   async;
 };
 
+/* Exynos DRM IPP v2 API */
+
+/**
+ * Enumerate available IPP hardware modules.
+ *
+ * @count_ipps: size of ipp_id array / number of ipp modules (set by driver)
+ * @reserved: padding
+ * @ipp_id_ptr: pointer to ipp_id array or NULL
+ */
+struct drm_exynos_ioctl_ipp_get_res {
+       __u32 count_ipps;
+       __u32 reserved;
+       __u64 ipp_id_ptr;
+};
+
+enum drm_exynos_ipp_format_type {
+       DRM_EXYNOS_IPP_FORMAT_SOURCE            = 0x01,
+       DRM_EXYNOS_IPP_FORMAT_DESTINATION       = 0x02,
+};
+
+struct drm_exynos_ipp_format {
+       __u32 fourcc;
+       __u32 type;
+       __u64 modifier;
+};
+
+enum drm_exynos_ipp_capability {
+       DRM_EXYNOS_IPP_CAP_CROP         = 0x01,
+       DRM_EXYNOS_IPP_CAP_ROTATE       = 0x02,
+       DRM_EXYNOS_IPP_CAP_SCALE        = 0x04,
+       DRM_EXYNOS_IPP_CAP_CONVERT      = 0x08,
+};
+
+/**
+ * Get IPP hardware capabilities and supported image formats.
+ *
+ * @ipp_id: id of IPP module to query
+ * @capabilities: bitmask of drm_exynos_ipp_capability (set by driver)
+ * @reserved: padding
+ * @formats_count: size of formats array (in entries) / number of filled
+ *                formats (set by driver)
+ * @formats_ptr: pointer to formats array or NULL
+ */
+struct drm_exynos_ioctl_ipp_get_caps {
+       __u32 ipp_id;
+       __u32 capabilities;
+       __u32 reserved;
+       __u32 formats_count;
+       __u64 formats_ptr;
+};
+
+enum drm_exynos_ipp_limit_type {
+       /* size (horizontal/vertial) limits, in pixels (min, max, alignment) */
+       DRM_EXYNOS_IPP_LIMIT_TYPE_SIZE          = 0x0001,
+       /* scale ratio (horizonta/vertial), 16.16 fixed point (min, max) */
+       DRM_EXYNOS_IPP_LIMIT_TYPE_SCALE         = 0x0002,
+
+       /* image buffer area */
+       DRM_EXYNOS_IPP_LIMIT_SIZE_BUFFER        = 0x0001 << 16,
+       /* src/dst rectangle area */
+       DRM_EXYNOS_IPP_LIMIT_SIZE_AREA          = 0x0002 << 16,
+       /* src/dst rectangle area when rotation enabled */
+       DRM_EXYNOS_IPP_LIMIT_SIZE_ROTATED       = 0x0003 << 16,
+
+       DRM_EXYNOS_IPP_LIMIT_TYPE_MASK          = 0x000f,
+       DRM_EXYNOS_IPP_LIMIT_SIZE_MASK          = 0x000f << 16,
+};
+
+struct drm_exynos_ipp_limit_val {
+       __u32 min;
+       __u32 max;
+       __u32 align;
+       __u32 reserved;
+};
+
+/**
+ * IPP module limitation.
+ *
+ * @type: limit type (see drm_exynos_ipp_limit_type enum)
+ * @reserved: padding
+ * @h: horizontal limits
+ * @v: vertical limits
+ */
+struct drm_exynos_ipp_limit {
+       __u32 type;
+       __u32 reserved;
+       struct drm_exynos_ipp_limit_val h;
+       struct drm_exynos_ipp_limit_val v;
+};
+
+/**
+ * Get IPP limits for given image format.
+ *
+ * @ipp_id: id of IPP module to query
+ * @fourcc: image format code (see DRM_FORMAT_* in drm_fourcc.h)
+ * @modifier: image format modifier (see DRM_FORMAT_MOD_* in drm_fourcc.h)
+ * @type: source/destination identifier (drm_exynos_ipp_format_flag enum)
+ * @limits_count: size of limits array (in entries) / number of filled entries
+ *              (set by driver)
+ * @limits_ptr: pointer to limits array or NULL
+ */
+struct drm_exynos_ioctl_ipp_get_limits {
+       __u32 ipp_id;
+       __u32 fourcc;
+       __u64 modifier;
+       __u32 type;
+       __u32 limits_count;
+       __u64 limits_ptr;
+};
+
+enum drm_exynos_ipp_task_id {
+       /* buffer described by struct drm_exynos_ipp_task_buffer */
+       DRM_EXYNOS_IPP_TASK_BUFFER              = 0x0001,
+       /* rectangle described by struct drm_exynos_ipp_task_rect */
+       DRM_EXYNOS_IPP_TASK_RECTANGLE           = 0x0002,
+       /* transformation described by struct drm_exynos_ipp_task_transform */
+       DRM_EXYNOS_IPP_TASK_TRANSFORM           = 0x0003,
+       /* alpha configuration described by struct drm_exynos_ipp_task_alpha */
+       DRM_EXYNOS_IPP_TASK_ALPHA               = 0x0004,
+
+       /* source image data (for buffer and rectangle chunks) */
+       DRM_EXYNOS_IPP_TASK_TYPE_SOURCE         = 0x0001 << 16,
+       /* destination image data (for buffer and rectangle chunks) */
+       DRM_EXYNOS_IPP_TASK_TYPE_DESTINATION    = 0x0002 << 16,
+};
+
+/**
+ * Memory buffer with image data.
+ *
+ * @id: must be DRM_EXYNOS_IPP_TASK_BUFFER
+ * other parameters are same as for AddFB2 generic DRM ioctl
+ */
+struct drm_exynos_ipp_task_buffer {
+       __u32   id;
+       __u32   fourcc;
+       __u32   width, height;
+       __u32   gem_id[4];
+       __u32   offset[4];
+       __u32   pitch[4];
+       __u64   modifier;
+};
+
+/**
+ * Rectangle for processing.
+ *
+ * @id: must be DRM_EXYNOS_IPP_TASK_RECTANGLE
+ * @reserved: padding
+ * @x,@y: left corner in pixels
+ * @w,@h: width/height in pixels
+ */
+struct drm_exynos_ipp_task_rect {
+       __u32   id;
+       __u32   reserved;
+       __u32   x;
+       __u32   y;
+       __u32   w;
+       __u32   h;
+};
+
+/**
+ * Image tranformation description.
+ *
+ * @id: must be DRM_EXYNOS_IPP_TASK_TRANSFORM
+ * @rotation: DRM_MODE_ROTATE_* and DRM_MODE_REFLECT_* values
+ */
+struct drm_exynos_ipp_task_transform {
+       __u32   id;
+       __u32   rotation;
+};
+
+/**
+ * Image global alpha configuration for formats without alpha values.
+ *
+ * @id: must be DRM_EXYNOS_IPP_TASK_ALPHA
+ * @value: global alpha value (0-255)
+ */
+struct drm_exynos_ipp_task_alpha {
+       __u32   id;
+       __u32   value;
+};
+
+enum drm_exynos_ipp_flag {
+       /* generate DRM event after processing */
+       DRM_EXYNOS_IPP_FLAG_EVENT       = 0x01,
+       /* dry run, only check task parameters */
+       DRM_EXYNOS_IPP_FLAG_TEST_ONLY   = 0x02,
+       /* non-blocking processing */
+       DRM_EXYNOS_IPP_FLAG_NONBLOCK    = 0x04,
+};
+
+#define DRM_EXYNOS_IPP_FLAGS (DRM_EXYNOS_IPP_FLAG_EVENT |\
+               DRM_EXYNOS_IPP_FLAG_TEST_ONLY | DRM_EXYNOS_IPP_FLAG_NONBLOCK)
+
+/**
+ * Perform image processing described by array of drm_exynos_ipp_task_*
+ * structures (parameters array).
+ *
+ * @ipp_id: id of IPP module to run the task
+ * @flags: bitmask of drm_exynos_ipp_flag values
+ * @reserved: padding
+ * @params_size: size of parameters array (in bytes)
+ * @params_ptr: pointer to parameters array or NULL
+ * @user_data: (optional) data for drm event
+ */
+struct drm_exynos_ioctl_ipp_commit {
+       __u32 ipp_id;
+       __u32 flags;
+       __u32 reserved;
+       __u32 params_size;
+       __u64 params_ptr;
+       __u64 user_data;
+};
+
 #define DRM_EXYNOS_GEM_CREATE          0x00
 #define DRM_EXYNOS_GEM_MAP             0x01
 /* Reserved 0x03 ~ 0x05 for exynos specific gem ioctl */
@@ -147,6 +360,11 @@ struct drm_exynos_g2d_exec {
 #define DRM_EXYNOS_G2D_EXEC            0x22
 
 /* Reserved 0x30 ~ 0x33 for obsolete Exynos IPP ioctls */
+/* IPP - Image Post Processing */
+#define DRM_EXYNOS_IPP_GET_RESOURCES   0x40
+#define DRM_EXYNOS_IPP_GET_CAPS                0x41
+#define DRM_EXYNOS_IPP_GET_LIMITS      0x42
+#define DRM_EXYNOS_IPP_COMMIT          0x43
 
 #define DRM_IOCTL_EXYNOS_GEM_CREATE            DRM_IOWR(DRM_COMMAND_BASE + \
                DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
@@ -165,8 +383,20 @@ struct drm_exynos_g2d_exec {
 #define DRM_IOCTL_EXYNOS_G2D_EXEC              DRM_IOWR(DRM_COMMAND_BASE + \
                DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
 
+#define DRM_IOCTL_EXYNOS_IPP_GET_RESOURCES     DRM_IOWR(DRM_COMMAND_BASE + \
+               DRM_EXYNOS_IPP_GET_RESOURCES, \
+               struct drm_exynos_ioctl_ipp_get_res)
+#define DRM_IOCTL_EXYNOS_IPP_GET_CAPS          DRM_IOWR(DRM_COMMAND_BASE + \
+               DRM_EXYNOS_IPP_GET_CAPS, struct drm_exynos_ioctl_ipp_get_caps)
+#define DRM_IOCTL_EXYNOS_IPP_GET_LIMITS                
DRM_IOWR(DRM_COMMAND_BASE + \
+               DRM_EXYNOS_IPP_GET_LIMITS, \
+               struct drm_exynos_ioctl_ipp_get_limits)
+#define DRM_IOCTL_EXYNOS_IPP_COMMIT            DRM_IOWR(DRM_COMMAND_BASE + \
+               DRM_EXYNOS_IPP_COMMIT, struct drm_exynos_ioctl_ipp_commit)
+
 /* EXYNOS specific events */
 #define DRM_EXYNOS_G2D_EVENT           0x80000000
+#define DRM_EXYNOS_IPP_EVENT           0x80000002
 
 struct drm_exynos_g2d_event {
        struct drm_event        base;
@@ -177,6 +407,16 @@ struct drm_exynos_g2d_event {
        __u32                   reserved;
 };
 
+struct drm_exynos_ipp_event {
+       struct drm_event        base;
+       __u64                   user_data;
+       __u32                   tv_sec;
+       __u32                   tv_usec;
+       __u32                   ipp_id;
+       __u32                   sequence;
+       __u64                   reserved;
+};
+
 #if defined(__cplusplus)
 }
 #endif
diff --git a/include/drm-uapi/i915_drm.h b/include/drm-uapi/i915_drm.h
index 16e452aa12d4..ab80759a2b9b 100644
--- a/include/drm-uapi/i915_drm.h
+++ b/include/drm-uapi/i915_drm.h
@@ -1456,9 +1456,52 @@ struct drm_i915_gem_context_param {
 #define   I915_CONTEXT_MAX_USER_PRIORITY       1023 /* inclusive */
 #define   I915_CONTEXT_DEFAULT_PRIORITY                0
 #define   I915_CONTEXT_MIN_USER_PRIORITY       -1023 /* inclusive */
+       /*
+        * When using the following param, value should be a pointer to
+        * drm_i915_gem_context_param_sseu.
+        */
+#define I915_CONTEXT_PARAM_SSEU                0x7
        __u64 value;
 };
 
+struct drm_i915_gem_context_param_sseu {
+       /*
+        * Engine class & instance to be configured or queried.
+        */
+       __u16 class;
+       __u16 instance;
+
+       /*
+        * Unused for now. Must be cleared to zero.
+        */
+       __u32 rsvd1;
+
+       /*
+        * Mask of slices to enable for the context. Valid values are a subset
+        * of the bitmask value returned for I915_PARAM_SLICE_MASK.
+        */
+       __u64 slice_mask;
+
+       /*
+        * Mask of subslices to enable for the context. Valid values are a
+        * subset of the bitmask value return by I915_PARAM_SUBSLICE_MASK.
+        */
+       __u64 subslice_mask;
+
+       /*
+        * Minimum/Maximum number of EUs to enable per subslice for the
+        * context. min_eus_per_subslice must be inferior or equal to
+        * max_eus_per_subslice.
+        */
+       __u16 min_eus_per_subslice;
+       __u16 max_eus_per_subslice;
+
+       /*
+        * Unused for now. Must be cleared to zero.
+        */
+       __u32 rsvd2;
+};
+
 enum drm_i915_oa_format {
        I915_OA_FORMAT_A13 = 1,     /* HSW only */
        I915_OA_FORMAT_A29,         /* HSW only */
diff --git a/include/drm-uapi/msm_drm.h b/include/drm-uapi/msm_drm.h
index bbbaffad772d..c06d0a5bdd80 100644
--- a/include/drm-uapi/msm_drm.h
+++ b/include/drm-uapi/msm_drm.h
@@ -201,10 +201,12 @@ struct drm_msm_gem_submit_bo {
 #define MSM_SUBMIT_NO_IMPLICIT   0x80000000 /* disable implicit sync */
 #define MSM_SUBMIT_FENCE_FD_IN   0x40000000 /* enable input fence_fd */
 #define MSM_SUBMIT_FENCE_FD_OUT  0x20000000 /* enable output fence_fd */
+#define MSM_SUBMIT_SUDO          0x10000000 /* run submitted cmds from RB */
 #define MSM_SUBMIT_FLAGS                ( \
                MSM_SUBMIT_NO_IMPLICIT   | \
                MSM_SUBMIT_FENCE_FD_IN   | \
                MSM_SUBMIT_FENCE_FD_OUT  | \
+               MSM_SUBMIT_SUDO          | \
                0)
 
 /* Each cmdstream submit consists of a table of buffers involved, and
diff --git a/include/drm-uapi/tegra_drm.h b/include/drm-uapi/tegra_drm.h
index 12f9bf848db1..6c07919c04e9 100644
--- a/include/drm-uapi/tegra_drm.h
+++ b/include/drm-uapi/tegra_drm.h
@@ -32,143 +32,615 @@ extern "C" {
 #define DRM_TEGRA_GEM_CREATE_TILED     (1 << 0)
 #define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1)
 
+/**
+ * struct drm_tegra_gem_create - parameters for the GEM object creation IOCTL
+ */
 struct drm_tegra_gem_create {
+       /**
+        * @size:
+        *
+        * The size, in bytes, of the buffer object to be created.
+        */
        __u64 size;
+
+       /**
+        * @flags:
+        *
+        * A bitmask of flags that influence the creation of GEM objects:
+        *
+        * DRM_TEGRA_GEM_CREATE_TILED
+        *   Use the 16x16 tiling format for this buffer.
+        *
+        * DRM_TEGRA_GEM_CREATE_BOTTOM_UP
+        *   The buffer has a bottom-up layout.
+        */
        __u32 flags;
+
+       /**
+        * @handle:
+        *
+        * The handle of the created GEM object. Set by the kernel upon
+        * successful completion of the IOCTL.
+        */
        __u32 handle;
 };
 
+/**
+ * struct drm_tegra_gem_mmap - parameters for the GEM mmap IOCTL
+ */
 struct drm_tegra_gem_mmap {
+       /**
+        * @handle:
+        *
+        * Handle of the GEM object to obtain an mmap offset for.
+        */
        __u32 handle;
+
+       /**
+        * @pad:
+        *
+        * Structure padding that may be used in the future. Must be 0.
+        */
        __u32 pad;
+
+       /**
+        * @offset:
+        *
+        * The mmap offset for the given GEM object. Set by the kernel upon
+        * successful completion of the IOCTL.
+        */
        __u64 offset;
 };
 
+/**
+ * struct drm_tegra_syncpt_read - parameters for the read syncpoint IOCTL
+ */
 struct drm_tegra_syncpt_read {
+       /**
+        * @id:
+        *
+        * ID of the syncpoint to read the current value from.
+        */
        __u32 id;
+
+       /**
+        * @value:
+        *
+        * The current syncpoint value. Set by the kernel upon successful
+        * completion of the IOCTL.
+        */
        __u32 value;
 };
 
+/**
+ * struct drm_tegra_syncpt_incr - parameters for the increment syncpoint IOCTL
+ */
 struct drm_tegra_syncpt_incr {
+       /**
+        * @id:
+        *
+        * ID of the syncpoint to increment.
+        */
        __u32 id;
+
+       /**
+        * @pad:
+        *
+        * Structure padding that may be used in the future. Must be 0.
+        */
        __u32 pad;
 };
 
+/**
+ * struct drm_tegra_syncpt_wait - parameters for the wait syncpoint IOCTL
+ */
 struct drm_tegra_syncpt_wait {
+       /**
+        * @id:
+        *
+        * ID of the syncpoint to wait on.
+        */
        __u32 id;
+
+       /**
+        * @thresh:
+        *
+        * Threshold value for which to wait.
+        */
        __u32 thresh;
+
+       /**
+        * @timeout:
+        *
+        * Timeout, in milliseconds, to wait.
+        */
        __u32 timeout;
+
+       /**
+        * @value:
+        *
+        * The new syncpoint value after the wait. Set by the kernel upon
+        * successful completion of the IOCTL.
+        */
        __u32 value;
 };
 
 #define DRM_TEGRA_NO_TIMEOUT   (0xffffffff)
 
+/**
+ * struct drm_tegra_open_channel - parameters for the open channel IOCTL
+ */
 struct drm_tegra_open_channel {
+       /**
+        * @client:
+        *
+        * The client ID for this channel.
+        */
        __u32 client;
+
+       /**
+        * @pad:
+        *
+        * Structure padding that may be used in the future. Must be 0.
+        */
        __u32 pad;
+
+       /**
+        * @context:
+        *
+        * The application context of this channel. Set by the kernel upon
+        * successful completion of the IOCTL. This context needs to be passed
+        * to the DRM_TEGRA_CHANNEL_CLOSE or the DRM_TEGRA_SUBMIT IOCTLs.
+        */
        __u64 context;
 };
 
+/**
+ * struct drm_tegra_close_channel - parameters for the close channel IOCTL
+ */
 struct drm_tegra_close_channel {
+       /**
+        * @context:
+        *
+        * The application context of this channel. This is obtained from the
+        * DRM_TEGRA_OPEN_CHANNEL IOCTL.
+        */
        __u64 context;
 };
 
+/**
+ * struct drm_tegra_get_syncpt - parameters for the get syncpoint IOCTL
+ */
 struct drm_tegra_get_syncpt {
+       /**
+        * @context:
+        *
+        * The application context identifying the channel for which to obtain
+        * the syncpoint ID.
+        */
        __u64 context;
+
+       /**
+        * @index:
+        *
+        * Index of the client syncpoint for which to obtain the ID.
+        */
        __u32 index;
+
+       /**
+        * @id:
+        *
+        * The ID of the given syncpoint. Set by the kernel upon successful
+        * completion of the IOCTL.
+        */
        __u32 id;
 };
 
+/**
+ * struct drm_tegra_get_syncpt_base - parameters for the get wait base IOCTL
+ */
 struct drm_tegra_get_syncpt_base {
+       /**
+        * @context:
+        *
+        * The application context identifying for which channel to obtain the
+        * wait base.
+        */
        __u64 context;
+
+       /**
+        * @syncpt:
+        *
+        * ID of the syncpoint for which to obtain the wait base.
+        */
        __u32 syncpt;
+
+       /**
+        * @id:
+        *
+        * The ID of the wait base corresponding to the client syncpoint. Set
+        * by the kernel upon successful completion of the IOCTL.
+        */
        __u32 id;
 };
 
+/**
+ * struct drm_tegra_syncpt - syncpoint increment operation
+ */
 struct drm_tegra_syncpt {
+       /**
+        * @id:
+        *
+        * ID of the syncpoint to operate on.
+        */
        __u32 id;
+
+       /**
+        * @incrs:
+        *
+        * Number of increments to perform for the syncpoint.
+        */
        __u32 incrs;
 };
 
+/**
+ * struct drm_tegra_cmdbuf - structure describing a command buffer
+ */
 struct drm_tegra_cmdbuf {
+       /**
+        * @handle:
+        *
+        * Handle to a GEM object containing the command buffer.
+        */
        __u32 handle;
+
+       /**
+        * @offset:
+        *
+        * Offset, in bytes, into the GEM object identified by @handle at
+        * which the command buffer starts.
+        */
        __u32 offset;
+
+       /**
+        * @words:
+        *
+        * Number of 32-bit words in this command buffer.
+        */
        __u32 words;
+
+       /**
+        * @pad:
+        *
+        * Structure padding that may be used in the future. Must be 0.
+        */
        __u32 pad;
 };
 
+/**
+ * struct drm_tegra_reloc - GEM object relocation structure
+ */
 struct drm_tegra_reloc {
        struct {
+               /**
+                * @cmdbuf.handle:
+                *
+                * Handle to the GEM object containing the command buffer for
+                * which to perform this GEM object relocation.
+                */
                __u32 handle;
+
+               /**
+                * @cmdbuf.offset:
+                *
+                * Offset, in bytes, into the command buffer at which to
+                * insert the relocated address.
+                */
                __u32 offset;
        } cmdbuf;
        struct {
+               /**
+                * @target.handle:
+                *
+                * Handle to the GEM object to be relocated.
+                */
                __u32 handle;
+
+               /**
+                * @target.offset:
+                *
+                * Offset, in bytes, into the target GEM object at which the
+                * relocated data starts.
+                */
                __u32 offset;
        } target;
+
+       /**
+        * @shift:
+        *
+        * The number of bits by which to shift relocated addresses.
+        */
        __u32 shift;
+
+       /**
+        * @pad:
+        *
+        * Structure padding that may be used in the future. Must be 0.
+        */
        __u32 pad;
 };
 
+/**
+ * struct drm_tegra_waitchk - wait check structure
+ */
 struct drm_tegra_waitchk {
+       /**
+        * @handle:
+        *
+        * Handle to the GEM object containing a command stream on which to
+        * perform the wait check.
+        */
        __u32 handle;
+
+       /**
+        * @offset:
+        *
+        * Offset, in bytes, of the location in the command stream to perform
+        * the wait check on.
+        */
        __u32 offset;
+
+       /**
+        * @syncpt:
+        *
+        * ID of the syncpoint to wait check.
+        */
        __u32 syncpt;
+
+       /**
+        * @thresh:
+        *
+        * Threshold value for which to check.
+        */
        __u32 thresh;
 };
 
+/**
+ * struct drm_tegra_submit - job submission structure
+ */
 struct drm_tegra_submit {
+       /**
+        * @context:
+        *
+        * The application context identifying the channel to use for the
+        * execution of this job.
+        */
        __u64 context;
+
+       /**
+        * @num_syncpts:
+        *
+        * The number of syncpoints operated on by this job. This defines the
+        * length of the array pointed to by @syncpts.
+        */
        __u32 num_syncpts;
+
+       /**
+        * @num_cmdbufs:
+        *
+        * The number of command buffers to execute as part of this job. This
+        * defines the length of the array pointed to by @cmdbufs.
+        */
        __u32 num_cmdbufs;
+
+       /**
+        * @num_relocs:
+        *
+        * The number of relocations to perform before executing this job.
+        * This defines the length of the array pointed to by @relocs.
+        */
        __u32 num_relocs;
+
+       /**
+        * @num_waitchks:
+        *
+        * The number of wait checks to perform as part of this job. This
+        * defines the length of the array pointed to by @waitchks.
+        */
        __u32 num_waitchks;
+
+       /**
+        * @waitchk_mask:
+        *
+        * Bitmask of valid wait checks.
+        */
        __u32 waitchk_mask;
+
+       /**
+        * @timeout:
+        *
+        * Timeout, in milliseconds, before this job is cancelled.
+        */
        __u32 timeout;
+
+       /**
+        * @syncpts:
+        *
+        * A pointer to an array of &struct drm_tegra_syncpt structures that
+        * specify the syncpoint operations performed as part of this job.
+        * The number of elements in the array must be equal to the value
+        * given by @num_syncpts.
+        */
        __u64 syncpts;
+
+       /**
+        * @cmdbufs:
+        *
+        * A pointer to an array of &struct drm_tegra_cmdbuf structures that
+        * define the command buffers to execute as part of this job. The
+        * number of elements in the array must be equal to the value given
+        * by @num_syncpts.
+        */
        __u64 cmdbufs;
+
+       /**
+        * @relocs:
+        *
+        * A pointer to an array of &struct drm_tegra_reloc structures that
+        * specify the relocations that need to be performed before executing
+        * this job. The number of elements in the array must be equal to the
+        * value given by @num_relocs.
+        */
        __u64 relocs;
+
+       /**
+        * @waitchks:
+        *
+        * A pointer to an array of &struct drm_tegra_waitchk structures that
+        * specify the wait checks to be performed while executing this job.
+        * The number of elements in the array must be equal to the value
+        * given by @num_waitchks.
+        */
        __u64 waitchks;
-       __u32 fence;            /* Return value */
 
-       __u32 reserved[5];      /* future expansion */
+       /**
+        * @fence:
+        *
+        * The threshold of the syncpoint associated with this job after it
+        * has been completed. Set by the kernel upon successful completion of
+        * the IOCTL. This can be used with the DRM_TEGRA_SYNCPT_WAIT IOCTL to
+        * wait for this job to be finished.
+        */
+       __u32 fence;
+
+       /**
+        * @reserved:
+        *
+        * This field is reserved for future use. Must be 0.
+        */
+       __u32 reserved[5];
 };
 
 #define DRM_TEGRA_GEM_TILING_MODE_PITCH 0
 #define DRM_TEGRA_GEM_TILING_MODE_TILED 1
 #define DRM_TEGRA_GEM_TILING_MODE_BLOCK 2
 
+/**
+ * struct drm_tegra_gem_set_tiling - parameters for the set tiling IOCTL
+ */
 struct drm_tegra_gem_set_tiling {
-       /* input */
+       /**
+        * @handle:
+        *
+        * Handle to the GEM object for which to set the tiling parameters.
+        */
        __u32 handle;
+
+       /**
+        * @mode:
+        *
+        * The tiling mode to set. Must be one of:
+        *
+        * DRM_TEGRA_GEM_TILING_MODE_PITCH
+        *   pitch linear format
+        *
+        * DRM_TEGRA_GEM_TILING_MODE_TILED
+        *   16x16 tiling format
+        *
+        * DRM_TEGRA_GEM_TILING_MODE_BLOCK
+        *   16Bx2 tiling format
+        */
        __u32 mode;
+
+       /**
+        * @value:
+        *
+        * The value to set for the tiling mode parameter.
+        */
        __u32 value;
+
+       /**
+        * @pad:
+        *
+        * Structure padding that may be used in the future. Must be 0.
+        */
        __u32 pad;
 };
 
+/**
+ * struct drm_tegra_gem_get_tiling - parameters for the get tiling IOCTL
+ */
 struct drm_tegra_gem_get_tiling {
-       /* input */
+       /**
+        * @handle:
+        *
+        * Handle to the GEM object for which to query the tiling parameters.
+        */
        __u32 handle;
-       /* output */
+
+       /**
+        * @mode:
+        *
+        * The tiling mode currently associated with the GEM object. Set by
+        * the kernel upon successful completion of the IOCTL.
+        */
        __u32 mode;
+
+       /**
+        * @value:
+        *
+        * The tiling mode parameter currently associated with the GEM object.
+        * Set by the kernel upon successful completion of the IOCTL.
+        */
        __u32 value;
+
+       /**
+        * @pad:
+        *
+        * Structure padding that may be used in the future. Must be 0.
+        */
        __u32 pad;
 };
 
 #define DRM_TEGRA_GEM_BOTTOM_UP                (1 << 0)
 #define DRM_TEGRA_GEM_FLAGS            (DRM_TEGRA_GEM_BOTTOM_UP)
 
+/**
+ * struct drm_tegra_gem_set_flags - parameters for the set flags IOCTL
+ */
 struct drm_tegra_gem_set_flags {
-       /* input */
+       /**
+        * @handle:
+        *
+        * Handle to the GEM object for which to set the flags.
+        */
        __u32 handle;
-       /* output */
+
+       /**
+        * @flags:
+        *
+        * The flags to set for the GEM object.
+        */
        __u32 flags;
 };
 
+/**
+ * struct drm_tegra_gem_get_flags - parameters for the get flags IOCTL
+ */
 struct drm_tegra_gem_get_flags {
-       /* input */
+       /**
+        * @handle:
+        *
+        * Handle to the GEM object for which to query the flags.
+        */
        __u32 handle;
-       /* output */
+
+       /**
+        * @flags:
+        *
+        * The flags currently associated with the GEM object. Set by the
+        * kernel upon successful completion of the IOCTL.
+        */
        __u32 flags;
 };
 
@@ -193,7 +665,7 @@ struct drm_tegra_gem_get_flags {
 #define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + 
DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr)
 #define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + 
DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait)
 #define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + 
DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel)
-#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + 
DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_open_channel)
+#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + 
DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_close_channel)
 #define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + 
DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt)
 #define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, 
struct drm_tegra_submit)
 #define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + 
DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base)
diff --git a/include/drm-uapi/vc4_drm.h b/include/drm-uapi/vc4_drm.h
index 4117117b4204..31f50de39acb 100644
--- a/include/drm-uapi/vc4_drm.h
+++ b/include/drm-uapi/vc4_drm.h
@@ -183,10 +183,17 @@ struct drm_vc4_submit_cl {
        /* ID of the perfmon to attach to this job. 0 means no perfmon. */
        __u32 perfmonid;
 
-       /* Unused field to align this struct on 64 bits. Must be set to 0.
-        * If one ever needs to add an u32 field to this struct, this field
-        * can be used.
+       /* Syncobj handle to wait on. If set, processing of this render job
+        * will not start until the syncobj is signaled. 0 means ignore.
         */
+       __u32 in_sync;
+
+       /* Syncobj handle to export fence to. If set, the fence in the syncobj
+        * will be replaced with a fence that signals upon completion of this
+        * render job. 0 means ignore.
+        */
+       __u32 out_sync;
+
        __u32 pad2;
 };
 
diff --git a/include/drm-uapi/virtgpu_drm.h b/include/drm-uapi/virtgpu_drm.h
index 91a31ffed828..9a781f0611df 100644
--- a/include/drm-uapi/virtgpu_drm.h
+++ b/include/drm-uapi/virtgpu_drm.h
@@ -63,6 +63,7 @@ struct drm_virtgpu_execbuffer {
 };
 
 #define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */
+#define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2 /* do we have the capset fix */
 
 struct drm_virtgpu_getparam {
        __u64 param;
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to