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