We achieved that by setting the PTEs to 2 (the SYSTEM bit is set) when
the corresponding addresses are not occupied by gpu driver allocated
buffers.

Change-Id: I995c11c7a25bdaf7a16700d9e08a8fe287d49417
Signed-off-by: Yong Zhao <yong.z...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c    |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c |  4 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c       |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c    |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c      |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c       |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c    | 18 ++++++++++++------
 drivers/gpu/drm/amd/amdgpu/amdgpu_object.h    |  6 ++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c     |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c        |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_test.c      |  4 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c       |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c     |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c       |  4 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c       |  4 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c        | 27 ++++++++++++++++++++++-----
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h        |  3 +++
 drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c         |  4 ++--
 drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c         | 10 +++++-----
 drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c         |  6 +++---
 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c         |  4 ++--
 21 files changed, 70 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index 2292c77..fce2fa5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -185,7 +185,7 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
                return -ENOMEM;
 
        r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_GTT,
-                            AMDGPU_GEM_CREATE_CPU_GTT_USWC, NULL, NULL, 
&(*mem)->bo);
+                            AMDGPU_GEM_CREATE_CPU_GTT_USWC, NULL, NULL, 
&(*mem)->bo, 0);
        if (r) {
                dev_err(adev->dev,
                        "failed to allocate BO for amdkfd (%d)\n", r);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
index 2fb299a..56445ec 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
@@ -81,7 +81,7 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, 
unsigned size,
 
        n = AMDGPU_BENCHMARK_ITERATIONS;
        r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, sdomain, 0, NULL,
-                            NULL, &sobj);
+                            NULL, &sobj, 0);
        if (r) {
                goto out_cleanup;
        }
@@ -94,7 +94,7 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, 
unsigned size,
                goto out_cleanup;
        }
        r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, ddomain, 0, NULL,
-                            NULL, &dobj);
+                            NULL, &dobj, 0);
        if (r) {
                goto out_cleanup;
        }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
index 3d41cd4..ce19419 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
@@ -124,7 +124,7 @@ static int amdgpu_cgs_alloc_gpu_mem(struct cgs_device 
*cgs_device,
        ret = amdgpu_bo_create_restricted(adev, size, PAGE_SIZE,
                                          true, domain, flags,
                                          NULL, &placement, NULL,
-                                         &obj);
+                                         &obj, 0);
        if (ret) {
                DRM_ERROR("(%d) bo create failed\n", ret);
                return ret;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index fe6783e..d8cd14f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -344,7 +344,7 @@ static int amdgpu_vram_scratch_init(struct amdgpu_device 
*adev)
                                     PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM,
                                     AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                                     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                                    NULL, NULL, &adev->vram_scratch.robj);
+                                    NULL, NULL, &adev->vram_scratch.robj, 0);
                if (r) {
                        return r;
                }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index 124b237..a6d7f55 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -141,7 +141,7 @@ int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev)
                                     PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM,
                                     AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                                     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                                    NULL, NULL, &adev->gart.robj);
+                                    NULL, NULL, &adev->gart.robj, 0);
                if (r) {
                        return r;
                }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 917ac5e..300667a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -59,7 +59,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, 
unsigned long size,
 
 retry:
        r = amdgpu_bo_create(adev, size, alignment, kernel, initial_domain,
-                            flags, NULL, NULL, &robj);
+                            flags, NULL, NULL, &robj, 0);
        if (r) {
                if (r != -ERESTARTSYS) {
                        if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 3ec43cf..d92e7e6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -244,7 +244,7 @@ int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
        r = amdgpu_bo_create(adev, size, align, true, domain,
                             AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                            NULL, NULL, bo_ptr);
+                            NULL, NULL, bo_ptr, 0);
        if (r) {
                dev_err(adev->dev, "(%d) failed to allocate kernel bo\n", r);
                return r;
@@ -318,7 +318,8 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
                                struct sg_table *sg,
                                struct ttm_placement *placement,
                                struct reservation_object *resv,
-                               struct amdgpu_bo **bo_ptr)
+                               struct amdgpu_bo **bo_ptr,
+                               uint64_t init_value)
 {
        struct amdgpu_bo *bo;
        enum ttm_bo_type type;
@@ -418,7 +419,7 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
            bo->tbo.mem.placement & TTM_PL_FLAG_VRAM) {
                struct dma_fence *fence;
 
-               r = amdgpu_fill_buffer(bo, 0, bo->tbo.resv, &fence);
+               r = amdgpu_fill_buffer(bo, init_value, bo->tbo.resv, &fence);
                if (unlikely(r))
                        goto fail_unreserve;
 
@@ -470,7 +471,8 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device 
*adev,
                                        AMDGPU_GEM_CREATE_CPU_GTT_USWC,
                                        NULL, &placement,
                                        bo->tbo.resv,
-                                       &bo->shadow);
+                                       &bo->shadow,
+                                       0);
        if (!r) {
                bo->shadow->parent = amdgpu_bo_ref(bo);
                mutex_lock(&adev->shadow_list_lock);
@@ -481,12 +483,16 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device 
*adev,
        return r;
 }
 
