From: Gustavo Padovan <gustavo.pado...@collabora.co.uk>

Set one of the planes for each crtc driver as a cursor plane enabled
window managers to fully work on exynos.

Signed-off-by: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
---
 drivers/gpu/drm/exynos/exynos5433_drm_decon.c |  9 ++-------
 drivers/gpu/drm/exynos/exynos7_drm_decon.c    |  8 ++------
 drivers/gpu/drm/exynos/exynos_drm_drv.h       |  3 +++
 drivers/gpu/drm/exynos/exynos_drm_fimd.c      |  8 ++------
 drivers/gpu/drm/exynos/exynos_drm_plane.c     | 16 ++++++++++++++--
 drivers/gpu/drm/exynos/exynos_drm_plane.h     |  3 +--
 drivers/gpu/drm/exynos/exynos_drm_vidi.c      |  9 ++-------
 drivers/gpu/drm/exynos/exynos_mixer.c         | 10 +++-------
 8 files changed, 29 insertions(+), 37 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c 
b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
index 8d65e45..fdc04d0 100644
--- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
+++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
@@ -33,7 +33,6 @@ struct decon_context {
        struct exynos_drm_plane         planes[WINDOWS_NR];
        void __iomem                    *addr;
        struct clk                      *clks[6];
-       unsigned int                    default_win;
        unsigned long                   irq_flags;
        int                             pipe;
        bool                            suspended;
@@ -466,7 +465,6 @@ static int decon_bind(struct device *dev, struct device 
*master, void *data)
        struct drm_device *drm_dev = data;
        struct exynos_drm_private *priv = drm_dev->dev_private;
        struct exynos_drm_plane *exynos_plane;
-       enum drm_plane_type type;
        unsigned int zpos;
        int ret;

@@ -474,15 +472,13 @@ static int decon_bind(struct device *dev, struct device 
*master, void *data)
        ctx->pipe = priv->pipe++;

        for (zpos = 0; zpos < WINDOWS_NR; zpos++) {
-               type = (zpos == ctx->default_win) ? DRM_PLANE_TYPE_PRIMARY :
-                                                       DRM_PLANE_TYPE_OVERLAY;
                ret = exynos_plane_init(drm_dev, &ctx->planes[zpos],
-                               1 << ctx->pipe, type, zpos);
+                               1 << ctx->pipe, zpos);
                if (ret)
                        return ret;
        }

-       exynos_plane = &ctx->planes[ctx->default_win];
+       exynos_plane = &ctx->planes[DEFAULT_WIN];
        ctx->crtc = exynos_drm_crtc_create(drm_dev, &exynos_plane->base,
                                        ctx->pipe, EXYNOS_DISPLAY_TYPE_LCD,
                                        &decon_crtc_ops, ctx);
@@ -579,7 +575,6 @@ static int exynos5433_decon_probe(struct platform_device 
*pdev)
        if (!ctx)
                return -ENOMEM;

-       ctx->default_win = 0;
        ctx->suspended = true;
        ctx->dev = dev;
        if (of_get_child_by_name(dev->of_node, "i80-if-timings"))
diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c 
b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
index 7651499..569a666 100644
--- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c
+++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
@@ -52,7 +52,6 @@ struct decon_context {
        struct clk                      *eclk;
        struct clk                      *vclk;
        void __iomem                    *regs;
-       unsigned int                    default_win;
        unsigned long                   irq_flags;
        bool                            i80_if;
        bool                            suspended;
@@ -661,7 +660,6 @@ static int decon_bind(struct device *dev, struct device 
*master, void *data)
        struct decon_context *ctx = dev_get_drvdata(dev);
        struct drm_device *drm_dev = data;
        struct exynos_drm_plane *exynos_plane;
-       enum drm_plane_type type;
        unsigned int zpos;
        int ret;

@@ -672,15 +670,13 @@ static int decon_bind(struct device *dev, struct device 
*master, void *data)
        }

        for (zpos = 0; zpos < WINDOWS_NR; zpos++) {
-               type = (zpos == ctx->default_win) ? DRM_PLANE_TYPE_PRIMARY :
-                                               DRM_PLANE_TYPE_OVERLAY;
                ret = exynos_plane_init(drm_dev, &ctx->planes[zpos],
-                                       1 << ctx->pipe, type, zpos);
+                                       1 << ctx->pipe, zpos);
                if (ret)
                        return ret;
        }

