diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 17 | 
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index d891ab779ca7..5df21529b3b1 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -1801,13 +1801,18 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,  	if (dma_resv_locking_ctx((*bo)->tbo.base.resv) != &parser->exec.ticket)  		return -EINVAL; +	/* Make sure VRAM is allocated contigiously */  	(*bo)->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS; -	amdgpu_bo_placement_from_domain(*bo, (*bo)->allowed_domains); -	for (i = 0; i < (*bo)->placement.num_placement; i++) -		(*bo)->placements[i].flags |= TTM_PL_FLAG_CONTIGUOUS; -	r = ttm_bo_validate(&(*bo)->tbo, &(*bo)->placement, &ctx); -	if (r) -		return r; +	if ((*bo)->tbo.resource->mem_type == TTM_PL_VRAM && +	    !((*bo)->tbo.resource->placement & TTM_PL_FLAG_CONTIGUOUS)) { + +		amdgpu_bo_placement_from_domain(*bo, (*bo)->allowed_domains); +		for (i = 0; i < (*bo)->placement.num_placement; i++) +			(*bo)->placements[i].flags |= TTM_PL_FLAG_CONTIGUOUS; +		r = ttm_bo_validate(&(*bo)->tbo, &(*bo)->placement, &ctx); +		if (r) +			return r; +	}  	return amdgpu_ttm_alloc_gart(&(*bo)->tbo);  }  | 
