diff options
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.patch | 348 |
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 + |