diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index a1b15d0d6c489..8d4c94e893086 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -43,6 +43,10 @@ #include "amdgpu_hmm.h" #include "amdgpu_xgmi.h" +#ifdef CONFIG_ARCH_PHYTIUM +#include +#endif + static const struct drm_gem_object_funcs amdgpu_gem_object_funcs; static vm_fault_t amdgpu_gem_fault(struct vm_fault *vmf) @@ -258,6 +262,11 @@ static int amdgpu_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_str !(vma->vm_flags & VM_ACCESS_FLAGS)) vm_flags_clear(vma, VM_MAYWRITE); +#ifdef CONFIG_ARCH_PHYTIUM + /*lt: workaround for bad address error with d3d11 api remoting*/ + if (is_phytium_soc()) + vm_flags_set(vma, VM_ALLOW_ANY_UNCACHED); +#endif return drm_gem_ttm_mmap(obj, vma); } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index c56405b490509..d4f5dfb641c72 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -1148,8 +1148,10 @@ static int amdgpu_ttm_tt_populate(struct ttm_device *bdev, if (ret) return ret; - for (i = 0; i < ttm->num_pages; ++i) + for (i = 0; i < ttm->num_pages; ++i) { ttm->pages[i]->mapping = bdev->dev_mapping; + page_ref_inc(ttm->pages[i]); + } return 0; } @@ -1180,8 +1182,10 @@ static void amdgpu_ttm_tt_unpopulate(struct ttm_device *bdev, if (ttm->page_flags & TTM_TT_FLAG_EXTERNAL) return; - for (i = 0; i < ttm->num_pages; ++i) + for (i = 0; i < ttm->num_pages; ++i) { ttm->pages[i]->mapping = NULL; + page_ref_dec(ttm->pages[i]); + } adev = amdgpu_ttm_adev(bdev);