diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0824-drm-amdgpu-enable-foreign-DMA-buf-objects.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0824-drm-amdgpu-enable-foreign-DMA-buf-objects.patch | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0824-drm-amdgpu-enable-foreign-DMA-buf-objects.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0824-drm-amdgpu-enable-foreign-DMA-buf-objects.patch deleted file mode 100644 index b882d416..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0824-drm-amdgpu-enable-foreign-DMA-buf-objects.patch +++ /dev/null @@ -1,150 +0,0 @@ -From 02892a53c2e6500339362378608d6d91b2204303 Mon Sep 17 00:00:00 2001 -From: Christian Koenig <christian.koenig@amd.com> -Date: Wed, 2 Dec 2015 15:40:55 +0100 -Subject: [PATCH 0824/4131] drm/amdgpu: enable foreign DMA-buf objects -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -We should be able to handle BOs from other instances as well. - -Signed-off-by: Christian König <christian.koenig@amd.com> -Signed-off-by: Kalyan Alle <kalyan.alle@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 ++ - drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +- - drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 59 +++++++++++++++++++++++++++++++ - drivers/gpu/drm/drm_prime.c | 3 +- - include/drm/drm_prime.h | 2 ++ - 5 files changed, 66 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index d17a6a9..ecd9d37 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -405,6 +405,8 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev, - 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); - int amdgpu_gem_prime_pin(struct drm_gem_object *obj); - void amdgpu_gem_prime_unpin(struct drm_gem_object *obj); - struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *); -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -index 6498942..bf49d05 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -@@ -845,7 +845,7 @@ static struct drm_driver kms_driver = { - .prime_handle_to_fd = drm_gem_prime_handle_to_fd, - .prime_fd_to_handle = drm_gem_prime_fd_to_handle, - .gem_prime_export = amdgpu_gem_prime_export, -- .gem_prime_import = drm_gem_prime_import, -+ .gem_prime_import = amdgpu_gem_prime_import, - .gem_prime_pin = amdgpu_gem_prime_pin, - .gem_prime_unpin = amdgpu_gem_prime_unpin, - .gem_prime_res_obj = amdgpu_gem_prime_res_obj, -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c -index 2a76a57..9f460de 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c -@@ -159,3 +159,62 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev, - - return drm_gem_prime_export(dev, gobj, flags); - } -+ -+static struct drm_gem_object * -+amdgpu_gem_prime_foreign_bo(struct amdgpu_device *adev, struct amdgpu_bo *bo) -+{ -+ struct amdgpu_gem_object *gobj; -+ int r; -+ -+ ww_mutex_lock(&bo->tbo.resv->lock, NULL); -+ -+ list_for_each_entry(gobj, &bo->gem_objects, list) { -+ if (gobj->base.dev != adev->ddev) -+ continue; -+ -+ ww_mutex_unlock(&bo->tbo.resv->lock); -+ drm_gem_object_reference(&gobj->base); -+ return &gobj->base; -+ } -+ -+ -+ gobj = kzalloc(sizeof(struct amdgpu_gem_object), GFP_KERNEL); -+ if (unlikely(!gobj)) { -+ ww_mutex_unlock(&bo->tbo.resv->lock); -+ return ERR_PTR(-ENOMEM); -+ } -+ -+ r = drm_gem_object_init(adev->ddev, &gobj->base, amdgpu_bo_size(bo)); -+ if (unlikely(r)) { -+ kfree(gobj); -+ ww_mutex_unlock(&bo->tbo.resv->lock); -+ return ERR_PTR(r); -+ } -+ -+ list_add(&gobj->list, &bo->gem_objects); -+ gobj->bo = amdgpu_bo_ref(bo); -+ bo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; -+ -+ ww_mutex_unlock(&bo->tbo.resv->lock); -+ -+ return &gobj->base; -+} -+ -+struct drm_gem_object *amdgpu_gem_prime_import(struct drm_device *dev, -+ struct dma_buf *dma_buf) -+{ -+ struct amdgpu_device *adev = dev->dev_private; -+ -+ if (dma_buf->ops == &drm_gem_prime_dmabuf_ops) { -+ struct drm_gem_object *obj = dma_buf->priv; -+ -+ if (obj->dev != dev && obj->dev->driver == dev->driver) { -+ /* It's a amdgpu_bo from a different driver instance */ -+ struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj); -+ -+ return amdgpu_gem_prime_foreign_bo(adev, bo); -+ } -+ } -+ -+ return drm_gem_prime_import(dev, dma_buf); -+} -diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c -index 22408ba..4099901 100644 ---- a/drivers/gpu/drm/drm_prime.c -+++ b/drivers/gpu/drm/drm_prime.c -@@ -397,7 +397,7 @@ static int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, - return dev->driver->gem_prime_mmap(obj, vma); - } - --static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = { -+const struct dma_buf_ops drm_gem_prime_dmabuf_ops = { - .attach = drm_gem_map_attach, - .detach = drm_gem_map_detach, - .map_dma_buf = drm_gem_map_dma_buf, -@@ -411,6 +411,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = { - .vmap = drm_gem_dmabuf_vmap, - .vunmap = drm_gem_dmabuf_vunmap, - }; -+EXPORT_SYMBOL(drm_gem_prime_dmabuf_ops); - - /** - * DOC: PRIME Helpers -diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h -index 9cd9e36..9322340 100644 ---- a/include/drm/drm_prime.h -+++ b/include/drm/drm_prime.h -@@ -61,6 +61,8 @@ struct drm_file; - - struct device; - -+extern const struct dma_buf_ops drm_gem_prime_dmabuf_ops; -+ - struct dma_buf *drm_gem_prime_export(struct drm_device *dev, - struct drm_gem_object *obj, - int flags); --- -2.7.4 - |