diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1084-drm-amdgpu-handle-foreign-BOs-in-the-VM-mapping.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/1084-drm-amdgpu-handle-foreign-BOs-in-the-VM-mapping.patch | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1084-drm-amdgpu-handle-foreign-BOs-in-the-VM-mapping.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1084-drm-amdgpu-handle-foreign-BOs-in-the-VM-mapping.patch new file mode 100644 index 00000000..cf5a1b28 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1084-drm-amdgpu-handle-foreign-BOs-in-the-VM-mapping.patch @@ -0,0 +1,83 @@ +From eae6ddd03bd0a561162cfc13ec49bcbca43b8daf Mon Sep 17 00:00:00 2001 +From: Amber Lin <Amber.Lin@amd.com> +Date: Thu, 13 Apr 2017 16:49:58 -0400 +Subject: [PATCH 1084/4131] drm/amdgpu: handle foreign BOs in the VM mapping + +Use the correct device for the PTE creation. + +Bug: SWDEV-118409 + +Change-Id: Idf9989d122f9923702f13c3f7dd3b4d1a0796448 +Signed-off-by: Amber Lin <Amber.Lin@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 21 +++++++++++++++------ + 1 file changed, 15 insertions(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 9217edd..8a32c7b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -1646,6 +1646,7 @@ static int amdgpu_vm_bo_split_mapping(struct amdgpu_device *adev, + dma_addr_t *pages_addr, + struct amdgpu_vm *vm, + struct amdgpu_bo_va_mapping *mapping, ++ uint64_t vram_base_offset, + uint64_t flags, + struct ttm_mem_reg *mem, + struct dma_fence **fence) +@@ -1702,12 +1703,12 @@ static int amdgpu_vm_bo_split_mapping(struct amdgpu_device *adev, + max_entries = min(max_entries, 16ull * 1024ull); + break; + case AMDGPU_PL_DGMA: +- addr += adev->vm_manager.vram_base_offset + ++ addr += vram_base_offset + + adev->mman.bdev.man[mem->mem_type].gpu_offset - + adev->mman.bdev.man[TTM_PL_VRAM].gpu_offset; + break; + case TTM_PL_VRAM: +- addr += adev->vm_manager.vram_base_offset; ++ addr += vram_base_offset; + break; + default: + break; +@@ -1760,6 +1761,8 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev, + struct drm_mm_node *nodes; + struct dma_fence *exclusive, **last_update; + uint64_t flags; ++ uint64_t vram_base_offset = adev->vm_manager.vram_base_offset; ++ struct amdgpu_device *bo_adev; + int r; + + if (clear || !bo_va->base.bo) { +@@ -1781,9 +1784,15 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev, + exclusive = reservation_object_get_excl(bo->tbo.resv); + } + +- if (bo) ++ if (bo) { + flags = amdgpu_ttm_tt_pte_flags(adev, bo->tbo.ttm, mem); +- else ++ bo_adev = amdgpu_ttm_adev(bo->tbo.bdev); ++ if (mem && mem->mem_type == TTM_PL_VRAM && ++ adev != bo_adev) { ++ flags |= AMDGPU_PTE_SYSTEM; ++ vram_base_offset = bo_adev->mc.aper_base; ++ } ++ } else + flags = 0x0; + + if (clear || (bo && bo->tbo.resv == vm->root.base.bo->tbo.resv)) +@@ -1801,8 +1810,8 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev, + + list_for_each_entry(mapping, &bo_va->invalids, list) { + r = amdgpu_vm_bo_split_mapping(adev, exclusive, pages_addr, vm, +- mapping, flags, mem, +- last_update); ++ mapping, vram_base_offset, flags, ++ mem, last_update); + if (r) + return r; + } +-- +2.7.4 + |