mirror of https://gitee.com/openkylin/linux.git
drm/amdgpu: Add a parameter to amdgpu_bo_create()
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>
This commit is contained in:
parent
078af1a3e9
commit
2046d46db9
|
@ -184,7 +184,8 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_GTT,
|
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) {
|
if (r) {
|
||||||
dev_err(adev->dev,
|
dev_err(adev->dev,
|
||||||
"failed to allocate BO for amdkfd (%d)\n", r);
|
"failed to allocate BO for amdkfd (%d)\n", r);
|
||||||
|
|
|
@ -81,7 +81,7 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
|
||||||
|
|
||||||
n = AMDGPU_BENCHMARK_ITERATIONS;
|
n = AMDGPU_BENCHMARK_ITERATIONS;
|
||||||
r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, sdomain, 0, NULL,
|
r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, sdomain, 0, NULL,
|
||||||
NULL, &sobj);
|
NULL, 0, &sobj);
|
||||||
if (r) {
|
if (r) {
|
||||||
goto out_cleanup;
|
goto out_cleanup;
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
|
||||||
goto out_cleanup;
|
goto out_cleanup;
|
||||||
}
|
}
|
||||||
r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, ddomain, 0, NULL,
|
r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, ddomain, 0, NULL,
|
||||||
NULL, &dobj);
|
NULL, 0, &dobj);
|
||||||
if (r) {
|
if (r) {
|
||||||
goto out_cleanup;
|
goto out_cleanup;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
ret = amdgpu_bo_create_restricted(adev, size, PAGE_SIZE,
|
||||||
true, domain, flags,
|
true, domain, flags,
|
||||||
NULL, &placement, NULL,
|
NULL, &placement, NULL,
|
||||||
&obj);
|
0, &obj);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
DRM_ERROR("(%d) bo create failed\n", ret);
|
DRM_ERROR("(%d) bo create failed\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -144,7 +144,7 @@ int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev)
|
||||||
PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM,
|
PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM,
|
||||||
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
||||||
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
||||||
NULL, NULL, &adev->gart.robj);
|
NULL, NULL, 0, &adev->gart.robj);
|
||||||
if (r) {
|
if (r) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
r = amdgpu_bo_create(adev, size, alignment, kernel, initial_domain,
|
r = amdgpu_bo_create(adev, size, alignment, kernel, initial_domain,
|
||||||
flags, NULL, NULL, &robj);
|
flags, NULL, NULL, 0, &robj);
|
||||||
if (r) {
|
if (r) {
|
||||||
if (r != -ERESTARTSYS) {
|
if (r != -ERESTARTSYS) {
|
||||||
if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
|
if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
|
||||||
|
|
|
@ -247,7 +247,7 @@ int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
|
||||||
r = amdgpu_bo_create(adev, size, align, true, domain,
|
r = amdgpu_bo_create(adev, size, align, true, domain,
|
||||||
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
||||||
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
||||||
NULL, NULL, bo_ptr);
|
NULL, NULL, 0, bo_ptr);
|
||||||
if (r) {
|
if (r) {
|
||||||
dev_err(adev->dev, "(%d) failed to allocate kernel bo\n",
|
dev_err(adev->dev, "(%d) failed to allocate kernel bo\n",
|
||||||
r);
|
r);
|
||||||
|
@ -356,6 +356,7 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
|
||||||
struct sg_table *sg,
|
struct sg_table *sg,
|
||||||
struct ttm_placement *placement,
|
struct ttm_placement *placement,
|
||||||
struct reservation_object *resv,
|
struct reservation_object *resv,
|
||||||
|
uint64_t init_value,
|
||||||
struct amdgpu_bo **bo_ptr)
|
struct amdgpu_bo **bo_ptr)
|
||||||
{
|
{
|
||||||
struct amdgpu_bo *bo;
|
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) {
|
bo->tbo.mem.placement & TTM_PL_FLAG_VRAM) {
|
||||||
struct dma_fence *fence;
|
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))
|
if (unlikely(r))
|
||||||
goto fail_unreserve;
|
goto fail_unreserve;
|
||||||
|
|
||||||
|
@ -508,6 +509,7 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
|
||||||
AMDGPU_GEM_CREATE_CPU_GTT_USWC,
|
AMDGPU_GEM_CREATE_CPU_GTT_USWC,
|
||||||
NULL, &placement,
|
NULL, &placement,
|
||||||
bo->tbo.resv,
|
bo->tbo.resv,
|
||||||
|
0,
|
||||||
&bo->shadow);
|
&bo->shadow);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
bo->shadow->parent = amdgpu_bo_ref(bo);
|
bo->shadow->parent = amdgpu_bo_ref(bo);
|
||||||
|
@ -519,11 +521,15 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* init_value will only take effect when flags contains
|
||||||
|
* AMDGPU_GEM_CREATE_VRAM_CLEARED.
|
||||||
|
*/
|
||||||
int amdgpu_bo_create(struct amdgpu_device *adev,
|
int amdgpu_bo_create(struct amdgpu_device *adev,
|
||||||
unsigned long size, int byte_align,
|
unsigned long size, int byte_align,
|
||||||
bool kernel, u32 domain, u64 flags,
|
bool kernel, u32 domain, u64 flags,
|
||||||
struct sg_table *sg,
|
struct sg_table *sg,
|
||||||
struct reservation_object *resv,
|
struct reservation_object *resv,
|
||||||
|
uint64_t init_value,
|
||||||
struct amdgpu_bo **bo_ptr)
|
struct amdgpu_bo **bo_ptr)
|
||||||
{
|
{
|
||||||
struct ttm_placement placement = {0};
|
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,
|
r = amdgpu_bo_create_restricted(adev, size, byte_align, kernel,
|
||||||
domain, flags, sg, &placement,
|
domain, flags, sg, &placement,
|
||||||
resv, bo_ptr);
|
resv, init_value, bo_ptr);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
|
@ -193,6 +193,7 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
|
||||||
bool kernel, u32 domain, u64 flags,
|
bool kernel, u32 domain, u64 flags,
|
||||||
struct sg_table *sg,
|
struct sg_table *sg,
|
||||||
struct reservation_object *resv,
|
struct reservation_object *resv,
|
||||||
|
uint64_t init_value,
|
||||||
struct amdgpu_bo **bo_ptr);
|
struct amdgpu_bo **bo_ptr);
|
||||||
int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
|
int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
|
||||||
unsigned long size, int byte_align,
|
unsigned long size, int byte_align,
|
||||||
|
@ -200,6 +201,7 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
|
||||||
struct sg_table *sg,
|
struct sg_table *sg,
|
||||||
struct ttm_placement *placement,
|
struct ttm_placement *placement,
|
||||||
struct reservation_object *resv,
|
struct reservation_object *resv,
|
||||||
|
uint64_t init_value,
|
||||||
struct amdgpu_bo **bo_ptr);
|
struct amdgpu_bo **bo_ptr);
|
||||||
int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
|
int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
|
||||||
unsigned long size, int align,
|
unsigned long size, int align,
|
||||||
|
|
|
@ -69,7 +69,7 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
|
||||||
|
|
||||||
ww_mutex_lock(&resv->lock, NULL);
|
ww_mutex_lock(&resv->lock, NULL);
|
||||||
ret = amdgpu_bo_create(adev, attach->dmabuf->size, PAGE_SIZE, false,
|
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);
|
ww_mutex_unlock(&resv->lock);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ERR_PTR(ret);
|
return ERR_PTR(ret);
|
||||||
|
|
|
@ -64,7 +64,7 @@ int amdgpu_sa_bo_manager_init(struct amdgpu_device *adev,
|
||||||
INIT_LIST_HEAD(&sa_manager->flist[i]);
|
INIT_LIST_HEAD(&sa_manager->flist[i]);
|
||||||
|
|
||||||
r = amdgpu_bo_create(adev, size, align, true, domain,
|
r = amdgpu_bo_create(adev, size, align, true, domain,
|
||||||
0, NULL, NULL, &sa_manager->bo);
|
0, NULL, NULL, 0, &sa_manager->bo);
|
||||||
if (r) {
|
if (r) {
|
||||||
dev_err(adev->dev, "(%d) failed to allocate bo for manager\n", r);
|
dev_err(adev->dev, "(%d) failed to allocate bo for manager\n", r);
|
||||||
return r;
|
return r;
|
||||||
|
|
|
@ -61,7 +61,7 @@ static void amdgpu_do_test_moves(struct amdgpu_device *adev)
|
||||||
|
|
||||||
r = amdgpu_bo_create(adev, size, PAGE_SIZE, true,
|
r = amdgpu_bo_create(adev, size, PAGE_SIZE, true,
|
||||||
AMDGPU_GEM_DOMAIN_VRAM, 0,
|
AMDGPU_GEM_DOMAIN_VRAM, 0,
|
||||||
NULL, NULL, &vram_obj);
|
NULL, NULL, 0, &vram_obj);
|
||||||
if (r) {
|
if (r) {
|
||||||
DRM_ERROR("Failed to create VRAM object\n");
|
DRM_ERROR("Failed to create VRAM object\n");
|
||||||
goto out_cleanup;
|
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,
|
r = amdgpu_bo_create(adev, size, PAGE_SIZE, true,
|
||||||
AMDGPU_GEM_DOMAIN_GTT, 0, NULL,
|
AMDGPU_GEM_DOMAIN_GTT, 0, NULL,
|
||||||
NULL, gtt_obj + i);
|
NULL, 0, gtt_obj + i);
|
||||||
if (r) {
|
if (r) {
|
||||||
DRM_ERROR("Failed to create GTT object %d\n", i);
|
DRM_ERROR("Failed to create GTT object %d\n", i);
|
||||||
goto out_lclean;
|
goto out_lclean;
|
||||||
|
|
|
@ -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,
|
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_sriov_vf(adev) ? AMDGPU_GEM_DOMAIN_VRAM : AMDGPU_GEM_DOMAIN_GTT,
|
||||||
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
||||||
NULL, NULL, bo);
|
NULL, NULL, 0, bo);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(adev->dev, "(%d) Firmware buffer allocate failed\n", err);
|
dev_err(adev->dev, "(%d) Firmware buffer allocate failed\n", err);
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|
|
@ -1051,7 +1051,7 @@ int amdgpu_uvd_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
|
||||||
AMDGPU_GEM_DOMAIN_VRAM,
|
AMDGPU_GEM_DOMAIN_VRAM,
|
||||||
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
||||||
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
||||||
NULL, NULL, &bo);
|
NULL, NULL, 0, &bo);
|
||||||
if (r)
|
if (r)
|
||||||
return 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_DOMAIN_VRAM,
|
||||||
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
||||||
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
||||||
NULL, NULL, &bo);
|
NULL, NULL, 0, &bo);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
|
@ -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_DOMAIN_VRAM,
|
||||||
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
||||||
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
||||||
NULL, NULL, &bo);
|
NULL, NULL, 0, &bo);
|
||||||
if (r)
|
if (r)
|
||||||
return 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_DOMAIN_VRAM,
|
||||||
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
|
||||||
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
|
||||||
NULL, NULL, &bo);
|
NULL, NULL, 0, &bo);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
|
@ -333,7 +333,7 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device *adev,
|
||||||
AMDGPU_GPU_PAGE_SIZE, true,
|
AMDGPU_GPU_PAGE_SIZE, true,
|
||||||
AMDGPU_GEM_DOMAIN_VRAM,
|
AMDGPU_GEM_DOMAIN_VRAM,
|
||||||
flags,
|
flags,
|
||||||
NULL, resv, &pt);
|
NULL, resv, 0, &pt);
|
||||||
if (r)
|
if (r)
|
||||||
return 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,
|
r = amdgpu_bo_create(adev, amdgpu_vm_bo_size(adev, 0), align, true,
|
||||||
AMDGPU_GEM_DOMAIN_VRAM,
|
AMDGPU_GEM_DOMAIN_VRAM,
|
||||||
flags,
|
flags,
|
||||||
NULL, NULL, &vm->root.bo);
|
NULL, NULL, 0, &vm->root.bo);
|
||||||
if (r)
|
if (r)
|
||||||
goto error_free_sched_entity;
|
goto error_free_sched_entity;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue