]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/tegra: Pass along the format info from .fb_create() to drm_helper_mode_fill_fb_st...
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 1 Jul 2025 09:07:19 +0000 (12:07 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 16 Jul 2025 17:11:34 +0000 (20:11 +0300)
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: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: linux-tegra@vger.kernel.org
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250701090722.13645-17-ville.syrjala@linux.intel.com
drivers/gpu/drm/tegra/drm.h
drivers/gpu/drm/tegra/fb.c
drivers/gpu/drm/tegra/fbdev.c

index 77e520c43f72cdc48b1ff96d71d8295e17ed3b0c..1dd3670f37dbc0a6955b37fa1da7da322b6c1ff0 100644 (file)
@@ -185,6 +185,7 @@ bool tegra_fb_is_bottom_up(struct drm_framebuffer *framebuffer);
 int tegra_fb_get_tiling(struct drm_framebuffer *framebuffer,
                        struct tegra_bo_tiling *tiling);
 struct drm_framebuffer *tegra_fb_alloc(struct drm_device *drm,
+                                      const struct drm_format_info *info,
                                       const struct drm_mode_fb_cmd2 *mode_cmd,
                                       struct tegra_bo **planes,
                                       unsigned int num_planes);
index d359683f5ce62c7494ebe483f1aa2767ad1d825d..dd041089f797a3b04956d85818ab40c2aa79d6dd 100644 (file)
@@ -102,6 +102,7 @@ static const struct drm_framebuffer_funcs tegra_fb_funcs = {
 };
 
 struct drm_framebuffer *tegra_fb_alloc(struct drm_device *drm,
+                                      const struct drm_format_info *info,
                                       const struct drm_mode_fb_cmd2 *mode_cmd,
                                       struct tegra_bo **planes,
                                       unsigned int num_planes)
@@ -114,7 +115,7 @@ struct drm_framebuffer *tegra_fb_alloc(struct drm_device *drm,
        if (!fb)
                return ERR_PTR(-ENOMEM);
 
-       drm_helper_mode_fill_fb_struct(drm, fb, NULL, mode_cmd);
+       drm_helper_mode_fill_fb_struct(drm, fb, info, mode_cmd);
 
        for (i = 0; i < fb->format->num_planes; i++)
                fb->obj[i] = &planes[i]->gem;
@@ -166,7 +167,7 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
                planes[i] = to_tegra_bo(gem);
        }
 
-       fb = tegra_fb_alloc(drm, cmd, planes, i);
+       fb = tegra_fb_alloc(drm, info, cmd, planes, i);
        if (IS_ERR(fb)) {
                err = PTR_ERR(fb);
                goto unreference;
index cd9d798f88707496751b5ff6958927f4436b4454..1b70f5e164afd5c17d0975958a3796e385fe9037 100644 (file)
@@ -106,7 +106,9 @@ int tegra_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,
                return PTR_ERR(info);
        }
 
-       fb = tegra_fb_alloc(drm, &cmd, &bo, 1);
+       fb = tegra_fb_alloc(drm,
+                           drm_get_format_info(drm, cmd.pixel_format, cmd.modifier[0]),
+                           &cmd, &bo, 1);
        if (IS_ERR(fb)) {
                err = PTR_ERR(fb);
                dev_err(drm->dev, "failed to allocate DRM framebuffer: %d\n",