aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1882-drm-amdgpu-rename-amdgpu_prime.-ch-into-amdgpu_dma_b.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1882-drm-amdgpu-rename-amdgpu_prime.-ch-into-amdgpu_dma_b.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1882-drm-amdgpu-rename-amdgpu_prime.-ch-into-amdgpu_dma_b.patch348
1 files changed, 348 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1882-drm-amdgpu-rename-amdgpu_prime.-ch-into-amdgpu_dma_b.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1882-drm-amdgpu-rename-amdgpu_prime.-ch-into-amdgpu_dma_b.patch
new file mode 100644
index 00000000..85e13845
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1882-drm-amdgpu-rename-amdgpu_prime.-ch-into-amdgpu_dma_b.patch
@@ -0,0 +1,348 @@
+From e3472ca49aec1571cf186ee8f828b4e779a2e617 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Mon, 6 May 2019 13:22:06 +0200
+Subject: [PATCH 1882/2940] drm/amdgpu: rename amdgpu_prime.[ch] into
+ amdgpu_dma_buf.[ch]
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We are getting a dma-buf implementation completely separate from drm prime,
+so rename the files now and cleanup the code a bit.
+
+No functional change.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Chaudhary Amit Kumar <Chaudharyamit.Kumar@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/Makefile | 2 +-
+ .../{amdgpu_prime.c => amdgpu_dma_buf.c} | 131 +++++++++---------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h | 46 ++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +-
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h | 14 --
+ 5 files changed, 114 insertions(+), 81 deletions(-)
+ rename drivers/gpu/drm/amd/amdgpu/{amdgpu_prime.c => amdgpu_dma_buf.c} (93%)
+ create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile
+index bdf6f7f2d3a7..5113da10e829 100644
+--- a/drivers/gpu/drm/amd/amdgpu/Makefile
++++ b/drivers/gpu/drm/amd/amdgpu/Makefile
+@@ -48,7 +48,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \
+ amdgpu_cs.o amdgpu_bios.o amdgpu_benchmark.o amdgpu_test.o \
+ amdgpu_pm.o atombios_dp.o amdgpu_afmt.o amdgpu_trace_points.o \
+ atombios_encoders.o amdgpu_sa.o atombios_i2c.o \
+- amdgpu_prime.o amdgpu_vm.o amdgpu_ib.o amdgpu_pll.o \
++ amdgpu_dma_buf.o amdgpu_vm.o amdgpu_ib.o amdgpu_pll.o \
+ amdgpu_ucode.o amdgpu_bo_list.o amdgpu_ctx.o amdgpu_sync.o \
+ amdgpu_gtt_mgr.o amdgpu_vram_mgr.o amdgpu_virt.o amdgpu_atomfirmware.o \
+ amdgpu_vf_error.o amdgpu_sched.o amdgpu_debugfs.o amdgpu_ids.o \
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
+similarity index 93%
+rename from drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+rename to drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
+index 60aac9afd3c8..501c69eacab3 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright 2012 Advanced Micro Devices, Inc.
++ * Copyright 2019 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -105,7 +105,8 @@ void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
+ * Returns:
+ * 0 on success or a negative error code on failure.
+ */
+-int amdgpu_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
++int amdgpu_gem_prime_mmap(struct drm_gem_object *obj,
++ struct vm_area_struct *vma)
+ {
+ struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
+ struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
+@@ -139,57 +140,6 @@ int amdgpu_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma
+ return ret;
+ }
+
+-/**
+- * amdgpu_gem_prime_import_sg_table - &drm_driver.gem_prime_import_sg_table
+- * implementation
+- * @dev: DRM device
+- * @attach: DMA-buf attachment
+- * @sg: Scatter/gather table
+- *
+- * Imports shared DMA buffer memory exported by another device.
+- *
+- * Returns:
+- * A new GEM BO of the given DRM device, representing the memory
+- * described by the given DMA-buf attachment and scatter/gather table.
+- */
+-struct drm_gem_object *
+-amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
+- struct dma_buf_attachment *attach,
+- struct sg_table *sg)
+-{
+- struct reservation_object *resv = attach->dmabuf->resv;
+- struct amdgpu_device *adev = dev->dev_private;
+- struct amdgpu_bo *bo;
+- struct amdgpu_bo_param bp;
+- int ret;
+-
+- memset(&bp, 0, sizeof(bp));
+- bp.size = attach->dmabuf->size;
+- bp.byte_align = PAGE_SIZE;
+- bp.domain = AMDGPU_GEM_DOMAIN_CPU;
+- bp.flags = 0;
+- bp.type = ttm_bo_type_sg;
+- bp.resv = resv;
+- ww_mutex_lock(&resv->lock, NULL);
+- ret = amdgpu_bo_create(adev, &bp, &bo);
+- if (ret)
+- goto error;
+-
+- bo->tbo.sg = sg;
+- bo->tbo.ttm->sg = sg;
+- bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
+- bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
+- if (attach->dmabuf->ops != &amdgpu_dmabuf_ops)
+- bo->prime_shared_count = 1;
+-
+- ww_mutex_unlock(&resv->lock);
+- return &bo->gem_base;
+-
+-error:
+- ww_mutex_unlock(&resv->lock);
+- return ERR_PTR(ret);
+-}
+-
+ static int
+ __reservation_object_make_exclusive(struct reservation_object *obj)
+ {
+@@ -233,7 +183,7 @@ __reservation_object_make_exclusive(struct reservation_object *obj)
+ }
+
+ /**
+- * amdgpu_gem_map_attach - &dma_buf_ops.attach implementation
++ * amdgpu_dma_buf_map_attach - &dma_buf_ops.attach implementation
+ * @dma_buf: shared DMA buffer
+ * @attach: DMA-buf attachment
+ *
+@@ -244,8 +194,8 @@ __reservation_object_make_exclusive(struct reservation_object *obj)
+ * Returns:
+ * 0 on success or a negative error code on failure.
+ */
+-static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
+- struct dma_buf_attachment *attach)
++static int amdgpu_dma_buf_map_attach(struct dma_buf *dma_buf,
++ struct dma_buf_attachment *attach)
+ {
+ struct drm_gem_object *obj = dma_buf->priv;
+ struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
+@@ -293,15 +243,15 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
+ }
+
+ /**
+- * amdgpu_gem_map_detach - &dma_buf_ops.detach implementation
++ * amdgpu_dma_buf_map_detach - &dma_buf_ops.detach implementation
+ * @dma_buf: Shared DMA buffer
+ * @attach: DMA-buf attachment
+ *
+ * This is called when a shared DMA buffer no longer needs to be accessible by
+ * another device. For now, simply unpins the buffer from GTT.
+ */
+-static void amdgpu_gem_map_detach(struct dma_buf *dma_buf,
+- struct dma_buf_attachment *attach)
++static void amdgpu_dma_buf_map_detach(struct dma_buf *dma_buf,
++ struct dma_buf_attachment *attach)
+ {
+ struct drm_gem_object *obj = dma_buf->priv;
+ struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
+@@ -336,7 +286,7 @@ struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
+ }
+
+ /**
+- * amdgpu_gem_begin_cpu_access - &dma_buf_ops.begin_cpu_access implementation
++ * amdgpu_dma_buf_begin_cpu_access - &dma_buf_ops.begin_cpu_access implementation
+ * @dma_buf: shared DMA buffer
+ * @direction: direction of DMA transfer
+ *
+@@ -347,8 +297,8 @@ struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
+ * Returns:
+ * 0 on success or a negative error code on failure.
+ */
+-static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
+- enum dma_data_direction direction)
++static int amdgpu_dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
++ enum dma_data_direction direction)
+ {
+ struct amdgpu_bo *bo = gem_to_amdgpu_bo(dma_buf->priv);
+ struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
+@@ -376,12 +326,12 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
+ }
+
+ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
+- .attach = amdgpu_gem_map_attach,
+- .detach = amdgpu_gem_map_detach,
++ .attach = amdgpu_dma_buf_map_attach,
++ .detach = amdgpu_dma_buf_map_detach,
+ .map_dma_buf = drm_gem_map_dma_buf,
+ .unmap_dma_buf = drm_gem_unmap_dma_buf,
+ .release = drm_gem_dmabuf_release,
+- .begin_cpu_access = amdgpu_gem_begin_cpu_access,
++ .begin_cpu_access = amdgpu_dma_buf_begin_cpu_access,
+ .mmap = drm_gem_dmabuf_mmap,
+ .vmap = drm_gem_dmabuf_vmap,
+ .vunmap = drm_gem_dmabuf_vunmap,
+@@ -419,6 +369,57 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
+ return buf;
+ }
+
++/**
++ * amdgpu_gem_prime_import_sg_table - &drm_driver.gem_prime_import_sg_table
++ * implementation
++ * @dev: DRM device
++ * @attach: DMA-buf attachment
++ * @sg: Scatter/gather table
++ *
++ * Imports shared DMA buffer memory exported by another device.
++ *
++ * Returns:
++ * A new GEM BO of the given DRM device, representing the memory
++ * described by the given DMA-buf attachment and scatter/gather table.
++ */
++struct drm_gem_object *
++amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
++ struct dma_buf_attachment *attach,
++ struct sg_table *sg)
++{
++ struct reservation_object *resv = attach->dmabuf->resv;
++ struct amdgpu_device *adev = dev->dev_private;
++ struct amdgpu_bo *bo;
++ struct amdgpu_bo_param bp;
++ int ret;
++
++ memset(&bp, 0, sizeof(bp));
++ bp.size = attach->dmabuf->size;
++ bp.byte_align = PAGE_SIZE;
++ bp.domain = AMDGPU_GEM_DOMAIN_CPU;
++ bp.flags = 0;
++ bp.type = ttm_bo_type_sg;
++ bp.resv = resv;
++ ww_mutex_lock(&resv->lock, NULL);
++ ret = amdgpu_bo_create(adev, &bp, &bo);
++ if (ret)
++ goto error;
++
++ bo->tbo.sg = sg;
++ bo->tbo.ttm->sg = sg;
++ bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
++ bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
++ if (attach->dmabuf->ops != &amdgpu_dmabuf_ops)
++ bo->prime_shared_count = 1;
++
++ ww_mutex_unlock(&resv->lock);
++ return &bo->gem_base;
++
++error:
++ ww_mutex_unlock(&resv->lock);
++ return ERR_PTR(ret);
++}
++
+ /**
+ * amdgpu_gem_prime_import - &drm_driver.gem_prime_import implementation
+ * @dev: DRM device
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h
+new file mode 100644
+index 000000000000..c7056cbe8685
+--- /dev/null
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h
+@@ -0,0 +1,46 @@
++/*
++ * Copyright 2019 Advanced Micro Devices, Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ */
++#ifndef __AMDGPU_DMA_BUF_H__
++#define __AMDGPU_DMA_BUF_H__
++
++#include <drm/drm_gem.h>
++
++struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
++struct drm_gem_object *
++amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
++ struct dma_buf_attachment *attach,
++ struct sg_table *sg);
++struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
++ struct drm_gem_object *gobj,
++ int flags);
++struct drm_gem_object *amdgpu_gem_prime_import(struct drm_device *dev,
++ struct dma_buf *dma_buf);
++struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *);
++void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj);
++void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
++int amdgpu_gem_prime_mmap(struct drm_gem_object *obj,
++ struct vm_area_struct *vma);
++
++extern const struct dma_buf_ops amdgpu_dmabuf_ops;
++
++#endif
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+index 83919c5238b1..b7788f4580ba 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+@@ -36,7 +36,7 @@
+
+ #include "amdgpu.h"
+ #include "amdgpu_irq.h"
+-#include "amdgpu_gem.h"
++#include "amdgpu_dma_buf.h"
+
+ #include "amdgpu_amdkfd.h"
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h
+index d63daba9b17c..b8ba6e27c61f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h
+@@ -39,20 +39,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
+ void amdgpu_gem_object_close(struct drm_gem_object *obj,
+ struct drm_file *file_priv);
+ unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
+-struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
+-struct drm_gem_object *
+-amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
+- struct dma_buf_attachment *attach,
+- struct sg_table *sg);
+-struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
+- struct drm_gem_object *gobj,
+- int flags);
+-struct drm_gem_object *amdgpu_gem_prime_import(struct drm_device *dev,
+- struct dma_buf *dma_buf);
+-struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *);
+-void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj);
+-void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
+-int amdgpu_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
+
+ /*
+ * GEM objects.
+--
+2.17.1
+