Hi,

On 02/06/2015 02:59 AM, Gustavo Padovan wrote:
> From: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
> 
> Usually userspace don't want to have two overlay planes on the same zpos
> so this change assign a different zpos for each plane. Before this change
> a zpos of value zero was created for all planes so the userspace had to
> set up the zpos of every plane it wanted to use.
> 

Plane zpos should be read-only. If not, it can't do 1:1 mapping plane
and hw overlay. Let's make zpos to DRM_MODE_PROP_IMMUTABLE property.

Thanks.

> Signed-off-by: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fimd.c  |  2 +-
>  drivers/gpu/drm/exynos/exynos_drm_plane.c | 15 ++++++++-------
>  drivers/gpu/drm/exynos/exynos_drm_plane.h |  3 ++-
>  drivers/gpu/drm/exynos/exynos_drm_vidi.c  |  2 +-
>  drivers/gpu/drm/exynos/exynos_mixer.c     |  2 +-
>  5 files changed, 13 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c 
> b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> index 489ce90..b49b038 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -1006,7 +1006,7 @@ static int fimd_bind(struct device *dev, struct device 
> *master, void *data)
>               type = (zpos == ctx->default_win) ? DRM_PLANE_TYPE_PRIMARY :
>                                               DRM_PLANE_TYPE_OVERLAY;
>               exynos_plane_init(drm_dev, &ctx->planes[zpos], 1 << ctx->pipe,
> -                               type);
> +                               type, zpos);
>       }
>  
>       ret = fimd_ctx_initialize(ctx, drm_dev);
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c 
> b/drivers/gpu/drm/exynos/exynos_drm_plane.c
> index 011a9b1..4c33e04 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
> @@ -211,7 +211,7 @@ static struct drm_plane_funcs exynos_plane_funcs = {
>       .set_property   = exynos_plane_set_property,
>  };
>  
> -static void exynos_plane_attach_zpos_property(struct drm_plane *plane)
> +static void exynos_plane_attach_zpos_property(struct drm_plane *plane, int 
> zpos)
>  {
>       struct drm_device *dev = plane->dev;
>       struct exynos_drm_private *dev_priv = dev->dev_private;
> @@ -227,12 +227,13 @@ static void exynos_plane_attach_zpos_property(struct 
> drm_plane *plane)
>               dev_priv->plane_zpos_property = prop;
>       }
>  
> -     drm_object_attach_property(&plane->base, prop, 0);
> +     drm_object_attach_property(&plane->base, prop, zpos);
>  }
>  
>  int exynos_plane_init(struct drm_device *dev,
>                     struct exynos_drm_plane *exynos_plane,
> -                   unsigned long possible_crtcs, enum drm_plane_type type)
> +                   unsigned long possible_crtcs, enum drm_plane_type type,
> +                   int zpos)
>  {
>       int err;
>  
> @@ -244,10 +245,10 @@ int exynos_plane_init(struct drm_device *dev,
>               return err;
>       }
>  
> -     if (type == DRM_PLANE_TYPE_PRIMARY)
> -             exynos_plane->zpos = DEFAULT_ZPOS;
> -     else
> -             exynos_plane_attach_zpos_property(&exynos_plane->base);
> +     exynos_plane->zpos = zpos;
> +
> +     if (type == DRM_PLANE_TYPE_OVERLAY)
> +             exynos_plane_attach_zpos_property(&exynos_plane->base, zpos);
>  
>       return 0;
>  }
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.h 
> b/drivers/gpu/drm/exynos/exynos_drm_plane.h
> index d8a3494..d8a66b5 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_plane.h
> +++ b/drivers/gpu/drm/exynos/exynos_drm_plane.h
> @@ -22,4 +22,5 @@ int exynos_update_plane(struct drm_plane *plane, struct 
> drm_crtc *crtc,
>                       uint32_t src_w, uint32_t src_h);
>  int exynos_plane_init(struct drm_device *dev,
>                     struct exynos_drm_plane *exynos_plane,
> -                   unsigned long possible_crtcs, enum drm_plane_type type);
> +                   unsigned long possible_crtcs, enum drm_plane_type type,
> +                   int zpos);
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c 
> b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
> index f33974e..e545a58 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
> @@ -478,7 +478,7 @@ static int vidi_bind(struct device *dev, struct device 
> *master, void *data)
>               type = (zpos == ctx->default_win) ? DRM_PLANE_TYPE_PRIMARY :
>                                               DRM_PLANE_TYPE_OVERLAY;
>               exynos_plane_init(drm_dev, &ctx->planes[zpos], 1 << ctx->pipe,
> -                               type);
> +                               type, zpos);
>       }
>  
>       vidi_ctx_initialize(ctx, drm_dev);
> diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c 
> b/drivers/gpu/drm/exynos/exynos_mixer.c
> index 6e7c0cc..141d461 100644
> --- a/drivers/gpu/drm/exynos/exynos_mixer.c
> +++ b/drivers/gpu/drm/exynos/exynos_mixer.c
> @@ -1177,7 +1177,7 @@ static int mixer_bind(struct device *dev, struct device 
> *manager, void *data)
>               type = (zpos == MIXER_DEFAULT_WIN) ? DRM_PLANE_TYPE_PRIMARY :
>                                               DRM_PLANE_TYPE_OVERLAY;
>               exynos_plane_init(drm_dev, &ctx->planes[zpos], 1 << ctx->pipe,
> -                               type);
> +                               type, zpos);
>       }
>  
>       ret = mixer_initialize(ctx, drm_dev);
> 

Reply via email to