Hi, On 02/06/2015 02:59 AM, Gustavo Padovan wrote: > From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> > > 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@xxxxxxxxxxxxxxx> > --- > 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); > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel