aboutsummaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/lima/lima_gem_prime.c
diff options
context:
space:
mode:
authorDmitry Torokhov <[email protected]>2019-07-15 09:42:32 -0700
committerDmitry Torokhov <[email protected]>2019-07-15 09:42:32 -0700
commitecb41832bd2a7a3f8ac93527cec5e51e3827daed (patch)
treea382a3719eca9ac8a22ae7f1715d0bd4843dc8e2 /drivers/gpu/drm/lima/lima_gem_prime.c
parentd38b6cf50a6b911ee46683330f3af17fcceca509 (diff)
parent0ecfebd2b52404ae0c54a878c872bb93363ada36 (diff)
Merge tag 'v5.2' into next
Sync up with mainline to resolve conflicts in iforce driver.
Diffstat (limited to 'drivers/gpu/drm/lima/lima_gem_prime.c')
-rw-r--r--drivers/gpu/drm/lima/lima_gem_prime.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/drivers/gpu/drm/lima/lima_gem_prime.c b/drivers/gpu/drm/lima/lima_gem_prime.c
new file mode 100644
index 000000000000..9c6d9f1dba55
--- /dev/null
+++ b/drivers/gpu/drm/lima/lima_gem_prime.c
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/* Copyright 2018-2019 Qiang Yu <[email protected]> */
+
+#include <linux/dma-buf.h>
+#include <drm/drm_prime.h>
+#include <drm/drm_drv.h>
+#include <drm/drm_file.h>
+
+#include "lima_device.h"
+#include "lima_object.h"
+#include "lima_gem.h"
+#include "lima_gem_prime.h"
+
+struct drm_gem_object *lima_gem_prime_import_sg_table(
+ struct drm_device *dev, struct dma_buf_attachment *attach,
+ struct sg_table *sgt)
+{
+ struct lima_device *ldev = to_lima_dev(dev);
+ struct lima_bo *bo;
+
+ bo = lima_bo_create(ldev, attach->dmabuf->size, 0, sgt,
+ attach->dmabuf->resv);
+ if (IS_ERR(bo))
+ return ERR_CAST(bo);
+
+ return &bo->gem;
+}
+
+struct sg_table *lima_gem_prime_get_sg_table(struct drm_gem_object *obj)
+{
+ struct lima_bo *bo = to_lima_bo(obj);
+ int npages = obj->size >> PAGE_SHIFT;
+
+ return drm_prime_pages_to_sg(bo->pages, npages);
+}
+
+int lima_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
+{
+ int ret;
+
+ ret = drm_gem_mmap_obj(obj, obj->size, vma);
+ if (ret)
+ return ret;
+
+ lima_set_vma_flags(vma);
+ return 0;
+}