diff options
| author | Chunming Zhou <david1.zhou@amd.com> | 2018-04-16 18:27:50 +0800 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2018-05-15 13:43:28 -0500 | 
| commit | 3216c6b71d1e6a7dce2fd29c531e8c99c1b88c95 (patch) | |
| tree | 5c073e948136a4be7a70c64da3d97968747d9aa1 /drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | |
| parent | a906dbb1e20f5791d728c7d9e2366b8acb4f1bb2 (diff) | |
drm/amdgpu: use amdgpu_bo_param for amdgpu_bo_create v2
After that, we can easily add new parameter when need.
v2:
a) rebase.
b) Initialize struct amdgpu_bo_param, future new
member could only be used in some one case, but all member
should have its own initial value.
Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
Reviewed-by: Huang Rui <ray.huang@amd.com> (v1)
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
Cc: christian.koenig@amd.com
Cc: Felix.Kuehling@amd.com
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 58 | 
1 files changed, 29 insertions, 29 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index b33a7fdea7f2..cac65e32a0b9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -191,14 +191,21 @@ int amdgpu_bo_create_reserved(struct amdgpu_device *adev,  			      u32 domain, struct amdgpu_bo **bo_ptr,  			      u64 *gpu_addr, void **cpu_addr)  { +	struct amdgpu_bo_param bp;  	bool free = false;  	int r; +	memset(&bp, 0, sizeof(bp)); +	bp.size = size; +	bp.byte_align = align; +	bp.domain = domain; +	bp.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | +		AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS; +	bp.type = ttm_bo_type_kernel; +	bp.resv = NULL; +  	if (!*bo_ptr) { -		r = amdgpu_bo_create(adev, size, align, domain, -				     AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | -				     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS, -				     ttm_bo_type_kernel, NULL, bo_ptr); +		r = amdgpu_bo_create(adev, &bp, bo_ptr);  		if (r) {  			dev_err(adev->dev, "(%d) failed to allocate kernel bo\n",  				r); @@ -470,20 +477,21 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,  				   unsigned long size, int byte_align,  				   struct amdgpu_bo *bo)  { -	struct amdgpu_bo_param bp = { -		.size = size, -		.byte_align = byte_align, -		.domain = AMDGPU_GEM_DOMAIN_GTT, -		.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC | -			AMDGPU_GEM_CREATE_SHADOW, -		.type = ttm_bo_type_kernel, -		.resv = bo->tbo.resv -	}; +	struct amdgpu_bo_param bp;  	int r;  	if (bo->shadow)  		return 0; +	memset(&bp, 0, sizeof(bp)); +	bp.size = size; +	bp.byte_align = byte_align; +	bp.domain = AMDGPU_GEM_DOMAIN_GTT; +	bp.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC | +		AMDGPU_GEM_CREATE_SHADOW; +	bp.type = ttm_bo_type_kernel; +	bp.resv = bo->tbo.resv; +  	r = amdgpu_bo_do_create(adev, &bp, &bo->shadow);  	if (!r) {  		bo->shadow->parent = amdgpu_bo_ref(bo); @@ -495,34 +503,26 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,  	return r;  } -int amdgpu_bo_create(struct amdgpu_device *adev, unsigned long size, -		     int byte_align, u32 domain, -		     u64 flags, enum ttm_bo_type type, -		     struct reservation_object *resv, +int amdgpu_bo_create(struct amdgpu_device *adev, +		     struct amdgpu_bo_param *bp,  		     struct amdgpu_bo **bo_ptr)  { -	struct amdgpu_bo_param bp = { -		.size = size, -		.byte_align = byte_align, -		.domain = domain, -		.flags = flags & ~AMDGPU_GEM_CREATE_SHADOW, -		.type = type, -		.resv = resv -	}; +	u64 flags = bp->flags;  	int r; -	r = amdgpu_bo_do_create(adev, &bp, bo_ptr); +	bp->flags = bp->flags & ~AMDGPU_GEM_CREATE_SHADOW; +	r = amdgpu_bo_do_create(adev, bp, bo_ptr);  	if (r)  		return r;  	if ((flags & AMDGPU_GEM_CREATE_SHADOW) && amdgpu_need_backup(adev)) { -		if (!resv) +		if (!bp->resv)  			WARN_ON(reservation_object_lock((*bo_ptr)->tbo.resv,  							NULL)); -		r = amdgpu_bo_create_shadow(adev, size, byte_align, (*bo_ptr)); +		r = amdgpu_bo_create_shadow(adev, bp->size, bp->byte_align, (*bo_ptr)); -		if (!resv) +		if (!bp->resv)  			reservation_object_unlock((*bo_ptr)->tbo.resv);  		if (r)  | 