+/* init_value will only take effect when flags contains
+ * AMDGPU_GEM_CREATE_VRAM_CLEARED.
+ */
 int amdgpu_bo_create(struct amdgpu_device *adev,
                     unsigned long size, int byte_align,
                     bool kernel, u32 domain, u64 flags,
                     struct sg_table *sg,
                     struct reservation_object *resv,
-                    struct amdgpu_bo **bo_ptr)
+                    struct amdgpu_bo **bo_ptr,
+                    uint64_t init_value)
 {
        struct ttm_placement placement = {0};
        struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1];
@@ -500,7 +506,7 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
 
        r = amdgpu_bo_create_restricted(adev, size, byte_align, kernel,
                                        domain, flags, sg, &placement,
-                                       resv, bo_ptr);
+                                       resv, bo_ptr, init_value);
        if (r)
                return r;
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
index 833b172..4271243 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
@@ -132,14 +132,16 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
                            bool kernel, u32 domain, u64 flags,
                            struct sg_table *sg,
                            struct reservation_object *resv,
-                           struct amdgpu_bo **bo_ptr);
+                           struct amdgpu_bo **bo_ptr,
+                           uint64_t init_value);
 int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
                                unsigned long size, int byte_align,
                                bool kernel, u32 domain, u64 flags,
                                struct sg_table *sg,
                                struct ttm_placement *placement,
                                struct reservation_object *resv,
-                               struct amdgpu_bo **bo_ptr);
+                               struct amdgpu_bo **bo_ptr,
+                               uint64_t init_value);
 int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
                            unsigned long size, int align,
                            u32 domain, struct amdgpu_bo **bo_ptr,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index 6bdc866..1fee8e9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -69,7 +69,7 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
 
        ww_mutex_lock(&resv->lock, NULL);
        ret = amdgpu_bo_create(adev, attach->dmabuf->size, PAGE_SIZE, false,
-                              AMDGPU_GEM_DOMAIN_GTT, 0, sg, resv, &bo);
+                              AMDGPU_GEM_DOMAIN_GTT, 0, sg, resv, &bo, 0);
        ww_mutex_unlock(&resv->lock);
        if (ret)
                return ERR_PTR(ret);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
index 5ca75a4..653301e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
@@ -64,7 +64,7 @@ int amdgpu_sa_bo_manager_init(struct amdgpu_device *adev,
                INIT_LIST_HEAD(&sa_manager->flist[i]);
 
        r = amdgpu_bo_create(adev, size, align, true, domain,
-                            0, NULL, NULL, &sa_manager->bo);
+                            0, NULL, NULL, &sa_manager->bo, 0);
        if (r) {
                dev_err(adev->dev, "(%d) failed to allocate bo for manager\n", 
r);
                return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c
index 3c4d757..c272bae 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c
@@ -61,7 +61,7 @@ static void amdgpu_do_test_moves(struct amdgpu_device *adev)
 
        r = amdgpu_bo_create(adev, size, PAGE_SIZE, true,
                             AMDGPU_GEM_DOMAIN_VRAM, 0,
-                            NULL, NULL, &vram_obj);
+                            NULL, NULL, &vram_obj, 0);
        if (r) {
                DRM_ERROR("Failed to create VRAM object\n");
                goto out_cleanup;
@@ -82,7 +82,7 @@ static void amdgpu_do_test_moves(struct amdgpu_device *adev)
 
                r = amdgpu_bo_create(adev, size, PAGE_SIZE, true,
                                     AMDGPU_GEM_DOMAIN_GTT, 0, NULL,
-                                    NULL, gtt_obj + i);
+                                    NULL, gtt_obj + i, 0);
                if (r) {
                        DRM_ERROR("Failed to create GTT object %d\n", i);
                        goto out_lclean;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 6ab30da..6ec0539 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1236,7 +1236,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
                             AMDGPU_GEM_DOMAIN_VRAM,
                             AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                            NULL, NULL, &adev->stollen_vga_memory);
