[PATCH v2 12/19] drm/gma500: Pass along the format info from .fb_create() to drm_helper_mode_fill_fb_struct()

Patrik Jakobsson patrik.r.jakobsson at gmail.com
Wed Jul 2 05:28:00 UTC 2025


On Tue, Jul 1, 2025 at 11:08 AM Ville Syrjala
<ville.syrjala at linux.intel.com> wrote:
>
> From: Ville Syrjälä <ville.syrjala at 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.jakobsson at gmail.com>
> Reviewed-by: Thomas Zimmermann <tzimmermann at suse.de>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

Acked-by: Patrik Jakobsson <patrik.r.jakobsson at 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
>


More information about the dri-devel mailing list