aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4222-drm-amdgpu-add-amdgpu_bo_param.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4222-drm-amdgpu-add-amdgpu_bo_param.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4222-drm-amdgpu-add-amdgpu_bo_param.patch207
1 files changed, 207 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4222-drm-amdgpu-add-amdgpu_bo_param.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4222-drm-amdgpu-add-amdgpu_bo_param.patch
new file mode 100644
index 00000000..7af150e5
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4222-drm-amdgpu-add-amdgpu_bo_param.patch
@@ -0,0 +1,207 @@
+From 717e59265bec03634dd7babb38e9f2556f044dbb Mon Sep 17 00:00:00 2001
+From: Chunming Zhou <david1.zhou@amd.com>
+Date: Mon, 16 Apr 2018 17:57:19 +0800
+Subject: [PATCH 4222/5725] drm/amdgpu: add amdgpu_bo_param
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+amdgpu_bo_create has too many parameters, and used in
+too many places. Collect them to one structure.
+
+Change-Id: Ib2aa98ee37a70f3cb0d61eef1d336e89187554d5
+Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
+Reviewed-by: Huang Rui <ray.huang@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
+
+Conflicts:
+ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 69 +++++++++++++++++-------------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 9 ++++
+ 2 files changed, 48 insertions(+), 30 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+index f14b27a..4c29d69 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+@@ -363,28 +363,25 @@ static bool amdgpu_bo_validate_size(struct amdgpu_device *adev,
+ man->size << PAGE_SHIFT);
+ return false;
+ }
+-
+-static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+- int byte_align, u32 domain,
+- u64 flags, enum ttm_bo_type type,
+- struct reservation_object *resv,
++static int amdgpu_bo_do_create(struct amdgpu_device *adev,
++ struct amdgpu_bo_param *bp,
+ struct amdgpu_bo **bo_ptr)
+ {
+ struct ttm_operation_ctx ctx = {
+- .interruptible = (type != ttm_bo_type_kernel),
++ .interruptible = (bp->type != ttm_bo_type_kernel),
+ .no_wait_gpu = false,
+- .resv = resv,
++ .resv = bp->resv,
+ .flags = TTM_OPT_FLAG_ALLOW_RES_EVICT
+ };
+ struct amdgpu_bo *bo;
+- unsigned long page_align;
++ unsigned long page_align, size = bp->size;
+ size_t acc_size;
+ int r;
+
+- page_align = roundup(byte_align, PAGE_SIZE) >> PAGE_SHIFT;
++ page_align = roundup(bp->byte_align, PAGE_SIZE) >> PAGE_SHIFT;
+ size = ALIGN(size, PAGE_SIZE);
+
+- if (!amdgpu_bo_validate_size(adev, size, domain))
++ if (!amdgpu_bo_validate_size(adev, size, bp->domain))
+ return -ENOMEM;
+
+ *bo_ptr = NULL;
+@@ -408,11 +405,11 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ AMDGPU_GEM_DOMAIN_DGMA_IMPORT);
+ bo->allowed_domains = bo->preferred_domains;
+
+- if (type != ttm_bo_type_kernel &&
++ if (bp->type != ttm_bo_type_kernel &&
+ bo->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
+ bo->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
+
+- bo->flags = flags;
++ bo->flags = bp->flags;
+ #ifdef CONFIG_X86_32
+ /* XXX: Write-combined CPU mappings of GTT seem broken on 32-bit
+ * See https://bugs.freedesktop.org/show_bug.cgi?id=84627
+@@ -442,12 +439,11 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ #endif
+
+ bo->tbo.bdev = &adev->mman.bdev;
++ amdgpu_ttm_placement_from_domain(bo, bp->domain);
+
+- amdgpu_ttm_placement_from_domain(bo, domain);
+-
+- r = ttm_bo_init_reserved(&adev->mman.bdev, &bo->tbo, size, type,
++ r = ttm_bo_init_reserved(&adev->mman.bdev, &bo->tbo, size, bp->type,
+ &bo->placement, page_align, &ctx, acc_size,
+- NULL, resv, &amdgpu_ttm_bo_destroy);
++ NULL, bp->resv, &amdgpu_ttm_bo_destroy);
+
+ if (unlikely(r != 0))
+ return r;
+@@ -463,10 +459,10 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ if (domain & AMDGPU_GEM_DOMAIN_DGMA && adev->ssg.enabled)
+ bo->tbo.ssg_can_map = true;
+
+- if (type == ttm_bo_type_kernel)
++ if (bp->type == ttm_bo_type_kernel)
+ bo->tbo.priority = 1;
+
+- if (flags & AMDGPU_GEM_CREATE_VRAM_CLEARED &&
++ if (bp->flags & AMDGPU_GEM_CREATE_VRAM_CLEARED &&
+ bo->tbo.mem.placement & TTM_PL_FLAG_VRAM) {
+ struct dma_fence *fence;
+
+@@ -483,14 +479,14 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ #endif
+ dma_fence_put(fence);
+ }
+- if (!resv)
++ if (!bp->resv)
+ amdgpu_bo_unreserve(bo);
+ *bo_ptr = bo;
+
+ trace_amdgpu_bo_create(bo);
+
+ /* Treat CPU_ACCESS_REQUIRED only as a hint if given by UMD */
+- if (type == ttm_bo_type_device)
++ if (bp->type == ttm_bo_type_device)
+ bo->flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
+
+ if (((flags & AMDGPU_GEM_CREATE_NO_EVICT) && amdgpu_no_evict) ||
+@@ -505,7 +501,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ return 0;
+
+ fail_unreserve:
+- if (!resv)
++ if (!bp->resv)
+ ww_mutex_unlock(&bo->tbo.resv->lock);
+ amdgpu_bo_unref(&bo);
+ return r;
+@@ -515,16 +511,22 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
+ unsigned long size, int byte_align,
+ struct amdgpu_bo *bo)
+ {
++ struct amdgpu_bo_param bp = {
++ .size = size,
++ .byte_align = byte_align,
++ .domain = AMDGPU_GEM_DOMAIN_GTT,
++ .flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC |
++ AMDGPU_GEM_CREATE_SHADOW,
++ .type = ttm_bo_type_kernel,
++ .resv = bo->tbo.resv
++ };
+ int r;
+
+ if (bo->shadow)
+ return 0;
+-
+- r = amdgpu_bo_do_create(adev, size, byte_align, AMDGPU_GEM_DOMAIN_GTT,
+- AMDGPU_GEM_CREATE_CPU_GTT_USWC |
+- AMDGPU_GEM_CREATE_SHADOW,
+- ttm_bo_type_kernel,
+- bo->tbo.resv, &bo->shadow);
++
++ r = amdgpu_bo_do_create(adev, &bp, &bo->shadow);
++
+ if (!r) {
+ bo->shadow->parent = amdgpu_bo_ref(bo);
+ mutex_lock(&adev->shadow_list_lock);
+@@ -541,11 +543,18 @@ int amdgpu_bo_create(struct amdgpu_device *adev, unsigned long size,
+ struct reservation_object *resv,
+ struct amdgpu_bo **bo_ptr)
+ {
+- uint64_t parent_flags = flags & ~AMDGPU_GEM_CREATE_SHADOW;
++ struct amdgpu_bo_param bp = {
++ .size = size,
++ .byte_align = byte_align,
++ .domain = domain,
++ .flags = flags & ~AMDGPU_GEM_CREATE_SHADOW,
++ .type = type,
++ .resv = resv
++ };
+ int r;
++
++ r = amdgpu_bo_do_create(adev, &bp, bo_ptr);
+
+- r = amdgpu_bo_do_create(adev, size, byte_align, domain,
+- parent_flags, type, resv, bo_ptr);
+ if (r)
+ return r;
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
+index 291477d..7abf76b 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
+@@ -33,6 +33,15 @@
+
+ #define AMDGPU_BO_INVALID_OFFSET LONG_MAX
+
++struct amdgpu_bo_param {
++ unsigned long size;
++ int byte_align;
++ u32 domain;
++ u64 flags;
++ enum ttm_bo_type type;
++ struct reservation_object *resv;
++};
++
+ /* bo virtual addresses in a vm */
+ struct amdgpu_bo_va_mapping {
+ struct amdgpu_bo_va *bo_va;
+--
+2.7.4
+