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