diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 33 | 
1 files changed, 30 insertions, 3 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index a1e63ba4c54a..c0d8f40a5b45 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -877,6 +877,32 @@ out:  	return r;  } +static int amdgpu_gem_align_pitch(struct amdgpu_device *adev, +				  int width, +				  int cpp, +				  bool tiled) +{ +	int aligned = width; +	int pitch_mask = 0; + +	switch (cpp) { +	case 1: +		pitch_mask = 255; +		break; +	case 2: +		pitch_mask = 127; +		break; +	case 3: +	case 4: +		pitch_mask = 63; +		break; +	} + +	aligned += pitch_mask; +	aligned &= ~pitch_mask; +	return aligned * cpp; +} +  int amdgpu_mode_dumb_create(struct drm_file *file_priv,  			    struct drm_device *dev,  			    struct drm_mode_create_dumb *args) @@ -885,7 +911,8 @@ int amdgpu_mode_dumb_create(struct drm_file *file_priv,  	struct drm_gem_object *gobj;  	uint32_t handle;  	u64 flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | -		    AMDGPU_GEM_CREATE_CPU_GTT_USWC; +		    AMDGPU_GEM_CREATE_CPU_GTT_USWC | +		    AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;  	u32 domain;  	int r; @@ -897,8 +924,8 @@ int amdgpu_mode_dumb_create(struct drm_file *file_priv,  	if (adev->mman.buffer_funcs_enabled)  		flags |= AMDGPU_GEM_CREATE_VRAM_CLEARED; -	args->pitch = amdgpu_align_pitch(adev, args->width, -					 DIV_ROUND_UP(args->bpp, 8), 0); +	args->pitch = amdgpu_gem_align_pitch(adev, args->width, +					     DIV_ROUND_UP(args->bpp, 8), 0);  	args->size = (u64)args->pitch * args->height;  	args->size = ALIGN(args->size, PAGE_SIZE);  	domain = amdgpu_bo_get_preferred_domain(adev, |