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