+                            NULL, NULL, &adev->stollen_vga_memory, 0);
        if (r) {
                return r;
        }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
index fcfb9d4..3d73f3d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
@@ -381,7 +381,7 @@ int amdgpu_ucode_init_bo(struct amdgpu_device *adev)
        err = amdgpu_bo_create(adev, adev->firmware.fw_size, PAGE_SIZE, true,
                                amdgpu_sriov_vf(adev) ? AMDGPU_GEM_DOMAIN_VRAM 
: AMDGPU_GEM_DOMAIN_GTT,
                                AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                               NULL, NULL, bo);
+                               NULL, NULL, bo, 0);
        if (err) {
                dev_err(adev->dev, "(%d) Firmware buffer allocate failed\n", 
err);
                goto failed;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index 2ca09f1..9df2411 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -1051,7 +1051,7 @@ int amdgpu_uvd_get_create_msg(struct amdgpu_ring *ring, 
uint32_t handle,
                             AMDGPU_GEM_DOMAIN_VRAM,
                             AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                            NULL, NULL, &bo);
+                            NULL, NULL, &bo, 0);
        if (r)
                return r;
 
@@ -1101,7 +1101,7 @@ int amdgpu_uvd_get_destroy_msg(struct amdgpu_ring *ring, 
uint32_t handle,
                             AMDGPU_GEM_DOMAIN_VRAM,
                             AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                            NULL, NULL, &bo);
+                            NULL, NULL, &bo, 0);
        if (r)
                return r;
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
index 09190fa..8e6e786 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
@@ -361,7 +361,7 @@ static int amdgpu_vcn_dec_get_create_msg(struct amdgpu_ring 
*ring, uint32_t hand
                             AMDGPU_GEM_DOMAIN_VRAM,
                             AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                            NULL, NULL, &bo);
+                            NULL, NULL, &bo, 0);
        if (r)
                return r;
 
@@ -413,7 +413,7 @@ static int amdgpu_vcn_dec_get_destroy_msg(struct 
amdgpu_ring *ring, uint32_t han
                             AMDGPU_GEM_DOMAIN_VRAM,
                             AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                            NULL, NULL, &bo);
+                            NULL, NULL, &bo, 0);
        if (r)
                return r;
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index fc482cc4..cb523bd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -288,6 +288,7 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device 
*adev,
        unsigned pt_idx, from, to;
        int r;
        u64 flags;
+       uint64_t init_value = 0;
 
        if (!parent->entries) {
                unsigned num_entries = amdgpu_vm_num_entries(adev, level);
@@ -320,6 +321,9 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device 
*adev,
                flags |= (AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
                                AMDGPU_GEM_CREATE_SHADOW);
 
+       if (vm->pte_support_ats)
+               init_value = AMDGPU_PTE_SYSTEM;
+
        /* walk over the address space and allocate the page tables */
        for (pt_idx = from; pt_idx <= to; ++pt_idx) {
                struct reservation_object *resv = vm->root.bo->tbo.resv;
@@ -332,7 +336,7 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device 
*adev,
                                             AMDGPU_GPU_PAGE_SIZE, true,
                                             AMDGPU_GEM_DOMAIN_VRAM,
                                             flags,
-                                            NULL, resv, &pt);
+                                            NULL, resv, &pt, init_value);
                        if (r)
                                return r;
 
