aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0204-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.19.8/0204-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0204-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch174
1 files changed, 174 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0204-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0204-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch
new file mode 100644
index 00000000..694acc31
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0204-drm-amdgpu-add-amdgpu_gmc_get_pde_for_bo-helper-v2.patch
@@ -0,0 +1,174 @@
+From d30eebb16887670db395bc9fe573d0c4ad82b7a5 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 0204/2940] 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>
+---
+ 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 36058feac64f..a249931ef512 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
+@@ -26,6 +26,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 f2194d565c65..0beebcc774fb 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
+@@ -133,6 +133,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 741360a4bbf3..1b398c62e399 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+@@ -1468,13 +1468,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;
+
+@@ -1491,6 +1492,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 66251b6f807d..ef0f86f688a9 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 617085b6e22c..575f3287d310 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -1006,9 +1006,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.17.1
+