diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_display.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 23 | 
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c index 3fb405b3a614..b0832da2ef7e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c @@ -131,12 +131,17 @@ static void amdgpu_flip_work_func(struct work_struct *__work)  				 vblank->framedur_ns / 1000,  				 vblank->linedur_ns / 1000, stat, vpos, hpos); -	/* set the flip status */ +	/* Do the flip (mmio) */ +	adev->mode_info.funcs->page_flip(adev, work->crtc_id, work->base, work->async); + +	/* Set the flip status */  	amdgpuCrtc->pflip_status = AMDGPU_FLIP_SUBMITTED;  	spin_unlock_irqrestore(&crtc->dev->event_lock, flags); -	/* Do the flip (mmio) */ -	adev->mode_info.funcs->page_flip(adev, work->crtc_id, work->base); + +	DRM_DEBUG_DRIVER("crtc:%d[%p], pflip_stat:AMDGPU_FLIP_SUBMITTED, work: %p,\n", +					 amdgpuCrtc->crtc_id, amdgpuCrtc, work); +  }  /* @@ -192,6 +197,7 @@ int amdgpu_crtc_page_flip(struct drm_crtc *crtc,  	work->event = event;  	work->adev = adev;  	work->crtc_id = amdgpu_crtc->crtc_id; +	work->async = (page_flip_flags & DRM_MODE_PAGE_FLIP_ASYNC) != 0;  	/* schedule unpin of the old buffer */  	old_amdgpu_fb = to_amdgpu_framebuffer(crtc->primary->fb); @@ -252,6 +258,9 @@ int amdgpu_crtc_page_flip(struct drm_crtc *crtc,  	amdgpu_crtc->pflip_status = AMDGPU_FLIP_PENDING;  	amdgpu_crtc->pflip_works = work; + +	DRM_DEBUG_DRIVER("crtc:%d[%p], pflip_stat:AMDGPU_FLIP_PENDING, work: %p,\n", +					 amdgpu_crtc->crtc_id, amdgpu_crtc, work);  	/* update crtc fb */  	crtc->primary->fb = fb;  	spin_unlock_irqrestore(&crtc->dev->event_lock, flags); @@ -554,7 +563,7 @@ amdgpu_user_framebuffer_create(struct drm_device *dev,  	struct amdgpu_framebuffer *amdgpu_fb;  	int ret; -	obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handles[0]); +	obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[0]);  	if (obj ==  NULL) {  		dev_err(&dev->pdev->dev, "No GEM object associated to handle 0x%08X, "  			"can't create framebuffer\n", mode_cmd->handles[0]); @@ -588,20 +597,20 @@ const struct drm_mode_config_funcs amdgpu_mode_funcs = {  	.output_poll_changed = amdgpu_output_poll_changed  }; -static struct drm_prop_enum_list amdgpu_underscan_enum_list[] = +static const struct drm_prop_enum_list amdgpu_underscan_enum_list[] =  {	{ UNDERSCAN_OFF, "off" },  	{ UNDERSCAN_ON, "on" },  	{ UNDERSCAN_AUTO, "auto" },  }; -static struct drm_prop_enum_list amdgpu_audio_enum_list[] = +static const struct drm_prop_enum_list amdgpu_audio_enum_list[] =  {	{ AMDGPU_AUDIO_DISABLE, "off" },  	{ AMDGPU_AUDIO_ENABLE, "on" },  	{ AMDGPU_AUDIO_AUTO, "auto" },  };  /* XXX support different dither options? spatial, temporal, both, etc. */ -static struct drm_prop_enum_list amdgpu_dither_enum_list[] = +static const struct drm_prop_enum_list amdgpu_dither_enum_list[] =  {	{ AMDGPU_FMT_DITHER_DISABLE, "off" },  	{ AMDGPU_FMT_DITHER_ENABLE, "on" },  };  |