@@ -1994,15 +1998,19 @@ int amdgpu_vm_clear_freed(struct amdgpu_device *adev,
        struct amdgpu_bo_va_mapping *mapping;
        struct dma_fence *f = NULL;
        int r;
+       uint64_t init_pte_value = 0;
 
        while (!list_empty(&vm->freed)) {
                mapping = list_first_entry(&vm->freed,
                        struct amdgpu_bo_va_mapping, list);
                list_del(&mapping->list);
 
+               if (vm->pte_support_ats)
+                       init_pte_value = AMDGPU_PTE_SYSTEM;
+
                r = amdgpu_vm_bo_update_mapping(adev, NULL, 0, NULL, vm,
                                                mapping->start, mapping->last,
-                                               0, 0, &f);
+                                               init_pte_value, 0, &f);
                amdgpu_vm_free_mapping(adev, vm, mapping, f);
                if (r) {
                        dma_fence_put(f);
@@ -2493,6 +2501,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct 
amdgpu_vm *vm,
        struct amd_sched_rq *rq;
        int r, i;
        u64 flags;
+       uint64_t init_pde_value = 0;
 
        vm->va = RB_ROOT;
        vm->client_id = atomic64_inc_return(&adev->vm_manager.client_counter);
@@ -2514,10 +2523,17 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct 
amdgpu_vm *vm,
        if (r)
                return r;
 
-       if (vm_context == AMDGPU_VM_CONTEXT_COMPUTE)
+       vm->pte_support_ats = false;
+
+       if (vm_context == AMDGPU_VM_CONTEXT_COMPUTE) {
                vm->use_cpu_for_update = !!(adev->vm_manager.vm_update_mode &
                                                AMDGPU_VM_USE_CPU_FOR_COMPUTE);
-       else
+
+               if (adev->asic_type == CHIP_RAVEN) {
+                       vm->pte_support_ats = true;
+                       init_pde_value = AMDGPU_PTE_SYSTEM;
+               }
+       } else
                vm->use_cpu_for_update = !!(adev->vm_manager.vm_update_mode &
                                                AMDGPU_VM_USE_CPU_FOR_GFX);
        DRM_DEBUG_DRIVER("VM update mode is %s\n",
@@ -2528,6 +2544,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct 
amdgpu_vm *vm,
 
        flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |
                        AMDGPU_GEM_CREATE_VRAM_CLEARED;
+
        if (vm->use_cpu_for_update)
                flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
        else
@@ -2537,7 +2554,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct 
amdgpu_vm *vm,
        r = amdgpu_bo_create(adev, amdgpu_vm_bo_size(adev, 0), align, true,
                             AMDGPU_GEM_DOMAIN_VRAM,
                             flags,
-                            NULL, NULL, &vm->root.bo);
+                            NULL, NULL, &vm->root.bo, init_pde_value);
        if (r)
                goto error_free_sched_entity;
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
index 34d9174..217ecba 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
@@ -146,6 +146,9 @@ struct amdgpu_vm {
 
        /* Flag to indicate if VM tables are updated by CPU or GPU (SDMA) */
        bool                    use_cpu_for_update;
+
+       /* Flag to indicate ATS support from PTE for GFX9 */
+       bool                    pte_support_ats;
 };
 
 struct amdgpu_vm_id {
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c 
b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
index 4ac85f4..7135178 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
@@ -2278,7 +2278,7 @@ static int gfx_v6_0_rlc_init(struct amdgpu_device *adev)
                                             AMDGPU_GEM_DOMAIN_VRAM,
                                             
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
                                             NULL, NULL,
-                                            &adev->gfx.rlc.save_restore_obj);
+                                            &adev->gfx.rlc.save_restore_obj, 
0);
 
                        if (r) {
                                dev_warn(adev->dev, "(%d) create RLC sr bo 
failed\n", r);
@@ -2324,7 +2324,7 @@ static int gfx_v6_0_rlc_init(struct amdgpu_device *adev)
                                             AMDGPU_GEM_DOMAIN_VRAM,
                                             
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
                                             NULL, NULL,
-                                            &adev->gfx.rlc.clear_state_obj);
+                                            &adev->gfx.rlc.clear_state_obj, 0);
 
                        if (r) {
                                dev_warn(adev->dev, "(%d) create RLC c bo 
failed\n", r);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c 
b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index 42b932c..b547229 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -2828,7 +2828,7 @@ static int gfx_v7_0_mec_init(struct amdgpu_device *adev)
                                     mec_hpd_size,
                                     PAGE_SIZE, true,
                                     AMDGPU_GEM_DOMAIN_GTT, 0, NULL, NULL,
-                                    &adev->gfx.mec.hpd_eop_obj);
+                                    &adev->gfx.mec.hpd_eop_obj, 0);
                if (r) {
                        dev_warn(adev->dev, "(%d) create HDP EOP bo failed\n", 
r);
                        return r;
@@ -3113,7 +3113,7 @@ static int gfx_v7_0_compute_queue_init(struct 
amdgpu_device *adev, int ring_id)
                                sizeof(struct cik_mqd),
                                PAGE_SIZE, true,
                                AMDGPU_GEM_DOMAIN_GTT, 0, NULL, NULL,
-                               &ring->mqd_obj);
+                               &ring->mqd_obj, 0);
                if (r) {
                        dev_warn(adev->dev, "(%d) create MQD bo failed\n", r);
                        return r;
@@ -3438,7 +3438,7 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev)
                                             
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
                                             NULL, NULL,
