[Public] > -----Original Message----- > From: Imre Deak <imre.d...@intel.com> > Sent: Monday, July 28, 2025 6:16 AM > To: dri-de...@lists.freedesktop.org > Cc: Ville Syrjälä <ville.syrj...@linux.intel.com>; Deucher, Alexander > <alexander.deuc...@amd.com>; Koenig, Christian > <christian.koe...@amd.com>; Thomas Zimmermann <tzimmerm...@suse.de>; > Maarten Lankhorst <maarten.lankho...@linux.intel.com>; Maxime Ripard > <mrip...@kernel.org>; amd-gfx@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.syrj...@linux.intel.com> > Cc: Alex Deucher <alexander.deuc...@amd.com> > Cc: Christian König <christian.koe...@amd.com> > Cc: Thomas Zimmermann <tzimmerm...@suse.de> > Cc: Maarten Lankhorst <maarten.lankho...@linux.intel.com> > Cc: Maxime Ripard <mrip...@kernel.org> > Cc: amd-gfx@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.syrj...@linux.intel.com > Signed-off-by: Imre Deak <imre.d...@intel.com>
Series is: Acked-by: Alex Deucher <alexander.deuc...@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