mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-25 08:11:45 +00:00
172 lines
5.8 KiB
Diff
172 lines
5.8 KiB
Diff
From e0cc638d05b59eb60cd268106d883e1913c62de5 Mon Sep 17 00:00:00 2001
|
|
From: Qiang Yu <yuq825@gmail.com>
|
|
Date: Tue, 19 Jun 2018 22:22:09 +0800
|
|
Subject: [PATCH 073/146] drm/lima: add DRM_LIMA_GEM_MOD ioctl
|
|
|
|
Used to share buffer format across processes.
|
|
|
|
Signed-off-by: Qiang Yu <yuq825@gmail.com>
|
|
---
|
|
drivers/gpu/drm/lima/lima_drv.c | 13 ++++++++++++
|
|
drivers/gpu/drm/lima/lima_gem.c | 32 ++++++++++++++++++++++++++++++
|
|
drivers/gpu/drm/lima/lima_gem.h | 2 ++
|
|
drivers/gpu/drm/lima/lima_object.c | 2 ++
|
|
drivers/gpu/drm/lima/lima_object.h | 2 ++
|
|
include/uapi/drm/lima_drm.h | 11 ++++++++++
|
|
6 files changed, 62 insertions(+)
|
|
|
|
diff --git a/drivers/gpu/drm/lima/lima_drv.c b/drivers/gpu/drm/lima/lima_drv.c
|
|
index e7004e4e1853..536d0d442970 100644
|
|
--- a/drivers/gpu/drm/lima/lima_drv.c
|
|
+++ b/drivers/gpu/drm/lima/lima_drv.c
|
|
@@ -243,6 +243,18 @@ static int lima_ioctl_ctx(struct drm_device *dev, void *data, struct drm_file *f
|
|
return -EINVAL;
|
|
}
|
|
|
|
+static int lima_ioctl_gem_mod(struct drm_device *dev, void *data, struct drm_file *file)
|
|
+{
|
|
+ struct drm_lima_gem_mod *args = data;
|
|
+
|
|
+ if (args->op == LIMA_GEM_MOD_OP_GET)
|
|
+ return lima_gem_get_modifier(file, args->handle, &args->modifier);
|
|
+ else if (args->op == LIMA_GEM_MOD_OP_SET)
|
|
+ return lima_gem_set_modifier(file, args->handle, args->modifier);
|
|
+
|
|
+ return -EINVAL;
|
|
+}
|
|
+
|
|
static int lima_drm_driver_open(struct drm_device *dev, struct drm_file *file)
|
|
{
|
|
int err;
|
|
@@ -287,6 +299,7 @@ static const struct drm_ioctl_desc lima_drm_driver_ioctls[] = {
|
|
DRM_IOCTL_DEF_DRV(LIMA_WAIT_FENCE, lima_ioctl_wait_fence, DRM_AUTH|DRM_RENDER_ALLOW),
|
|
DRM_IOCTL_DEF_DRV(LIMA_GEM_WAIT, lima_ioctl_gem_wait, DRM_AUTH|DRM_RENDER_ALLOW),
|
|
DRM_IOCTL_DEF_DRV(LIMA_CTX, lima_ioctl_ctx, DRM_AUTH|DRM_RENDER_ALLOW),
|
|
+ DRM_IOCTL_DEF_DRV(LIMA_GEM_MOD, lima_ioctl_gem_mod, DRM_AUTH|DRM_RENDER_ALLOW),
|
|
};
|
|
|
|
static const struct file_operations lima_drm_driver_fops = {
|
|
diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c
|
|
index ee903ce17494..02bf76113a66 100644
|
|
--- a/drivers/gpu/drm/lima/lima_gem.c
|
|
+++ b/drivers/gpu/drm/lima/lima_gem.c
|
|
@@ -444,3 +444,35 @@ int lima_gem_wait(struct drm_file *file, u32 handle, u32 op, u64 timeout_ns)
|
|
drm_gem_object_put_unlocked(obj);
|
|
return ret;
|
|
}
|
|
+
|
|
+int lima_gem_get_modifier(struct drm_file *file, u32 handle, u64 *modifier)
|
|
+{
|
|
+ struct drm_gem_object *obj;
|
|
+ struct lima_bo *bo;
|
|
+
|
|
+ obj = drm_gem_object_lookup(file, handle);
|
|
+ if (!obj)
|
|
+ return -ENOENT;
|
|
+
|
|
+ bo = to_lima_bo(obj);
|
|
+ *modifier = bo->modifier;
|
|
+
|
|
+ drm_gem_object_put_unlocked(obj);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+int lima_gem_set_modifier(struct drm_file *file, u32 handle, u64 modifier)
|
|
+{
|
|
+ struct drm_gem_object *obj;
|
|
+ struct lima_bo *bo;
|
|
+
|
|
+ obj = drm_gem_object_lookup(file, handle);
|
|
+ if (!obj)
|
|
+ return -ENOENT;
|
|
+
|
|
+ bo = to_lima_bo(obj);
|
|
+ bo->modifier = modifier;
|
|
+
|
|
+ drm_gem_object_put_unlocked(obj);
|
|
+ return 0;
|
|
+}
|
|
diff --git a/drivers/gpu/drm/lima/lima_gem.h b/drivers/gpu/drm/lima/lima_gem.h
|
|
index 03daad9a85af..da6968fab6bb 100644
|
|
--- a/drivers/gpu/drm/lima/lima_gem.h
|
|
+++ b/drivers/gpu/drm/lima/lima_gem.h
|
|
@@ -19,5 +19,7 @@ int lima_gem_va_map(struct drm_file *file, u32 handle, u32 flags, u32 va);
|
|
int lima_gem_va_unmap(struct drm_file *file, u32 handle, u32 va);
|
|
int lima_gem_submit(struct drm_file *file, struct lima_submit *submit);
|
|
int lima_gem_wait(struct drm_file *file, u32 handle, u32 op, u64 timeout_ns);
|
|
+int lima_gem_get_modifier(struct drm_file *file, u32 handle, u64 *modifier);
|
|
+int lima_gem_set_modifier(struct drm_file *file, u32 handle, u64 modifier);
|
|
|
|
#endif
|
|
diff --git a/drivers/gpu/drm/lima/lima_object.c b/drivers/gpu/drm/lima/lima_object.c
|
|
index c44e1f81abf8..34d9b4dc2df6 100644
|
|
--- a/drivers/gpu/drm/lima/lima_object.c
|
|
+++ b/drivers/gpu/drm/lima/lima_object.c
|
|
@@ -2,6 +2,7 @@
|
|
/* Copyright 2018 Qiang Yu <yuq825@gmail.com> */
|
|
|
|
#include <drm/drm_prime.h>
|
|
+#include <drm/drm_fourcc.h>
|
|
|
|
#include "lima_object.h"
|
|
|
|
@@ -70,6 +71,7 @@ struct lima_bo *lima_bo_create(struct lima_device *dev, u64 size,
|
|
if (err)
|
|
goto err_out;
|
|
|
|
+ bo->modifier = DRM_FORMAT_MOD_INVALID;
|
|
return bo;
|
|
|
|
err_out:
|
|
diff --git a/drivers/gpu/drm/lima/lima_object.h b/drivers/gpu/drm/lima/lima_object.h
|
|
index 7286514c0f07..f854a25637f2 100644
|
|
--- a/drivers/gpu/drm/lima/lima_object.h
|
|
+++ b/drivers/gpu/drm/lima/lima_object.h
|
|
@@ -19,6 +19,8 @@ struct lima_bo {
|
|
struct ttm_bo_kmap_obj kmap;
|
|
|
|
struct list_head va;
|
|
+
|
|
+ u64 modifier;
|
|
};
|
|
|
|
static inline struct lima_bo *
|
|
diff --git a/include/uapi/drm/lima_drm.h b/include/uapi/drm/lima_drm.h
|
|
index e453bc4f0de4..77cb39af1a45 100644
|
|
--- a/include/uapi/drm/lima_drm.h
|
|
+++ b/include/uapi/drm/lima_drm.h
|
|
@@ -152,6 +152,15 @@ struct drm_lima_ctx {
|
|
__u32 id; /* in/out */
|
|
};
|
|
|
|
+#define LIMA_GEM_MOD_OP_GET 0
|
|
+#define LIMA_GEM_MOD_OP_SET 1
|
|
+
|
|
+struct drm_lima_gem_mod {
|
|
+ __u32 handle; /* in */
|
|
+ __u32 op; /* in */
|
|
+ __u64 modifier; /* in/out */
|
|
+};
|
|
+
|
|
#define DRM_LIMA_INFO 0x00
|
|
#define DRM_LIMA_GEM_CREATE 0x01
|
|
#define DRM_LIMA_GEM_INFO 0x02
|
|
@@ -160,6 +169,7 @@ struct drm_lima_ctx {
|
|
#define DRM_LIMA_WAIT_FENCE 0x05
|
|
#define DRM_LIMA_GEM_WAIT 0x06
|
|
#define DRM_LIMA_CTX 0x07
|
|
+#define DRM_LIMA_GEM_MOD 0x08
|
|
|
|
#define DRM_IOCTL_LIMA_INFO DRM_IOR(DRM_COMMAND_BASE + DRM_LIMA_INFO, struct drm_lima_info)
|
|
#define DRM_IOCTL_LIMA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_LIMA_GEM_CREATE, struct drm_lima_gem_create)
|
|
@@ -169,6 +179,7 @@ struct drm_lima_ctx {
|
|
#define DRM_IOCTL_LIMA_WAIT_FENCE DRM_IOW(DRM_COMMAND_BASE + DRM_LIMA_WAIT_FENCE, struct drm_lima_wait_fence)
|
|
#define DRM_IOCTL_LIMA_GEM_WAIT DRM_IOW(DRM_COMMAND_BASE + DRM_LIMA_GEM_WAIT, struct drm_lima_gem_wait)
|
|
#define DRM_IOCTL_LIMA_CTX DRM_IOWR(DRM_COMMAND_BASE + DRM_LIMA_CTX, struct drm_lima_ctx)
|
|
+#define DRM_IOCTL_LIMA_GEM_MOD DRM_IOWR(DRM_COMMAND_BASE + DRM_LIMA_GEM_MOD, struct drm_lima_gem_mod)
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
--
|
|
2.17.1
|
|
|