diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4650-drm-amdgpu-Consolidate-visible-vs.-real-vram-check-v.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4650-drm-amdgpu-Consolidate-visible-vs.-real-vram-check-v.patch | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4650-drm-amdgpu-Consolidate-visible-vs.-real-vram-check-v.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4650-drm-amdgpu-Consolidate-visible-vs.-real-vram-check-v.patch new file mode 100644 index 00000000..2937741f --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4650-drm-amdgpu-Consolidate-visible-vs.-real-vram-check-v.patch @@ -0,0 +1,188 @@ +From 618f7497d2013be59b679b92a1b5058f5595b39a Mon Sep 17 00:00:00 2001 +From: Andrey Grodzovsky <andrey.grodzovsky@amd.com> +Date: Tue, 12 Jun 2018 14:28:20 -0400 +Subject: [PATCH 4650/5725] drm/amdgpu: Consolidate visible vs. real vram check + v2. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Move all instnaces of this check into a function in amdgpu_gmc.h +Rename the original function to a more proper name. + +v2: +Add more places to cleanup. + +Reviewed-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> +Signed-off-by: Kalyan Alle <kalyan.alle@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 11 ++++++----- + drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h | 15 +++++++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 2 +- + drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 +- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 20 ++++---------------- + 5 files changed, 27 insertions(+), 23 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +index 10e8dbb..abe2bff 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -31,6 +31,7 @@ + #include <drm/drm_syncobj.h> + #include "amdgpu.h" + #include "amdgpu_trace.h" ++#include "amdgpu_gmc.h" + + static int amdgpu_cs_user_fence_chunk(struct amdgpu_cs_parser *p, + struct drm_amdgpu_cs_chunk_fence *data, +@@ -302,7 +303,7 @@ static void amdgpu_cs_get_threshold_for_moves(struct amdgpu_device *adev, + *max_bytes = us_to_bytes(adev, adev->mm_stats.accum_us); + + /* Do the same for visible VRAM if half of it is free */ +- if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size) { ++ if (!amdgpu_gmc_vram_full_visible(&adev->gmc)) { + u64 total_vis_vram = adev->gmc.visible_vram_size; + u64 used_vis_vram = + amdgpu_vram_mgr_vis_usage(&adev->mman.bdev.man[TTM_PL_VRAM]); +@@ -359,7 +360,7 @@ static int amdgpu_cs_bo_validate(struct amdgpu_cs_parser *p, + * to move it. Don't move anything if the threshold is zero. + */ + if (p->bytes_moved < p->bytes_moved_threshold) { +- if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size && ++ if (!amdgpu_gmc_vram_full_visible(&adev->gmc) && + (bo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED)) { + /* And don't move a CPU_ACCESS_REQUIRED BO to limited + * visible VRAM if we've depleted our allowance to do +@@ -381,7 +382,7 @@ static int amdgpu_cs_bo_validate(struct amdgpu_cs_parser *p, + r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + + p->bytes_moved += ctx.bytes_moved; +- if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size && ++ if (!amdgpu_gmc_vram_full_visible(&adev->gmc) && + amdgpu_bo_in_cpu_visible_vram(bo)) + p->bytes_moved_vis += ctx.bytes_moved; + +@@ -434,8 +435,8 @@ static bool amdgpu_cs_try_evict(struct amdgpu_cs_parser *p, + + /* Good we can try to move this BO somewhere else */ + update_bytes_moved_vis = +- adev->gmc.visible_vram_size < adev->gmc.real_vram_size && +- amdgpu_bo_in_cpu_visible_vram(bo); ++ !amdgpu_gmc_vram_full_visible(&adev->gmc) && ++ amdgpu_bo_in_cpu_visible_vram(bo); + amdgpu_ttm_placement_from_domain(bo, other); + r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + p->bytes_moved += ctx.bytes_moved; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h +index f4fdeb2..5f1d59e 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h +@@ -112,4 +112,19 @@ struct amdgpu_gmc { + const struct amdgpu_gmc_funcs *gmc_funcs; + }; + ++/** ++ * amdgpu_gmc_vram_full_visible - Check if full VRAM is visible through the BAR ++ * ++ * @adev: amdgpu_device pointer ++ * ++ * Returns: ++ * True if full VRAM is visible through the BAR ++ */ ++static inline bool amdgpu_gmc_vram_full_visible(struct amdgpu_gmc *gmc) ++{ ++ WARN_ON(gmc->real_vram_size < gmc->visible_vram_size); ++ ++ return (gmc->real_vram_size == gmc->visible_vram_size); ++} ++ + #endif +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +index 8574f39..f218f1c 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +@@ -481,7 +481,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, + if (unlikely(r != 0)) + return r; + +- if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size && ++ if (!amdgpu_gmc_vram_full_visible(&adev->gmc) && + bo->tbo.mem.mem_type == TTM_PL_VRAM && + bo->tbo.mem.start < adev->gmc.visible_vram_size >> PAGE_SHIFT) + amdgpu_cs_report_moved_bytes(adev, ctx.bytes_moved, +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +index acaa441..905f13b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +@@ -295,7 +295,7 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo, + if (!adev->mman.buffer_funcs_enabled) { + /* Move to system memory */ + amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_CPU); +- } else if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size && ++ } else if (!amdgpu_gmc_vram_full_visible(&adev->gmc) && + !(abo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) && + amdgpu_bo_in_cpu_visible_vram(abo)) { + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 3c7b1de..3fb0340 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -33,6 +33,7 @@ + #include "amdgpu.h" + #include "amdgpu_trace.h" + #include "amdgpu_amdkfd.h" ++#include "amdgpu_gmc.h" + + /** + * DOC: GPUVM +@@ -670,19 +671,6 @@ bool amdgpu_vm_need_pipeline_sync(struct amdgpu_ring *ring, + } + + /** +- * amdgpu_vm_is_large_bar - Check if BAR is large enough +- * +- * @adev: amdgpu_device pointer +- * +- * Returns: +- * True if BAR is large enough. +- */ +-static bool amdgpu_vm_is_large_bar(struct amdgpu_device *adev) +-{ +- return (adev->gmc.real_vram_size == adev->gmc.visible_vram_size); +-} +- +-/** + * amdgpu_vm_flush - hardware flush the vm + * + * @ring: ring to use for flush +@@ -2635,7 +2623,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm, + } + DRM_DEBUG_DRIVER("VM update mode is %s\n", + vm->use_cpu_for_update ? "CPU" : "SDMA"); +- WARN_ONCE((vm->use_cpu_for_update & !amdgpu_vm_is_large_bar(adev)), ++ WARN_ONCE((vm->use_cpu_for_update & !amdgpu_gmc_vram_full_visible(&adev->gmc)), + "CPU update of VM recommended only for large BAR system\n"); + vm->last_update = NULL; + +@@ -2769,7 +2757,7 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm) + vm->pte_support_ats = pte_support_ats; + DRM_DEBUG_DRIVER("VM update mode is %s\n", + vm->use_cpu_for_update ? "CPU" : "SDMA"); +- WARN_ONCE((vm->use_cpu_for_update & !amdgpu_vm_is_large_bar(adev)), ++ WARN_ONCE((vm->use_cpu_for_update & !amdgpu_gmc_vram_full_visible(&adev->gmc)), + "CPU update of VM recommended only for large BAR system\n"); + + if (vm->pasid) { +@@ -2968,7 +2956,7 @@ void amdgpu_vm_manager_init(struct amdgpu_device *adev) + */ + #ifdef CONFIG_X86_64 + if (amdgpu_vm_update_mode == -1) { +- if (amdgpu_vm_is_large_bar(adev)) ++ if (amdgpu_gmc_vram_full_visible(&adev->gmc)) + adev->vm_manager.vm_update_mode = + AMDGPU_VM_USE_CPU_FOR_COMPUTE; + else +-- +2.7.4 + |