diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 43 | 
1 files changed, 26 insertions, 17 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 5ac7b5561475..ac043baac05d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -136,8 +136,8 @@ void amdgpu_bo_placement_from_domain(struct amdgpu_bo *abo, u32 domain)  		places[c].fpfn = 0;  		places[c].lpfn = 0; -		places[c].flags = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | -			TTM_PL_FLAG_VRAM; +		places[c].mem_type = TTM_PL_VRAM; +		places[c].flags = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED;  		if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED)  			places[c].lpfn = visible_pfn; @@ -152,7 +152,8 @@ void amdgpu_bo_placement_from_domain(struct amdgpu_bo *abo, u32 domain)  	if (domain & AMDGPU_GEM_DOMAIN_GTT) {  		places[c].fpfn = 0;  		places[c].lpfn = 0; -		places[c].flags = TTM_PL_FLAG_TT; +		places[c].mem_type = TTM_PL_TT; +		places[c].flags = 0;  		if (flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC)  			places[c].flags |= TTM_PL_FLAG_WC |  				TTM_PL_FLAG_UNCACHED; @@ -164,7 +165,8 @@ void amdgpu_bo_placement_from_domain(struct amdgpu_bo *abo, u32 domain)  	if (domain & AMDGPU_GEM_DOMAIN_CPU) {  		places[c].fpfn = 0;  		places[c].lpfn = 0; -		places[c].flags = TTM_PL_FLAG_SYSTEM; +		places[c].mem_type = TTM_PL_SYSTEM; +		places[c].flags = 0;  		if (flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC)  			places[c].flags |= TTM_PL_FLAG_WC |  				TTM_PL_FLAG_UNCACHED; @@ -176,28 +178,32 @@ void amdgpu_bo_placement_from_domain(struct amdgpu_bo *abo, u32 domain)  	if (domain & AMDGPU_GEM_DOMAIN_GDS) {  		places[c].fpfn = 0;  		places[c].lpfn = 0; -		places[c].flags = TTM_PL_FLAG_UNCACHED | AMDGPU_PL_FLAG_GDS; +		places[c].mem_type = AMDGPU_PL_GDS; +		places[c].flags = TTM_PL_FLAG_UNCACHED;  		c++;  	}  	if (domain & AMDGPU_GEM_DOMAIN_GWS) {  		places[c].fpfn = 0;  		places[c].lpfn = 0; -		places[c].flags = TTM_PL_FLAG_UNCACHED | AMDGPU_PL_FLAG_GWS; +		places[c].mem_type = AMDGPU_PL_GWS; +		places[c].flags = TTM_PL_FLAG_UNCACHED;  		c++;  	}  	if (domain & AMDGPU_GEM_DOMAIN_OA) {  		places[c].fpfn = 0;  		places[c].lpfn = 0; -		places[c].flags = TTM_PL_FLAG_UNCACHED | AMDGPU_PL_FLAG_OA; +		places[c].mem_type = AMDGPU_PL_OA; +		places[c].flags = TTM_PL_FLAG_UNCACHED;  		c++;  	}  	if (!c) {  		places[c].fpfn = 0;  		places[c].lpfn = 0; -		places[c].flags = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; +		places[c].mem_type = TTM_PL_SYSTEM; +		places[c].flags = TTM_PL_MASK_CACHING;  		c++;  	} @@ -374,6 +380,9 @@ int amdgpu_bo_create_kernel_at(struct amdgpu_device *adev,  	if (r)  		return r; +	if ((*bo_ptr) == NULL) +		return 0; +  	/*  	 * Remove the original mem node and create a new one at the request  	 * position. @@ -381,7 +390,7 @@ int amdgpu_bo_create_kernel_at(struct amdgpu_device *adev,  	if (cpu_addr)  		amdgpu_bo_kunmap(*bo_ptr); -	ttm_bo_mem_put(&(*bo_ptr)->tbo, &(*bo_ptr)->tbo.mem); +	ttm_resource_free(&(*bo_ptr)->tbo, &(*bo_ptr)->tbo.mem);  	for (i = 0; i < (*bo_ptr)->placement.num_placement; ++i) {  		(*bo_ptr)->placements[i].fpfn = offset >> PAGE_SHIFT; @@ -442,14 +451,14 @@ void amdgpu_bo_free_kernel(struct amdgpu_bo **bo, u64 *gpu_addr,  static bool amdgpu_bo_validate_size(struct amdgpu_device *adev,  					  unsigned long size, u32 domain)  { -	struct ttm_mem_type_manager *man = NULL; +	struct ttm_resource_manager *man = NULL;  	/*  	 * If GTT is part of requested domains the check must succeed to  	 * allow fall back to GTT  	 */  	if (domain & AMDGPU_GEM_DOMAIN_GTT) { -		man = &adev->mman.bdev.man[TTM_PL_TT]; +		man = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT);  		if (size < (man->size << PAGE_SHIFT))  			return true; @@ -458,7 +467,7 @@ static bool amdgpu_bo_validate_size(struct amdgpu_device *adev,  	}  	if (domain & AMDGPU_GEM_DOMAIN_VRAM) { -		man = &adev->mman.bdev.man[TTM_PL_VRAM]; +		man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM);  		if (size < (man->size << PAGE_SHIFT))  			return true; @@ -552,7 +561,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,  	bo = kzalloc(sizeof(struct amdgpu_bo), GFP_KERNEL);  	if (bo == NULL)  		return -ENOMEM; -	drm_gem_private_object_init(adev->ddev, &bo->tbo.base, size); +	drm_gem_private_object_init(adev_to_drm(adev), &bo->tbo.base, size);  	INIT_LIST_HEAD(&bo->shadow_list);  	bo->vm_bo = NULL;  	bo->preferred_domains = bp->preferred_domain ? bp->preferred_domain : @@ -591,7 +600,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,  		amdgpu_cs_report_moved_bytes(adev, ctx.bytes_moved, 0);  	if (bp->flags & AMDGPU_GEM_CREATE_VRAM_CLEARED && -	    bo->tbo.mem.placement & TTM_PL_FLAG_VRAM) { +	    bo->tbo.mem.mem_type == TTM_PL_VRAM) {  		struct dma_fence *fence;  		r = amdgpu_fill_buffer(bo, 0, bo->tbo.base.resv, &fence); @@ -1268,11 +1277,11 @@ int amdgpu_bo_get_metadata(struct amdgpu_bo *bo, void *buffer,   */  void amdgpu_bo_move_notify(struct ttm_buffer_object *bo,  			   bool evict, -			   struct ttm_mem_reg *new_mem) +			   struct ttm_resource *new_mem)  {  	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->bdev);  	struct amdgpu_bo *abo; -	struct ttm_mem_reg *old_mem = &bo->mem; +	struct ttm_resource *old_mem = &bo->mem;  	if (!amdgpu_bo_is_amdgpu_bo(bo))  		return; @@ -1299,7 +1308,7 @@ void amdgpu_bo_move_notify(struct ttm_buffer_object *bo,  }  /** - * amdgpu_bo_move_notify - notification about a BO being released + * amdgpu_bo_release_notify - notification about a BO being released   * @bo: pointer to a buffer object   *   * Wipes VRAM buffers whose contents should not be leaked before the |