]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/armada: Pass along the format info from .fb_create() to drm_helper_mode_fill_fb_s...
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 1 Jul 2025 09:07:13 +0000 (12:07 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 16 Jul 2025 17:07:32 +0000 (20:07 +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: Russell King <linux@armlinux.org.uk>
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-11-ville.syrjala@linux.intel.com
drivers/gpu/drm/armada/armada_fb.c
drivers/gpu/drm/armada/armada_fb.h
drivers/gpu/drm/armada/armada_fbdev.c

index 7e94ec5bd4f4e9e387d3e8105447924dfd3fa84d..aa42891270863228454ba827230bda3a5025bf12 100644 (file)
@@ -18,7 +18,9 @@ static const struct drm_framebuffer_funcs armada_fb_funcs = {
 };
 
 struct armada_framebuffer *armada_framebuffer_create(struct drm_device *dev,
-       const struct drm_mode_fb_cmd2 *mode, struct armada_gem_object *obj)
+                                                    const struct drm_format_info *info,
+                                                    const struct drm_mode_fb_cmd2 *mode,
+                                                    struct armada_gem_object *obj)
 {
        struct armada_framebuffer *dfb;
        uint8_t format, config;
@@ -64,7 +66,7 @@ struct armada_framebuffer *armada_framebuffer_create(struct drm_device *dev,
        dfb->mod = config;
        dfb->fb.obj[0] = &obj->obj;
 
-       drm_helper_mode_fill_fb_struct(dev, &dfb->fb, NULL, mode);
+       drm_helper_mode_fill_fb_struct(dev, &dfb->fb, info, mode);
 
        ret = drm_framebuffer_init(dev, &dfb->fb, &armada_fb_funcs);
        if (ret) {
@@ -122,7 +124,7 @@ struct drm_framebuffer *armada_fb_create(struct drm_device *dev,
                goto err_unref;
        }
 
-       dfb = armada_framebuffer_create(dev, mode, obj);
+       dfb = armada_framebuffer_create(dev, info, mode, obj);
        if (IS_ERR(dfb)) {
                ret = PTR_ERR(dfb);
                goto err;
index 41ba76dd80d6f0074e67268be26deafa1edd8211..f2b990f055a24cf977944cdf4273018103cb2710 100644 (file)
@@ -17,6 +17,7 @@ struct armada_framebuffer {
 #define drm_fb_obj(fb) drm_to_armada_gem((fb)->obj[0])
 
 struct armada_framebuffer *armada_framebuffer_create(struct drm_device *,
+       const struct drm_format_info *info,
        const struct drm_mode_fb_cmd2 *, struct armada_gem_object *);
 struct drm_framebuffer *armada_fb_create(struct drm_device *dev,
        struct drm_file *dfile, const struct drm_format_info *info,
index 6ee7ce04ee7138835a57f7431162fc733982a658..cb53cc91bafb058946d53b98f1bf82182c97559f 100644 (file)
@@ -78,7 +78,10 @@ int armada_fbdev_driver_fbdev_probe(struct drm_fb_helper *fbh,
                return -ENOMEM;
        }
 
-       dfb = armada_framebuffer_create(dev, &mode, obj);
+       dfb = armada_framebuffer_create(dev,
+                                       drm_get_format_info(dev, mode.pixel_format,
+                                                           mode.modifier[0]),
+                                       &mode, obj);
 
        /*
         * A reference is now held by the framebuffer object if