diff options
| author | Christian König <christian.koenig@amd.com> | 2019-09-02 14:52:30 +0200 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2019-09-16 09:59:21 -0500 | 
| commit | 71776b6daef66b6d7afdd404c2175dbcac7e1a05 (patch) | |
| tree | 62428d5dd84ecd75c4333ca6f4711d16b9b66fef /drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |
| parent | 1dd077bbbaacc1302e510871669dc62ee1ef0f70 (diff) | |
drm/amdgpu: cleanup mtype mapping
Unify how we map the UAPI flags to the PTE hardware flags for a mapping.
Only the MTYPE is actually ASIC dependent, all other flags should be
copied over 1 to 1 and ASIC differences are handled later on.
Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 32 | 
1 files changed, 30 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index b174bd5eb38e..e145899862cd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -532,6 +532,34 @@ error:  		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)  { @@ -629,7 +657,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); @@ -644,7 +672,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); | 