-       exynos_plane = &ctx->planes[ctx->default_win];
+       exynos_plane = &ctx->planes[DEFAULT_WIN];
        ctx->crtc = exynos_drm_crtc_create(drm_dev, &exynos_plane->base,
                                           ctx->pipe, EXYNOS_DISPLAY_TYPE_LCD,
                                           &decon_crtc_ops, ctx);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h 
b/drivers/gpu/drm/exynos/exynos_drm_drv.h
index 5d052235..1631024 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h
@@ -22,6 +22,9 @@
 #define MAX_PLANE      5
 #define MAX_FB_BUFFER  4

+#define DEFAULT_WIN    0
+#define CURSOR_WIN     1
+
 #define to_exynos_crtc(x)      container_of(x, struct exynos_drm_crtc, base)
 #define to_exynos_plane(x)     container_of(x, struct exynos_drm_plane, base)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c 
b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index c87b791..6f17d5f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -154,7 +154,6 @@ struct fimd_context {
        struct clk                      *lcd_clk;
        void __iomem                    *regs;
        struct regmap                   *sysreg;
-       unsigned int                    default_win;
        unsigned long                   irq_flags;
        u32                             vidcon0;
        u32                             vidcon1;
@@ -945,7 +944,6 @@ static int fimd_bind(struct device *dev, struct device 
*master, void *data)
        struct drm_device *drm_dev = data;
        struct exynos_drm_private *priv = drm_dev->dev_private;
        struct exynos_drm_plane *exynos_plane;
-       enum drm_plane_type type;
        unsigned int zpos;
        int ret;

@@ -953,15 +951,13 @@ static int fimd_bind(struct device *dev, struct device 
*master, void *data)
        ctx->pipe = priv->pipe++;

        for (zpos = 0; zpos < WINDOWS_NR; zpos++) {
-               type = (zpos == ctx->default_win) ? DRM_PLANE_TYPE_PRIMARY :
-                                               DRM_PLANE_TYPE_OVERLAY;
                ret = exynos_plane_init(drm_dev, &ctx->planes[zpos],
-                                       1 << ctx->pipe, type, zpos);
+                                       1 << ctx->pipe, zpos);
                if (ret)
                        return ret;
        }

-       exynos_plane = &ctx->planes[ctx->default_win];
+       exynos_plane = &ctx->planes[DEFAULT_WIN];
        ctx->crtc = exynos_drm_crtc_create(drm_dev, &exynos_plane->base,
                                           ctx->pipe, EXYNOS_DISPLAY_TYPE_LCD,
                                           &fimd_crtc_ops, ctx);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c 
b/drivers/gpu/drm/exynos/exynos_drm_plane.c
index 909fc8b..5ad8e62 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
@@ -216,11 +216,23 @@ static void exynos_plane_attach_zpos_property(struct 
drm_plane *plane,

 int exynos_plane_init(struct drm_device *dev,
                      struct exynos_drm_plane *exynos_plane,
-                     unsigned long possible_crtcs, enum drm_plane_type type,
-                     unsigned int zpos)
+                     unsigned long possible_crtcs, unsigned int zpos)
 {
+       enum drm_plane_type type;
        int err;

+       switch (zpos) {
+       case DEFAULT_WIN:
+               type = DRM_PLANE_TYPE_PRIMARY;
+               break;
+       case CURSOR_WIN:
+               type = DRM_PLANE_TYPE_CURSOR;
+               break;
+       default:
+               type = DRM_PLANE_TYPE_OVERLAY;
+               break;
+       };
+
        err = drm_universal_plane_init(dev, &exynos_plane->base, possible_crtcs,
                                       &exynos_plane_funcs, formats,
                                       ARRAY_SIZE(formats), type);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.h 
b/drivers/gpu/drm/exynos/exynos_drm_plane.h
index 8c88ae9..f4a91a3 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_plane.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_plane.h
@@ -11,5 +11,4 @@

 int exynos_plane_init(struct drm_device *dev,
                      struct exynos_drm_plane *exynos_plane,
-                     unsigned long possible_crtcs, enum drm_plane_type type,
-                     unsigned int zpos);
+                     unsigned long possible_crtc, unsigned int zpos);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c 
b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
index b6d00dd..64f1e9b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
@@ -42,7 +42,6 @@ struct vidi_context {
        struct exynos_drm_plane         planes[WINDOWS_NR];
        struct edid                     *raw_edid;
        unsigned int                    clkdiv;
-       unsigned int                    default_win;
        unsigned long                   irq_flags;
        unsigned int                    connected;
        bool                            vblank_on;
@@ -433,22 +432,19 @@ static int vidi_bind(struct device *dev, struct device 
*master, void *data)
        struct drm_device *drm_dev = data;
        struct drm_encoder *encoder = &ctx->encoder;
        struct exynos_drm_plane *exynos_plane;
-       enum drm_plane_type type;
        unsigned int zpos;
        int pipe, ret;

        vidi_ctx_initialize(ctx, drm_dev);

        for (zpos = 0; zpos < WINDOWS_NR; zpos++) {
-               type = (zpos == ctx->default_win) ? DRM_PLANE_TYPE_PRIMARY :
-                                               DRM_PLANE_TYPE_OVERLAY;
                ret = exynos_plane_init(drm_dev, &ctx->planes[zpos],
-                                       1 << ctx->pipe, type, zpos);
+                                       1 << ctx->pipe, zpos);
                if (ret)
                        return ret;
        }

