diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 34 | 
1 files changed, 31 insertions, 3 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 8ceb44925947..6cf8862ebba1 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -527,13 +527,41 @@ static void amdgpu_gem_va_update_vm(struct amdgpu_device *adev,  			goto error;  	} -	r = amdgpu_vm_update_directories(adev, vm); +	r = amdgpu_vm_update_pdes(adev, vm, false);  error:  	if (r && r != -ERESTARTSYS)  		DRM_ERROR("Couldn't update BO_VA (%d)\n", r);  } +/** + * amdgpu_gem_va_map_flags - map GEM UAPI flags into hardware flags + * + * @adev: amdgpu_device pointer + * @flags: GEM UAPI flags + * + * Returns the GEM UAPI flags mapped into hardware for the ASIC. + */ +uint64_t amdgpu_gem_va_map_flags(struct amdgpu_device *adev, uint32_t flags) +{ +	uint64_t pte_flag = 0; + +	if (flags & AMDGPU_VM_PAGE_EXECUTABLE) +		pte_flag |= AMDGPU_PTE_EXECUTABLE; +	if (flags & AMDGPU_VM_PAGE_READABLE) +		pte_flag |= AMDGPU_PTE_READABLE; +	if (flags & AMDGPU_VM_PAGE_WRITEABLE) +		pte_flag |= AMDGPU_PTE_WRITEABLE; +	if (flags & AMDGPU_VM_PAGE_PRT) +		pte_flag |= AMDGPU_PTE_PRT; + +	if (adev->gmc.gmc_funcs->map_mtype) +		pte_flag |= amdgpu_gmc_map_mtype(adev, +						 flags & AMDGPU_VM_MTYPE_MASK); + +	return pte_flag; +} +  int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data,  			  struct drm_file *filp)  { @@ -631,7 +659,7 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data,  	switch (args->operation) {  	case AMDGPU_VA_OP_MAP: -		va_flags = amdgpu_gmc_get_pte_flags(adev, args->flags); +		va_flags = amdgpu_gem_va_map_flags(adev, args->flags);  		r = amdgpu_vm_bo_map(adev, bo_va, args->va_address,  				     args->offset_in_bo, args->map_size,  				     va_flags); @@ -646,7 +674,7 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data,  						args->map_size);  		break;  	case AMDGPU_VA_OP_REPLACE: -		va_flags = amdgpu_gmc_get_pte_flags(adev, args->flags); +		va_flags = amdgpu_gem_va_map_flags(adev, args->flags);  		r = amdgpu_vm_bo_replace_map(adev, bo_va, args->va_address,  					     args->offset_in_bo, args->map_size,  					     va_flags); | 
