From: Ville Syrjälä <ville.syrj...@linux.intel.com>

Plumb the format info from .fb_create() all the way to
drm_helper_mode_fill_fb_struct() to avoid the redundant
lookup.

For the fbdev case a manual drm_get_format_info() lookup
is needed.

Cc: Inki Dae <inki....@samsung.com>
Cc: Seung-Woo Kim <sw0312....@samsung.com>
Cc: Kyungmin Park <kyungmin.p...@samsung.com>
Reviewed-by: Thomas Zimmermann <tzimmerm...@suse.de>
Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fb.c    | 5 +++--
 drivers/gpu/drm/exynos/exynos_drm_fb.h    | 1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 5 ++++-
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c 
b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index 7091d31835ec..ddd73e7f26a3 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -56,6 +56,7 @@ static const struct drm_framebuffer_funcs exynos_drm_fb_funcs 
= {
 
 struct drm_framebuffer *
 exynos_drm_framebuffer_init(struct drm_device *dev,
+                           const struct drm_format_info *info,
                            const struct drm_mode_fb_cmd2 *mode_cmd,
                            struct exynos_drm_gem **exynos_gem,
                            int count)
@@ -76,7 +77,7 @@ exynos_drm_framebuffer_init(struct drm_device *dev,
                fb->obj[i] = &exynos_gem[i]->base;
        }
 
-       drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
+       drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd);
 
        ret = drm_framebuffer_init(dev, fb, &exynos_drm_fb_funcs);
        if (ret < 0) {
@@ -124,7 +125,7 @@ exynos_user_fb_create(struct drm_device *dev, struct 
drm_file *file_priv,
                }
        }
 
-       fb = exynos_drm_framebuffer_init(dev, mode_cmd, exynos_gem, i);
+       fb = exynos_drm_framebuffer_init(dev, info, mode_cmd, exynos_gem, i);
        if (IS_ERR(fb)) {
                ret = PTR_ERR(fb);
                goto err;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.h 
b/drivers/gpu/drm/exynos/exynos_drm_fb.h
index 2f841bbdddc5..fdc6cb40cc9c 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.h
@@ -14,6 +14,7 @@
 
 struct drm_framebuffer *
 exynos_drm_framebuffer_init(struct drm_device *dev,
+                           const struct drm_format_info *info,
                            const struct drm_mode_fb_cmd2 *mode_cmd,
                            struct exynos_drm_gem **exynos_gem,
                            int count);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c 
b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 9526a25e90ac..93de25b77e68 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -116,7 +116,10 @@ int exynos_drm_fbdev_driver_fbdev_probe(struct 
drm_fb_helper *helper,
                return PTR_ERR(exynos_gem);
 
        helper->fb =
-               exynos_drm_framebuffer_init(dev, &mode_cmd, &exynos_gem, 1);
+               exynos_drm_framebuffer_init(dev,
+                                           drm_get_format_info(dev, 
mode_cmd.pixel_format,
+                                                               
mode_cmd.modifier[0]),
+                                           &mode_cmd, &exynos_gem, 1);
        if (IS_ERR(helper->fb)) {
                DRM_DEV_ERROR(dev->dev, "failed to create drm framebuffer.\n");
                ret = PTR_ERR(helper->fb);
-- 
2.49.0

Reply via email to