diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 26 | 
1 files changed, 18 insertions, 8 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c index e30eecd02ae1..6415d0d039e1 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c @@ -3,6 +3,7 @@  #include <drm/drm_atomic_helper.h>  #include <drm/drm_edid.h>  #include <drm/drm_simple_kms_helper.h> +#include <drm/drm_gem_framebuffer_helper.h>  #include <drm/drm_vblank.h>  #include "amdgpu.h" @@ -65,9 +66,7 @@ static enum hrtimer_restart amdgpu_vkms_vblank_simulate(struct hrtimer *timer)  static int amdgpu_vkms_enable_vblank(struct drm_crtc *crtc)  { -	struct drm_device *dev = crtc->dev; -	unsigned int pipe = drm_crtc_index(crtc); -	struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; +	struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);  	struct amdgpu_vkms_output *out = drm_crtc_to_amdgpu_vkms_output(crtc);  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); @@ -91,10 +90,8 @@ static bool amdgpu_vkms_get_vblank_timestamp(struct drm_crtc *crtc,  					     ktime_t *vblank_time,  					     bool in_vblank_irq)  { -	struct drm_device *dev = crtc->dev; -	unsigned int pipe = crtc->index;  	struct amdgpu_vkms_output *output = drm_crtc_to_amdgpu_vkms_output(crtc); -	struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; +	struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);  	if (!READ_ONCE(vblank->enabled)) { @@ -314,7 +311,13 @@ static int amdgpu_vkms_prepare_fb(struct drm_plane *plane,  		return 0;  	}  	afb = to_amdgpu_framebuffer(new_state->fb); -	obj = new_state->fb->obj[0]; + +	obj = drm_gem_fb_get_obj(new_state->fb, 0); +	if (!obj) { +		DRM_ERROR("Failed to get obj from framebuffer\n"); +		return -EINVAL; +	} +  	rbo = gem_to_amdgpu_bo(obj);  	adev = amdgpu_ttm_adev(rbo->tbo.bdev); @@ -368,12 +371,19 @@ static void amdgpu_vkms_cleanup_fb(struct drm_plane *plane,  				   struct drm_plane_state *old_state)  {  	struct amdgpu_bo *rbo; +	struct drm_gem_object *obj;  	int r;  	if (!old_state->fb)  		return; -	rbo = gem_to_amdgpu_bo(old_state->fb->obj[0]); +	obj = drm_gem_fb_get_obj(old_state->fb, 0); +	if (!obj) { +		DRM_ERROR("Failed to get obj from framebuffer\n"); +		return; +	} + +	rbo = gem_to_amdgpu_bo(obj);  	r = amdgpu_bo_reserve(rbo, false);  	if (unlikely(r)) {  		DRM_ERROR("failed to reserve rbo before unpin\n"); | 
