Move the common code from rcar_du_fb_create->rcar_du_lib_fb_create,
so that rzg2l_du_fb_create() can reuse the common code.

Signed-off-by: Biju Das <biju.das...@bp.renesas.com>
---
v5:
 * New patch
---
 drivers/gpu/drm/rcar-du/rcar_du_kms.c     | 64 +--------------------
 drivers/gpu/drm/rcar-du/rcar_du_kms_lib.c | 69 +++++++++++++++++++++++
 drivers/gpu/drm/rcar-du/rcar_du_kms_lib.h |  4 ++
 3 files changed, 74 insertions(+), 63 deletions(-)

diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c 
b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index ea2b7d5f1c23..9d65a7d6d96e 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -41,69 +41,7 @@ static struct drm_framebuffer *
 rcar_du_fb_create(struct drm_device *dev, struct drm_file *file_priv,
                  const struct drm_mode_fb_cmd2 *mode_cmd)
 {
-       struct rcar_du_device *rcdu = to_rcar_du_device(dev);
-       const struct rcar_du_format_info *format;
-       unsigned int chroma_pitch;
-       unsigned int max_pitch;
-       unsigned int align;
-       unsigned int i;
-
-       format = rcar_du_format_info(mode_cmd->pixel_format);
-       if (format == NULL) {
-               dev_dbg(dev->dev, "unsupported pixel format %08x\n",
-                       mode_cmd->pixel_format);
-               return ERR_PTR(-EINVAL);
-       }
-
-       if (rcdu->info->gen < 3) {
-               /*
-                * On Gen2 the DU limits the pitch to 4095 pixels and requires
-                * buffers to be aligned to a 16 pixels boundary (or 128 bytes
-                * on some platforms).
-                */
-               unsigned int bpp = format->planes == 1 ? format->bpp / 8 : 1;
-
-               max_pitch = 4095 * bpp;
-
-               if (rcar_du_needs(rcdu, RCAR_DU_QUIRK_ALIGN_128B))
-                       align = 128;
-               else
-                       align = 16 * bpp;
-       } else {
-               /*
-                * On Gen3 the memory interface is handled by the VSP that
-                * limits the pitch to 65535 bytes and has no alignment
-                * constraint.
-                */
-               max_pitch = 65535;
-               align = 1;
-       }
-
-       if (mode_cmd->pitches[0] & (align - 1) ||
-           mode_cmd->pitches[0] > max_pitch) {
-               dev_dbg(dev->dev, "invalid pitch value %u\n",
-                       mode_cmd->pitches[0]);
-               return ERR_PTR(-EINVAL);
-       }
-
-       /*
-        * Calculate the chroma plane(s) pitch using the horizontal subsampling
-        * factor. For semi-planar formats, the U and V planes are combined, the
-        * pitch must thus be doubled.
-        */
-       chroma_pitch = mode_cmd->pitches[0] / format->hsub;
-       if (format->planes == 2)
-               chroma_pitch *= 2;
-
-       for (i = 1; i < format->planes; ++i) {
-               if (mode_cmd->pitches[i] != chroma_pitch) {
-                       dev_dbg(dev->dev,
-                               "luma and chroma pitches are not compatible\n");
-                       return ERR_PTR(-EINVAL);
-               }
-       }
-
-       return drm_gem_fb_create(dev, file_priv, mode_cmd);
+       return rcar_du_lib_fb_create(dev, file_priv, mode_cmd);
 }
 
 /* 
-----------------------------------------------------------------------------
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms_lib.c 
b/drivers/gpu/drm/rcar-du/rcar_du_kms_lib.c
index 6461b99e08dc..d8f778a7b6db 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms_lib.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms_lib.c
@@ -392,3 +392,72 @@ int rcar_du_dumb_create(struct drm_file *file, struct 
drm_device *dev,
 
        return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
+
+struct drm_framebuffer *
+rcar_du_lib_fb_create(struct drm_device *dev, struct drm_file *file_priv,
+                     const struct drm_mode_fb_cmd2 *mode_cmd)
+{
+       struct rcar_du_device *rcdu = to_rcar_du_device(dev);
+       const struct rcar_du_format_info *format;
+       unsigned int chroma_pitch;
+       unsigned int max_pitch;
+       unsigned int align;
+       unsigned int i;
+
+       format = rcar_du_format_info(mode_cmd->pixel_format);
+       if (format == NULL) {
+               dev_dbg(dev->dev, "unsupported pixel format %08x\n",
+                       mode_cmd->pixel_format);
+               return ERR_PTR(-EINVAL);
+       }
+
+       if (rcdu->info->gen < 3) {
+               /*
+                * On Gen2 the DU limits the pitch to 4095 pixels and requires
+                * buffers to be aligned to a 16 pixels boundary (or 128 bytes
+                * on some platforms).
+                */
+               unsigned int bpp = format->planes == 1 ? format->bpp / 8 : 1;
+
+               max_pitch = 4095 * bpp;
+
+               if (rcar_du_needs(rcdu, RCAR_DU_QUIRK_ALIGN_128B))
+                       align = 128;
+               else
+                       align = 16 * bpp;
+       } else {
+               /*
+                * On Gen3 the memory interface is handled by the VSP that
+                * limits the pitch to 65535 bytes and has no alignment
+                * constraint.
+                */
+               max_pitch = 65535;
+               align = 1;
+       }
+
+       if (mode_cmd->pitches[0] & (align - 1) ||
+           mode_cmd->pitches[0] > max_pitch) {
+               dev_dbg(dev->dev, "invalid pitch value %u\n",
+                       mode_cmd->pitches[0]);
+               return ERR_PTR(-EINVAL);
+       }
+
+       /*
+        * Calculate the chroma plane(s) pitch using the horizontal subsampling
+        * factor. For semi-planar formats, the U and V planes are combined, the
+        * pitch must thus be doubled.
+        */
+       chroma_pitch = mode_cmd->pitches[0] / format->hsub;
+       if (format->planes == 2)
+               chroma_pitch *= 2;
+
+       for (i = 1; i < format->planes; ++i) {
+               if (mode_cmd->pitches[i] != chroma_pitch) {
+                       dev_dbg(dev->dev,
+                               "luma and chroma pitches are not compatible\n");
+                       return ERR_PTR(-EINVAL);
+               }
+       }
+
+       return drm_gem_fb_create(dev, file_priv, mode_cmd);
+}
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms_lib.h 
b/drivers/gpu/drm/rcar-du/rcar_du_kms_lib.h
index 5f45a369bb88..160928dc68b8 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms_lib.h
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms_lib.h
@@ -39,4 +39,8 @@ struct drm_gem_object 
*rcar_du_gem_prime_import_sg_table(struct drm_device *dev,
                                struct dma_buf_attachment *attach,
                                struct sg_table *sgt);
 
+struct drm_framebuffer *
+rcar_du_lib_fb_create(struct drm_device *dev, struct drm_file *file_priv,
+                     const struct drm_mode_fb_cmd2 *mode_cmd);
+
 #endif /* __RCAR_DU_KMS_LIB_H__ */
-- 
2.25.1

Reply via email to