[PATCH 3/3] drm/radeon: Pass along the format info from .fb_create() to drm_helper_mode_fill_fb_struct()

Deucher, Alexander Alexander.Deucher at amd.com
Mon Jul 28 18:42:53 UTC 2025


[Public]

> -----Original Message-----
> From: Imre Deak <imre.deak at intel.com>
> Sent: Monday, July 28, 2025 6:16 AM
> To: dri-devel at lists.freedesktop.org
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>; Deucher, Alexander
> <Alexander.Deucher at amd.com>; Koenig, Christian
> <Christian.Koenig at amd.com>; Thomas Zimmermann <tzimmermann at suse.de>;
> Maarten Lankhorst <maarten.lankhorst at linux.intel.com>; Maxime Ripard
> <mripard at kernel.org>; amd-gfx at lists.freedesktop.org
> Subject: [PATCH 3/3] drm/radeon: Pass along the format info from .fb_create() to
> drm_helper_mode_fill_fb_struct()
>
> 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.
>
> The patch is based on the driver parts of the patchset at Link:
> below, which missed converting the radeon driver.
>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Cc: Christian König <christian.koenig at amd.com>
> Cc: Thomas Zimmermann <tzimmermann at suse.de>
> Cc: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> Cc: Maxime Ripard <mripard at kernel.org>
> Cc: amd-gfx at lists.freedesktop.org
> Fixes: 41ab92d35ccd ("drm: Make passing of format info to
> drm_helper_mode_fill_fb_struct() mandatory")
> Link: https://lore.kernel.org/all/20250701090722.13645-1-
> ville.syrjala at linux.intel.com
> Signed-off-by: Imre Deak <imre.deak at intel.com>

Series is:
Acked-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/radeon/radeon_display.c |  5 +++--
>  drivers/gpu/drm/radeon/radeon_fbdev.c   | 11 ++++++-----
>  drivers/gpu/drm/radeon/radeon_mode.h    |  2 ++
>  3 files changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_display.c
> b/drivers/gpu/drm/radeon/radeon_display.c
> index b4bf5dfeea2dc..4dc77c398617a 100644
> --- a/drivers/gpu/drm/radeon/radeon_display.c
> +++ b/drivers/gpu/drm/radeon/radeon_display.c
> @@ -1297,12 +1297,13 @@ static const struct drm_framebuffer_funcs
> radeon_fb_funcs = {  int  radeon_framebuffer_init(struct drm_device *dev,
>                       struct drm_framebuffer *fb,
> +                     const struct drm_format_info *info,
>                       const struct drm_mode_fb_cmd2 *mode_cmd,
>                       struct drm_gem_object *obj)
>  {
>       int ret;
>       fb->obj[0] = obj;
> -     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, &radeon_fb_funcs);
>       if (ret) {
>               fb->obj[0] = NULL;
> @@ -1341,7 +1342,7 @@ radeon_user_framebuffer_create(struct drm_device
> *dev,
>               return ERR_PTR(-ENOMEM);
>       }
>
> -     ret = radeon_framebuffer_init(dev, fb, mode_cmd, obj);
> +     ret = radeon_framebuffer_init(dev, fb, info, mode_cmd, obj);
>       if (ret) {
>               kfree(fb);
>               drm_gem_object_put(obj);
> diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c
> b/drivers/gpu/drm/radeon/radeon_fbdev.c
> index e3a481bbee7b6..dc81b0c2dbff3 100644
> --- a/drivers/gpu/drm/radeon/radeon_fbdev.c
> +++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
> @@ -53,10 +53,10 @@ static void radeon_fbdev_destroy_pinned_object(struct
> drm_gem_object *gobj)  }
>
>  static int radeon_fbdev_create_pinned_object(struct drm_fb_helper *fb_helper,
> +                                          const struct drm_format_info *info,
>                                            struct drm_mode_fb_cmd2 *mode_cmd,
>                                            struct drm_gem_object **gobj_p)  {
> -     const struct drm_format_info *info;
>       struct radeon_device *rdev = fb_helper->dev->dev_private;
>       struct drm_gem_object *gobj = NULL;
>       struct radeon_bo *rbo = NULL;
> @@ -67,8 +67,6 @@ static int radeon_fbdev_create_pinned_object(struct
> drm_fb_helper *fb_helper,
>       int height = mode_cmd->height;
>       u32 cpp;
>
> -     info = drm_get_format_info(rdev_to_drm(rdev), mode_cmd->pixel_format,
> -                                mode_cmd->modifier[0]);
>       cpp = info->cpp[0];
>
>       /* need to align pitch with crtc limits */ @@ -206,6 +204,7 @@ int
> radeon_fbdev_driver_fbdev_probe(struct drm_fb_helper *fb_helper,
>                                   struct drm_fb_helper_surface_size *sizes)  {
>       struct radeon_device *rdev = fb_helper->dev->dev_private;
> +     const struct drm_format_info *format_info;
>       struct drm_mode_fb_cmd2 mode_cmd = { };
>       struct fb_info *info;
>       struct drm_gem_object *gobj;
> @@ -224,7 +223,9 @@ int radeon_fbdev_driver_fbdev_probe(struct drm_fb_helper
> *fb_helper,
>       mode_cmd.pixel_format = drm_mode_legacy_fb_format(sizes-
> >surface_bpp,
>                                                         sizes->surface_depth);
>
> -     ret = radeon_fbdev_create_pinned_object(fb_helper, &mode_cmd, &gobj);
> +     format_info = drm_get_format_info(rdev_to_drm(rdev),
> mode_cmd.pixel_format,
> +                                       mode_cmd.modifier[0]);
> +     ret = radeon_fbdev_create_pinned_object(fb_helper, format_info,
> +&mode_cmd, &gobj);
>       if (ret) {
>               DRM_ERROR("failed to create fbcon object %d\n", ret);
>               return ret;
> @@ -236,7 +237,7 @@ int radeon_fbdev_driver_fbdev_probe(struct drm_fb_helper
> *fb_helper,
>               ret = -ENOMEM;
>               goto err_radeon_fbdev_destroy_pinned_object;
>       }
> -     ret = radeon_framebuffer_init(rdev_to_drm(rdev), fb, &mode_cmd, gobj);
> +     ret = radeon_framebuffer_init(rdev_to_drm(rdev), fb, format_info,
> +&mode_cmd, gobj);
>       if (ret) {
>               DRM_ERROR("failed to initialize framebuffer %d\n", ret);
>               goto err_kfree;
> diff --git a/drivers/gpu/drm/radeon/radeon_mode.h
> b/drivers/gpu/drm/radeon/radeon_mode.h
> index 3102f6c2d0556..9e34da2cacef6 100644
> --- a/drivers/gpu/drm/radeon/radeon_mode.h
> +++ b/drivers/gpu/drm/radeon/radeon_mode.h
> @@ -40,6 +40,7 @@
>
>  struct drm_fb_helper;
>  struct drm_fb_helper_surface_size;
> +struct drm_format_info;
>
>  struct edid;
>  struct drm_edid;
> @@ -890,6 +891,7 @@ extern void
>  radeon_combios_encoder_dpms_scratch_regs(struct drm_encoder *encoder, bool
> on);  int radeon_framebuffer_init(struct drm_device *dev,
>                            struct drm_framebuffer *rfb,
> +                          const struct drm_format_info *info,
>                            const struct drm_mode_fb_cmd2 *mode_cmd,
>                            struct drm_gem_object *obj);
>
> --
> 2.49.1



More information about the dri-devel mailing list