drm/amdgpu: Add a parameter to amdgpu_bo_create()
authorYong Zhao <Yong.Zhao@amd.com>
Thu, 20 Jul 2017 22:49:09 +0000 (18:49 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Aug 2017 18:45:58 +0000 (14:45 -0400)
The parameter init_value contains the value to which we initialized
VRAM bo when AMDGPU_GEM_CREATE_VRAM_CLEARED flag is set.

Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
14 files changed:
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
drivers/gpu/drm/amd/amdgpu/amdgpu_test.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

index 37971d9402e3f206910e99dd29e8a72a7b4f93b1..3d96bd7371e85938b60a49a99d1673b944589184 100644 (file)
@@ -184,7 +184,8 @@ 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, 0,
+                            &(*mem)->bo);
        if (r) {
                dev_err(adev->dev,
                        "failed to allocate BO for amdkfd (%d)\n", r);
index 2fb299afc12b7e9a51c853b5ff1b048172856e4d..63ec1e1bb6aa17dff2ad786f2aae9600d607a38a 100644 (file)
@@ -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, 0, &sobj);
        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, 0, &dobj);
        if (r) {
                goto out_cleanup;
        }
index a99e0bca6812afee906a36797560b09a359ae1f5..69806c5bcd01d82b799b1f149333fe6144559da1 100644 (file)
@@ -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);
+                                         0, &obj);
        if (ret) {
                DRM_ERROR("(%d) bo create failed\n", ret);
                return ret;
index 5cc4987cd8873a0a531c3822a27b808aeac8b926..94c1e2e8e34ca659717af06aa944c8e2675ba2a7 100644 (file)
@@ -144,7 +144,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, 0, &adev->gart.robj);
                if (r) {
                        return r;
                }
index 88085e7f72de10781e470a038c3362c2b348647c..a227d34d38521ab714650b3c77efca4231449f73 100644 (file)
@@ -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, 0, &robj);
        if (r) {
                if (r != -ERESTARTSYS) {
                        if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
index 494b79374828ae905551104b62852e625533d005..16f31cbd91473a8d2039ce19c153b8f7f6458ac0 100644 (file)
@@ -247,7 +247,7 @@ int amdgpu_bo_create_reserved(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, 0, bo_ptr);
                if (r) {
                        dev_err(adev->dev, "(%d) failed to allocate kernel bo\n",
                                r);
@@ -356,6 +356,7 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
                                struct sg_table *sg,
                                struct ttm_placement *placement,
                                struct reservation_object *resv,
+                               uint64_t init_value,
                                struct amdgpu_bo **bo_ptr)
 {
        struct amdgpu_bo *bo;
@@ -456,7 +457,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;
 
@@ -508,6 +509,7 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
                                        AMDGPU_GEM_CREATE_CPU_GTT_USWC,
                                        NULL, &placement,
                                        bo->tbo.resv,
+                                       0,
                                        &bo->shadow);
        if (!r) {
                bo->shadow->parent = amdgpu_bo_ref(bo);
@@ -519,11 +521,15 @@ 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,
+                    uint64_t init_value,
                     struct amdgpu_bo **bo_ptr)
 {
        struct ttm_placement placement = {0};
@@ -538,7 +544,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, init_value, bo_ptr);
        if (r)
                return r;
 
index cbf6e6d54ef0036bef7187b941512849c0756b7f..b6d8be84b884c2758dd9653f1a9fa37df1fc3094 100644 (file)
@@ -193,6 +193,7 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
                            bool kernel, u32 domain, u64 flags,
                            struct sg_table *sg,
                            struct reservation_object *resv,
+                           uint64_t init_value,
                            struct amdgpu_bo **bo_ptr);
 int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
                                unsigned long size, int byte_align,
@@ -200,6 +201,7 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
                                struct sg_table *sg,
                                struct ttm_placement *placement,
                                struct reservation_object *resv,
+                               uint64_t init_value,
                                struct amdgpu_bo **bo_ptr);
 int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
                              unsigned long size, int align,
index 6bdc866570ab8d67575ac3734d1f67573978df79..5b3f92891f899d8b6f00da5ade675245beba6571 100644 (file)
@@ -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, 0, &bo);
        ww_mutex_unlock(&resv->lock);
        if (ret)
                return ERR_PTR(ret);
index 5ca75a456ad2ad94e81773fc209e1977dc18aa9f..3144400435b79ca3c3e58bf18abba5462efe0bed 100644 (file)
@@ -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, 0, &sa_manager->bo);
        if (r) {
                dev_err(adev->dev, "(%d) failed to allocate bo for manager\n", r);
                return r;
index 3c4d7574d704ea5915d0195043715676a33a3a04..ed8c3739015be481cfd7072b712b3c8ee562d2e4 100644 (file)
@@ -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, 0, &vram_obj);
        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, 0, gtt_obj + i);
                if (r) {
                        DRM_ERROR("Failed to create GTT object %d\n", i);
                        goto out_lclean;
index fcfb9d4f7477a8e833b363a9bfd419434006a50a..d3468a2d8839752bac49cfe55e4e9aa3e1b08cd0 100644 (file)
@@ -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, 0, bo);
        if (err) {
                dev_err(adev->dev, "(%d) Firmware buffer allocate failed\n", err);
                goto failed;
index 2ca09f111f08d02838cea38e3d7148752c6ffc0b..aefecf6c1e7be6954769317f90566fe0c18c9c31 100644 (file)
@@ -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, 0, &bo);
        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, 0, &bo);
        if (r)
                return r;
 
index d58ca8240ae11e473a2e01ab5a716963b911f7f6..041e0121590c96bb34e17444d32ec0186efeb539 100644 (file)
@@ -359,7 +359,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, 0, &bo);
        if (r)
                return r;
 
@@ -411,7 +411,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, 0, &bo);
        if (r)
                return r;
 
index 9255c3e579fc4ace74f277e22c333812687ea6c7..601e899005d0920fb893bdb1d4226c60316eb117 100644 (file)
@@ -333,7 +333,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, 0, &pt);
                        if (r)
                                return r;
 
@@ -2538,7 +2538,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, 0, &vm->root.bo);
        if (r)
                goto error_free_sched_entity;