[PATCH] drm/amdgpu: For virtual_display feature, the vblank_get_counter hook is always return 0 when there's no hardware frame counter which can be used.

Deng, Emily Emily.Deng at amd.com
Wed Aug 17 03:07:30 UTC 2016


Ping ...
Hi Michel,
     Could you please help to review this? Thanks very much.

Best Wishes,
Emily Deng

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf Of
> Emily Deng
> Sent: Tuesday, August 16, 2016 6:15 PM
> To: amd-gfx at lists.freedesktop.org
> Cc: Deng, Emily <Emily.Deng at amd.com>
> Subject: [PATCH] drm/amdgpu: For virtual_display feature, the
> vblank_get_counter hook is always return 0 when there's no hardware frame
> counter which can be used.
> 
> Signed-off-by: Emily Deng <Emily.Deng at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 16 ++++------------
>  1 file changed, 4 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> index 2ce5f90..85f14a6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> @@ -55,10 +55,7 @@ static void dce_virtual_vblank_wait(struct
> amdgpu_device *adev, int crtc)
> 
>  static u32 dce_virtual_vblank_get_counter(struct amdgpu_device *adev, int
> crtc)  {
> -	if (crtc >= adev->mode_info.num_crtc)
> -		return 0;
> -	else
> -		return adev->ddev->vblank[crtc].count;
> +	return 0;
>  }
> 
>  static void dce_virtual_page_flip(struct amdgpu_device *adev, @@ -70,13
> +67,10 @@ static void dce_virtual_page_flip(struct amdgpu_device *adev,
> static int dce_virtual_crtc_get_scanoutpos(struct amdgpu_device *adev, int
> crtc,
>  					u32 *vbl, u32 *position)
>  {
> -	if ((crtc < 0) || (crtc >= adev->mode_info.num_crtc))
> -		return -EINVAL;
> -
>  	*vbl = 0;
>  	*position = 0;
> 
> -	return 0;
> +	return -EINVAL;
>  }
> 
>  static bool dce_virtual_hpd_sense(struct amdgpu_device *adev, @@ -405,6
> +399,8 @@ static int dce_virtual_sw_init(void *handle)
>  	if (r)
>  		return r;
> 
> +	adev->ddev->max_vblank_count = 0;
> +
>  	adev->ddev->mode_config.funcs = &amdgpu_mode_funcs;
> 
>  	adev->ddev->mode_config.max_width = 16384; @@ -653,7 +649,6
> @@ static enum hrtimer_restart dce_virtual_vblank_timer_handle(struct
> hrtimer *vbla
>  	struct amdgpu_mode_info *mode_info = container_of(vblank_timer,
> struct amdgpu_mode_info ,vblank_timer);
>  	struct amdgpu_device *adev = container_of(mode_info, struct
> amdgpu_device ,mode_info);
>  	unsigned crtc = 0;
> -	adev->ddev->vblank[0].count++;
>  	drm_handle_vblank(adev->ddev, crtc);
>  	dce_virtual_pageflip_irq(adev, NULL, NULL);
>  	hrtimer_start(vblank_timer, ktime_set(0,
> DCE_VIRTUAL_VBLANK_PERIOD), HRTIMER_MODE_REL); @@ -680,8 +675,6
> @@ static void dce_virtual_set_crtc_vblank_interrupt_state(struct
> amdgpu_device *ad
>  		hrtimer_cancel(&adev->mode_info.vblank_timer);
>  	}
> 
> -	if (!state || (state && !adev->mode_info.vsync_timer_enabled))
> -		adev->ddev->vblank[0].count = 0;
>  	adev->mode_info.vsync_timer_enabled = state;
>  	DRM_DEBUG("[FM]set crtc %d vblank interrupt state %d\n", crtc,
> state);  } @@ -718,7 +711,6 @@ static int dce_virtual_crtc_irq(struct
> amdgpu_device *adev,
>  	unsigned crtc = 0;
>  	unsigned irq_type = AMDGPU_CRTC_IRQ_VBLANK1;
> 
> -	adev->ddev->vblank[crtc].count++;
>  	dce_virtual_crtc_vblank_int_ack(adev, crtc);
> 
>  	if (amdgpu_irq_enabled(adev, source, irq_type)) {
> --
> 1.9.1
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list