On Tue, Jul 1, 2025 at 11:08 AM Ville Syrjala <ville.syrj...@linux.intel.com> wrote: > > 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: Patrik Jakobsson <patrik.r.jakobs...@gmail.com> > Reviewed-by: Thomas Zimmermann <tzimmerm...@suse.de> > Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
Acked-by: Patrik Jakobsson <patrik.r.jakobs...@gmail.com> > --- > drivers/gpu/drm/gma500/fbdev.c | 5 ++++- > drivers/gpu/drm/gma500/framebuffer.c | 14 +++++++------- > drivers/gpu/drm/gma500/psb_drv.h | 1 + > 3 files changed, 12 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/gma500/fbdev.c b/drivers/gpu/drm/gma500/fbdev.c > index 8edefea2ef59..d32689cb0e23 100644 > --- a/drivers/gpu/drm/gma500/fbdev.c > +++ b/drivers/gpu/drm/gma500/fbdev.c > @@ -203,7 +203,10 @@ int psb_fbdev_driver_fbdev_probe(struct drm_fb_helper > *fb_helper, > return PTR_ERR(backing); > obj = &backing->base; > > - fb = psb_framebuffer_create(dev, &mode_cmd, obj); > + fb = psb_framebuffer_create(dev, > + drm_get_format_info(dev, > mode_cmd.pixel_format, > + mode_cmd.modifier[0]), > + &mode_cmd, obj); > if (IS_ERR(fb)) { > ret = PTR_ERR(fb); > goto err_drm_gem_object_put; > diff --git a/drivers/gpu/drm/gma500/framebuffer.c > b/drivers/gpu/drm/gma500/framebuffer.c > index f9ade8361354..e69b537ded6b 100644 > --- a/drivers/gpu/drm/gma500/framebuffer.c > +++ b/drivers/gpu/drm/gma500/framebuffer.c > @@ -29,25 +29,23 @@ static const struct drm_framebuffer_funcs psb_fb_funcs = { > */ > static int psb_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) > { > - const struct drm_format_info *info; > int ret; > > /* > * Reject unknown formats, YUV formats, and formats with more than > * 4 bytes per pixel. > */ > - info = drm_get_format_info(dev, mode_cmd->pixel_format, > - mode_cmd->modifier[0]); > - if (!info || !info->depth || info->cpp[0] > 4) > + if (!info->depth || info->cpp[0] > 4) > return -EINVAL; > > if (mode_cmd->pitches[0] & 63) > return -EINVAL; > > - drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd); > + drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd); > fb->obj[0] = obj; > ret = drm_framebuffer_init(dev, fb, &psb_fb_funcs); > if (ret) { > @@ -60,6 +58,7 @@ static int psb_framebuffer_init(struct drm_device *dev, > /** > * psb_framebuffer_create - create a framebuffer backed by gt > * @dev: our DRM device > + * @info: pixel format information > * @mode_cmd: the description of the requested mode > * @obj: the backing object > * > @@ -69,6 +68,7 @@ static int psb_framebuffer_init(struct drm_device *dev, > * TODO: review object references > */ > struct drm_framebuffer *psb_framebuffer_create(struct drm_device *dev, > + const struct drm_format_info > *info, > const struct drm_mode_fb_cmd2 > *mode_cmd, > struct drm_gem_object *obj) > { > @@ -79,7 +79,7 @@ struct drm_framebuffer *psb_framebuffer_create(struct > drm_device *dev, > if (!fb) > return ERR_PTR(-ENOMEM); > > - ret = psb_framebuffer_init(dev, fb, mode_cmd, obj); > + ret = psb_framebuffer_init(dev, fb, info, mode_cmd, obj); > if (ret) { > kfree(fb); > return ERR_PTR(ret); > @@ -112,7 +112,7 @@ static struct drm_framebuffer *psb_user_framebuffer_create > return ERR_PTR(-ENOENT); > > /* Let the core code do all the work */ > - fb = psb_framebuffer_create(dev, cmd, obj); > + fb = psb_framebuffer_create(dev, info, cmd, obj); > if (IS_ERR(fb)) > drm_gem_object_put(obj); > > diff --git a/drivers/gpu/drm/gma500/psb_drv.h > b/drivers/gpu/drm/gma500/psb_drv.h > index 7f77cb2b2751..0b27112ec46f 100644 > --- a/drivers/gpu/drm/gma500/psb_drv.h > +++ b/drivers/gpu/drm/gma500/psb_drv.h > @@ -594,6 +594,7 @@ extern void psb_modeset_cleanup(struct drm_device *dev); > > /* framebuffer */ > struct drm_framebuffer *psb_framebuffer_create(struct drm_device *dev, > + const struct drm_format_info > *info, > const struct drm_mode_fb_cmd2 > *mode_cmd, > struct drm_gem_object *obj); > > -- > 2.49.0 >