diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/dce_v6_0.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 24 | 
1 files changed, 9 insertions, 15 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c index b4e4ec630e8c..39df6a50637f 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c @@ -1859,6 +1859,8 @@ static int dce_v6_0_cursor_move_locked(struct drm_crtc *crtc,  	struct amdgpu_device *adev = crtc->dev->dev_private;  	int xorigin = 0, yorigin = 0; +	int w = amdgpu_crtc->cursor_width; +  	amdgpu_crtc->cursor_x = x;  	amdgpu_crtc->cursor_y = y; @@ -1878,6 +1880,8 @@ static int dce_v6_0_cursor_move_locked(struct drm_crtc *crtc,  	WREG32(mmCUR_POSITION + amdgpu_crtc->crtc_offset, (x << 16) | y);  	WREG32(mmCUR_HOT_SPOT + amdgpu_crtc->crtc_offset, (xorigin << 16) | yorigin); +	WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, +	       ((w - 1) << 16) | (amdgpu_crtc->cursor_height - 1));  	return 0;  } @@ -1903,7 +1907,6 @@ static int dce_v6_0_crtc_cursor_set2(struct drm_crtc *crtc,  				     int32_t hot_y)  {  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); -	struct amdgpu_device *adev = crtc->dev->dev_private;  	struct drm_gem_object *obj;  	struct amdgpu_bo *aobj;  	int ret; @@ -1944,7 +1947,9 @@ static int dce_v6_0_crtc_cursor_set2(struct drm_crtc *crtc,  	dce_v6_0_lock_cursor(crtc, true); -	if (hot_x != amdgpu_crtc->cursor_hot_x || +	if (width != amdgpu_crtc->cursor_width || +	    height != amdgpu_crtc->cursor_height || +	    hot_x != amdgpu_crtc->cursor_hot_x ||  	    hot_y != amdgpu_crtc->cursor_hot_y) {  		int x, y; @@ -1953,16 +1958,10 @@ static int dce_v6_0_crtc_cursor_set2(struct drm_crtc *crtc,  		dce_v6_0_cursor_move_locked(crtc, x, y); -		amdgpu_crtc->cursor_hot_x = hot_x; -		amdgpu_crtc->cursor_hot_y = hot_y; -	} - -	if (width != amdgpu_crtc->cursor_width || -	    height != amdgpu_crtc->cursor_height) { -		WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, -		       (width - 1) << 16 | (height - 1));  		amdgpu_crtc->cursor_width = width;  		amdgpu_crtc->cursor_height = height; +		amdgpu_crtc->cursor_hot_x = hot_x; +		amdgpu_crtc->cursor_hot_y = hot_y;  	}  	dce_v6_0_show_cursor(crtc); @@ -1986,7 +1985,6 @@ unpin:  static void dce_v6_0_cursor_reset(struct drm_crtc *crtc)  {  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); -	struct amdgpu_device *adev = crtc->dev->dev_private;  	if (amdgpu_crtc->cursor_bo) {  		dce_v6_0_lock_cursor(crtc, true); @@ -1994,10 +1992,6 @@ static void dce_v6_0_cursor_reset(struct drm_crtc *crtc)  		dce_v6_0_cursor_move_locked(crtc, amdgpu_crtc->cursor_x,  					    amdgpu_crtc->cursor_y); -		WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, -		       (amdgpu_crtc->cursor_width - 1) << 16 | -		       (amdgpu_crtc->cursor_height - 1)); -  		dce_v6_0_show_cursor(crtc);  		dce_v6_0_lock_cursor(crtc, false);  	}  | 
