[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 Intel-gfx
mailing list