-       exynos_plane = &ctx->planes[ctx->default_win];
+       exynos_plane = &ctx->planes[DEFAULT_WIN];
        ctx->crtc = exynos_drm_crtc_create(drm_dev, &exynos_plane->base,
                                           ctx->pipe, EXYNOS_DISPLAY_TYPE_VIDI,
                                           &vidi_crtc_ops, ctx);
@@ -500,7 +496,6 @@ static int vidi_probe(struct platform_device *pdev)
        if (!ctx)
                return -ENOMEM;

-       ctx->default_win = 0;
        ctx->pdev = pdev;

        INIT_WORK(&ctx->work, vidi_fake_vblank_handler);
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c 
b/drivers/gpu/drm/exynos/exynos_mixer.c
index d7e7811..cc784e1 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -42,7 +42,6 @@
 #include "exynos_mixer.h"

 #define MIXER_WIN_NR           3
-#define MIXER_DEFAULT_WIN      0

 /* The pixelformats that are natively supported by the mixer. */
 #define MXR_FORMAT_RGB565      4
@@ -586,7 +585,7 @@ static void mixer_graph_buffer(struct mixer_context *ctx,

        /* setup display size */
        if (ctx->mxr_ver == MXR_VER_128_0_0_184 &&
-               win == MIXER_DEFAULT_WIN) {
+               win == DEFAULT_WIN) {
                val  = MXR_MXR_RES_HEIGHT(mode->vdisplay);
                val |= MXR_MXR_RES_WIDTH(mode->hdisplay);
                mixer_reg_write(res, MXR_RESOLUTION, val);
@@ -1171,7 +1170,6 @@ static int mixer_bind(struct device *dev, struct device 
*manager, void *data)
        struct mixer_context *ctx = dev_get_drvdata(dev);
        struct drm_device *drm_dev = data;
        struct exynos_drm_plane *exynos_plane;
-       enum drm_plane_type type;
        unsigned int zpos;
        int ret;

@@ -1180,15 +1178,13 @@ static int mixer_bind(struct device *dev, struct device 
*manager, void *data)
                return ret;

        for (zpos = 0; zpos < MIXER_WIN_NR; zpos++) {
-               type = (zpos == MIXER_DEFAULT_WIN) ? DRM_PLANE_TYPE_PRIMARY :
-                                               DRM_PLANE_TYPE_OVERLAY;
                ret = exynos_plane_init(drm_dev, &ctx->planes[zpos],
-                                       1 << ctx->pipe, type, zpos);
+                                       1 << ctx->pipe, zpos);
                if (ret)
                        return ret;
        }

-       exynos_plane = &ctx->planes[MIXER_DEFAULT_WIN];
+       exynos_plane = &ctx->planes[DEFAULT_WIN];
        ctx->crtc = exynos_drm_crtc_create(drm_dev, &exynos_plane->base,
                                           ctx->pipe, EXYNOS_DISPLAY_TYPE_HDMI,
                                           &mixer_crtc_ops, ctx);
-- 
2.1.0

Reply via email to