drm/amdgpu/mes: map ctx metadata for mes self test
authorJack Xiao <Jack.Xiao@amd.com>
Fri, 27 Mar 2020 13:36:43 +0000 (21:36 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 4 May 2022 14:43:52 +0000 (10:43 -0400)
Map ctx metadata for mes self test.

Signed-off-by: Jack Xiao <Jack.Xiao@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c

index 6c01581e3a7bd8681ed37e66c480136f161c632e..b440b36dd98a1ad303bb0bfd601b62fc9a3ea0bb 100644 (file)
@@ -882,3 +882,40 @@ void amdgpu_mes_ctx_free_meta_data(struct amdgpu_mes_ctx_data *ctx_data)
        if (ctx_data->meta_data_obj)
                amdgpu_bo_free_kernel(&ctx_data->meta_data_obj, NULL, NULL);
 }
+
+static int amdgpu_mes_test_map_ctx_meta_data(struct amdgpu_device *adev,
+                                    struct amdgpu_vm *vm,
+                                    struct amdgpu_mes_ctx_data *ctx_data)
+{
+       struct amdgpu_bo_va *meta_data_va = NULL;
+       uint64_t meta_data_addr = AMDGPU_VA_RESERVED_SIZE;
+       int r;
+
+       r = amdgpu_map_static_csa(adev, vm, ctx_data->meta_data_obj,
+                                 &meta_data_va, meta_data_addr,
+                                 sizeof(struct amdgpu_mes_ctx_meta_data));
+       if (r)
+               return r;
+
+       r = amdgpu_vm_bo_update(adev, meta_data_va, false);
+       if (r)
+               goto error;
+
+       r = amdgpu_vm_update_pdes(adev, vm, false);
+       if (r)
+               goto error;
+
+       dma_fence_wait(vm->last_update, false);
+       dma_fence_wait(meta_data_va->last_pt_update, false);
+
+       ctx_data->meta_data_gpu_addr = meta_data_addr;
+       ctx_data->meta_data_va = meta_data_va;
+
+       return 0;
+
+error:
+       BUG_ON(amdgpu_bo_reserve(ctx_data->meta_data_obj, true));
+       amdgpu_vm_bo_rmv(adev, meta_data_va);
+       amdgpu_bo_unreserve(ctx_data->meta_data_obj);
+       return r;
+}