aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/5225-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5225-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/5225-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch175
1 files changed, 175 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5225-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5225-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch
new file mode 100644
index 00000000..263123ce
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5225-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch
@@ -0,0 +1,175 @@
+From 909ec6b159a1b1e4e0b589484269e77d29af64c7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Wed, 22 Aug 2018 14:11:19 +0200
+Subject: [PATCH 5225/5725] drm/amdgpu: add amdgpu_gmc_get_pde_for_bo helper v2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Helper to get the PDE for a PD/PT.
+
+v2: improve documentation
+
+Change-Id: I66a29a89be3746201da06ef7bf0d982201206e5d
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
+Reviewed-by: Huang Rui <ray.huang@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Raveendra Talabattula <raveendra.talabattula@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 37 +++++++++++++++++++++++++++++++--
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h | 2 ++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 23 +++++++++++++++++---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 1 +
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 +---
+ 5 files changed, 59 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
+index 36058fe..a249931 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
+@@ -27,6 +27,38 @@
+ #include "amdgpu.h"
+
+ /**
++ * amdgpu_gmc_get_pde_for_bo - get the PDE for a BO
++ *
++ * @bo: the BO to get the PDE for
++ * @level: the level in the PD hirarchy
++ * @addr: resulting addr
++ * @flags: resulting flags
++ *
++ * Get the address and flags to be used for a PDE (Page Directory Entry).
++ */
++void amdgpu_gmc_get_pde_for_bo(struct amdgpu_bo *bo, int level,
++ uint64_t *addr, uint64_t *flags)
++{
++ struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
++ struct ttm_dma_tt *ttm;
++
++ switch (bo->tbo.mem.mem_type) {
++ case TTM_PL_TT:
++ ttm = container_of(bo->tbo.ttm, struct ttm_dma_tt, ttm);
++ *addr = ttm->dma_address[0];
++ break;
++ case TTM_PL_VRAM:
++ *addr = amdgpu_bo_gpu_offset(bo);
++ break;
++ default:
++ *addr = 0;
++ break;
++ }
++ *flags = amdgpu_ttm_tt_pde_flags(bo->tbo.ttm, &bo->tbo.mem);
++ amdgpu_gmc_get_vm_pde(adev, level, addr, flags);
++}
++
++/**
+ * amdgpu_gmc_pd_addr - return the address of the root directory
+ *
+ */
+@@ -35,13 +67,14 @@ uint64_t amdgpu_gmc_pd_addr(struct amdgpu_bo *bo)
+ struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
+ uint64_t pd_addr;
+
+- pd_addr = amdgpu_bo_gpu_offset(bo);
+ /* TODO: move that into ASIC specific code */
+ if (adev->asic_type >= CHIP_VEGA10) {
+ uint64_t flags = AMDGPU_PTE_VALID;
+
+- amdgpu_gmc_get_vm_pde(adev, -1, &pd_addr, &flags);
++ amdgpu_gmc_get_pde_for_bo(bo, -1, &pd_addr, &flags);
+ pd_addr |= flags;
++ } else {
++ pd_addr = amdgpu_bo_gpu_offset(bo);
+ }
+ return pd_addr;
+ }
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
+index f347ba9..aa0502e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
+@@ -134,6 +134,8 @@ static inline bool amdgpu_gmc_vram_full_visible(struct amdgpu_gmc *gmc)
+ return (gmc->real_vram_size == gmc->visible_vram_size);
+ }
+
++void amdgpu_gmc_get_pde_for_bo(struct amdgpu_bo *bo, int level,
++ uint64_t *addr, uint64_t *flags);
+ uint64_t amdgpu_gmc_pd_addr(struct amdgpu_bo *bo);
+
+ #endif
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+index f1d9fe3..027cff2 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+@@ -1450,13 +1450,14 @@ bool amdgpu_ttm_tt_is_readonly(struct ttm_tt *ttm)
+ }
+
+ /**
+- * amdgpu_ttm_tt_pte_flags - Compute PTE flags for ttm_tt object
++ * amdgpu_ttm_tt_pde_flags - Compute PDE flags for ttm_tt object
+ *
+ * @ttm: The ttm_tt object to compute the flags for
+ * @mem: The memory registry backing this ttm_tt object
++ *
++ * Figure out the flags to use for a VM PDE (Page Directory Entry).
+ */
+-uint64_t amdgpu_ttm_tt_pte_flags(struct amdgpu_device *adev, struct ttm_tt *ttm,
+- struct ttm_mem_reg *mem)
++uint64_t amdgpu_ttm_tt_pde_flags(struct ttm_tt *ttm, struct ttm_mem_reg *mem)
+ {
+ uint64_t flags = 0;
+
+@@ -1473,6 +1474,22 @@ uint64_t amdgpu_ttm_tt_pte_flags(struct amdgpu_device *adev, struct ttm_tt *ttm,
+ if (mem && mem->mem_type == AMDGPU_PL_DGMA_IMPORT)
+ flags |= AMDGPU_PTE_SYSTEM;
+
++ return flags;
++}
++
++/**
++ * amdgpu_ttm_tt_pte_flags - Compute PTE flags for ttm_tt object
++ *
++ * @ttm: The ttm_tt object to compute the flags for
++ * @mem: The memory registry backing this ttm_tt object
++
++ * Figure out the flags to use for a VM PTE (Page Table Entry).
++ */
++uint64_t amdgpu_ttm_tt_pte_flags(struct amdgpu_device *adev, struct ttm_tt *ttm,
++ struct ttm_mem_reg *mem)
++{
++ uint64_t flags = amdgpu_ttm_tt_pde_flags(ttm, mem);
++
+ flags |= adev->gart.gart_pte_flags;
+ flags |= AMDGPU_PTE_READABLE;
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+index 66251b6..ef0f86f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+@@ -120,6 +120,7 @@ bool amdgpu_ttm_tt_userptr_invalidated(struct ttm_tt *ttm,
+ int *last_invalidated);
+ bool amdgpu_ttm_tt_userptr_needs_pages(struct ttm_tt *ttm);
+ bool amdgpu_ttm_tt_is_readonly(struct ttm_tt *ttm);
++uint64_t amdgpu_ttm_tt_pde_flags(struct ttm_tt *ttm, struct ttm_mem_reg *mem);
+ uint64_t amdgpu_ttm_tt_pte_flags(struct amdgpu_device *adev, struct ttm_tt *ttm,
+ struct ttm_mem_reg *mem);
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index 516074d..4b6d0cc 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -970,9 +970,7 @@ static void amdgpu_vm_update_pde(struct amdgpu_pte_update_params *params,
+ pbo = pbo->parent;
+
+ level += params->adev->vm_manager.root_level;
+- pt = amdgpu_bo_gpu_offset(entry->base.bo);
+- flags = AMDGPU_PTE_VALID;
+- amdgpu_gmc_get_vm_pde(params->adev, level, &pt, &flags);
++ amdgpu_gmc_get_pde_for_bo(entry->base.bo, level, &pt, &flags);
+ pde = (entry - parent->entries) * 8;
+ if (bo->shadow)
+ params->func(params, bo->shadow, pde, pt, 1, 0, flags);
+--
+2.7.4
+