-                                            &adev->gfx.rlc.save_restore_obj);
+                                            &adev->gfx.rlc.save_restore_obj, 
0);
                        if (r) {
                                dev_warn(adev->dev, "(%d) create RLC sr bo 
failed\n", r);
                                return r;
@@ -3483,7 +3483,7 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev)
                                             
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
                                             NULL, NULL,
-                                            &adev->gfx.rlc.clear_state_obj);
+                                            &adev->gfx.rlc.clear_state_obj, 0);
                        if (r) {
                                dev_warn(adev->dev, "(%d) create RLC c bo 
failed\n", r);
                                gfx_v7_0_rlc_fini(adev);
@@ -3524,7 +3524,7 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev)
                                             
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
                                             NULL, NULL,
-                                            &adev->gfx.rlc.cp_table_obj);
+                                            &adev->gfx.rlc.cp_table_obj, 0);
                        if (r) {
                                dev_warn(adev->dev, "(%d) create RLC cp table 
bo failed\n", r);
                                gfx_v7_0_rlc_fini(adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c 
b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index b58d98d..0213227 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -1284,7 +1284,7 @@ static int gfx_v8_0_rlc_init(struct amdgpu_device *adev)
                                             
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
                                             NULL, NULL,
-                                            &adev->gfx.rlc.clear_state_obj);
+                                            &adev->gfx.rlc.clear_state_obj, 0);
                        if (r) {
                                dev_warn(adev->dev, "(%d) create RLC c bo 
failed\n", r);
                                gfx_v8_0_rlc_fini(adev);
@@ -1327,7 +1327,7 @@ static int gfx_v8_0_rlc_init(struct amdgpu_device *adev)
                                             
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
                                             AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
                                             NULL, NULL,
-                                            &adev->gfx.rlc.cp_table_obj);
+                                            &adev->gfx.rlc.cp_table_obj, 0);
                        if (r) {
                                dev_warn(adev->dev, "(%d) create RLC cp table 
bo failed\n", r);
                                return r;
@@ -1394,7 +1394,7 @@ static int gfx_v8_0_mec_init(struct amdgpu_device *adev)
                                     mec_hpd_size,
                                     PAGE_SIZE, true,
                                     AMDGPU_GEM_DOMAIN_GTT, 0, NULL, NULL,
-                                    &adev->gfx.mec.hpd_eop_obj);
+                                    &adev->gfx.mec.hpd_eop_obj, 0);
                if (r) {
                        dev_warn(adev->dev, "(%d) create HDP EOP bo failed\n", 
r);
                        return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
index 4d7f042..9fac735 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -867,7 +867,7 @@ static int gfx_v9_0_mec_init(struct amdgpu_device *adev)
                                     mec_hpd_size,
                                     PAGE_SIZE, true,
                                     AMDGPU_GEM_DOMAIN_GTT, 0, NULL, NULL,
-                                    &adev->gfx.mec.hpd_eop_obj);
+                                    &adev->gfx.mec.hpd_eop_obj, 0);
                if (r) {
                        dev_warn(adev->dev, "(%d) create HDP EOP bo failed\n", 
r);
                        return r;
@@ -910,7 +910,7 @@ static int gfx_v9_0_mec_init(struct amdgpu_device *adev)
                        mec_hdr->header.ucode_size_bytes,
                        PAGE_SIZE, true,
                        AMDGPU_GEM_DOMAIN_GTT, 0, NULL, NULL,
-                       &adev->gfx.mec.mec_fw_obj);
+                       &adev->gfx.mec.mec_fw_obj, 0);
                if (r) {
                        dev_warn(adev->dev, "(%d) create mec firmware bo 
failed\n", r);
                        return r;
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to