On Thu, Mar 22, 2018 at 05:22:58PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> Stop looking at plane->fb on atomic drivers. Use plane->state->fb
> instead.
> 
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>

Reviewed-by: Daniel Vetter <daniel.vet...@ffwll.ch>

> ---
>  drivers/gpu/drm/drm_atomic_helper.c |  2 +-
>  drivers/gpu/drm/drm_crtc.c          | 11 +++++++++--
>  drivers/gpu/drm/drm_plane.c         | 19 ++++++++++++++-----
>  3 files changed, 24 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c 
> b/drivers/gpu/drm/drm_atomic_helper.c
> index 1b39ebf2be2e..0e806f070d00 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -2659,7 +2659,7 @@ int drm_atomic_helper_disable_plane(struct drm_plane 
> *plane,
>               goto fail;
>       }
>  
> -     if (plane_state->crtc && (plane == plane->crtc->cursor))
> +     if (plane_state->crtc && plane_state->crtc->cursor == plane)
>               plane_state->state->legacy_cursor_update = true;
>  
>       ret = __drm_atomic_helper_disable_plane(plane, plane_state);
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 537ffaab855c..a231dd5dce16 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -597,13 +597,20 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
>               /* If we have a mode we need a framebuffer. */
>               /* If we pass -1, set the mode with the currently bound fb */
>               if (crtc_req->fb_id == -1) {
> -                     if (!plane->fb) {
> +                     struct drm_framebuffer *old_fb;
> +
> +                     if (plane->state)
> +                             old_fb = plane->state->fb;
> +                     else
> +                             old_fb = plane->fb;
> +
> +                     if (!old_fb) {
>                               DRM_DEBUG_KMS("CRTC doesn't have current FB\n");
>                               ret = -EINVAL;
>                               goto out;
>                       }
>  
> -                     fb = plane->fb;
> +                     fb = old_fb;
>                       /* Make refcounting symmetric with the lookup path. */
>                       drm_framebuffer_get(fb);
>               } else {
> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> index 008f9456a5e8..035054455301 100644
> --- a/drivers/gpu/drm/drm_plane.c
> +++ b/drivers/gpu/drm/drm_plane.c
> @@ -792,7 +792,11 @@ static int drm_mode_cursor_universal(struct drm_crtc 
> *crtc,
>                       fb = NULL;
>               }
>       } else {
> -             fb = plane->fb;
> +             if (plane->state)
> +                     fb = plane->state->fb;
> +             else
> +                     fb = plane->fb;
> +
>               if (fb)
>                       drm_framebuffer_get(fb);
>       }
> @@ -934,7 +938,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
>       struct drm_mode_crtc_page_flip_target *page_flip = data;
>       struct drm_crtc *crtc;
>       struct drm_plane *plane;
> -     struct drm_framebuffer *fb = NULL;
> +     struct drm_framebuffer *fb = NULL, *old_fb;
>       struct drm_pending_vblank_event *e = NULL;
>       u32 target_vblank = page_flip->sequence;
>       struct drm_modeset_acquire_ctx ctx;
> @@ -1012,7 +1016,12 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
>       if (ret)
>               goto out;
>  
> -     if (plane->fb == NULL) {
> +     if (plane->state)
> +             old_fb = plane->state->fb;
> +     else
> +             old_fb = plane->fb;
> +
> +     if (old_fb == NULL) {
>               /* The framebuffer is currently unbound, presumably
>                * due to a hotplug event, that userspace has not
>                * yet discovered.
> @@ -1027,7 +1036,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
>               goto out;
>       }
>  
> -     if (crtc->state) {
> +     if (plane->state) {
>               const struct drm_plane_state *state = plane->state;
>  
>               ret = drm_framebuffer_check_src_coords(state->src_x,
> @@ -1042,7 +1051,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
>       if (ret)
>               goto out;
>  
> -     if (plane->fb->format != fb->format) {
> +     if (old_fb->format != fb->format) {
>               DRM_DEBUG_KMS("Page flip is not allowed to change frame buffer 
> format.\n");
>               ret = -EINVAL;
>               goto out;
> -- 
> 2.16.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to