[PATCH 5/7] drm/gma500: Inline psbfb_create() into psbfb_probe()

Patrik Jakobsson patrik.r.jakobsson at gmail.com
Mon Mar 6 14:51:45 UTC 2023


On Thu, Feb 23, 2023 at 1:17 PM Thomas Zimmermann <tzimmermann at suse.de> wrote:
>
> Inline psbfb_create() into its only caller psbfb_probe(). Streamline
> the color-depth selection.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> ---
>  drivers/gpu/drm/gma500/fbdev.c | 65 ++++++++++++++--------------------
>  1 file changed, 26 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/gma500/fbdev.c b/drivers/gpu/drm/gma500/fbdev.c
> index 2c511359a7c6..083233692c55 100644
> --- a/drivers/gpu/drm/gma500/fbdev.c
> +++ b/drivers/gpu/drm/gma500/fbdev.c
> @@ -137,31 +137,49 @@ static const struct fb_ops psb_fbdev_ops = {
>   * struct drm_fb_helper_funcs
>   */
>
> -static int psbfb_create(struct drm_fb_helper *fb_helper,
> -                       struct drm_fb_helper_surface_size *sizes)
> +static int psbfb_probe(struct drm_fb_helper *fb_helper,

Should this now be psb_fbdev_probe() ?


> +                      struct drm_fb_helper_surface_size *sizes)
>  {
>         struct drm_device *dev = fb_helper->dev;
>         struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
>         struct pci_dev *pdev = to_pci_dev(dev->dev);
>         struct fb_info *info;
>         struct drm_framebuffer *fb;
> -       struct drm_mode_fb_cmd2 mode_cmd;
> +       struct drm_mode_fb_cmd2 mode_cmd = { };
>         int size;
>         int ret;
>         struct psb_gem_object *backing;
>         struct drm_gem_object *obj;
>         u32 bpp, depth;
>
> -       mode_cmd.width = sizes->surface_width;
> -       mode_cmd.height = sizes->surface_height;
> +       /* No 24-bit packed mode */
> +       if (sizes->surface_bpp == 24) {
> +               sizes->surface_bpp = 32;
> +               sizes->surface_depth = 24;
> +       }
>         bpp = sizes->surface_bpp;
>         depth = sizes->surface_depth;
>
> -       /* No 24bit packed */
> -       if (bpp == 24)
> -               bpp = 32;
> +       /*
> +        * If the mode does not fit in 32 bit then switch to 16 bit to get
> +        * a console on full resolution. The X mode setting server will
> +        * allocate its own 32-bit GEM framebuffer.
> +        */
> +       size = ALIGN(sizes->surface_width * DIV_ROUND_UP(bpp, 8), 64) *
> +                    sizes->surface_height;
> +       size = ALIGN(size, PAGE_SIZE);
> +
> +       if (size > dev_priv->vram_stolen_size) {
> +               sizes->surface_bpp = 16;
> +               sizes->surface_depth = 16;
> +       }
> +       bpp = sizes->surface_bpp;
> +       depth = sizes->surface_depth;
>
> +       mode_cmd.width = sizes->surface_width;
> +       mode_cmd.height = sizes->surface_height;
>         mode_cmd.pitches[0] = ALIGN(mode_cmd.width * DIV_ROUND_UP(bpp, 8), 64);
> +       mode_cmd.pixel_format = drm_mode_legacy_fb_format(bpp, depth);
>
>         size = mode_cmd.pitches[0] * mode_cmd.height;
>         size = ALIGN(size, PAGE_SIZE);
> @@ -180,8 +198,6 @@ static int psbfb_create(struct drm_fb_helper *fb_helper,
>                 goto err_drm_gem_object_put;
>         }
>
> -       mode_cmd.pixel_format = drm_mode_legacy_fb_format(bpp, depth);
> -
>         fb = psb_framebuffer_create(dev, &mode_cmd, obj);
>         if (IS_ERR(fb)) {
>                 ret = PTR_ERR(fb);
> @@ -217,35 +233,6 @@ static int psbfb_create(struct drm_fb_helper *fb_helper,
>         return ret;
>  }
>
> -static int psbfb_probe(struct drm_fb_helper *fb_helper,
> -                               struct drm_fb_helper_surface_size *sizes)
> -{
> -       struct drm_device *dev = fb_helper->dev;
> -       struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> -       unsigned int fb_size;
> -       int bytespp;
> -
> -       bytespp = sizes->surface_bpp / 8;
> -       if (bytespp == 3)       /* no 24bit packed */
> -               bytespp = 4;
> -
> -       /*
> -        * If the mode will not fit in 32bit then switch to 16bit to get
> -        * a console on full resolution. The X mode setting server will
> -        * allocate its own 32bit GEM framebuffer
> -        */
> -       fb_size = ALIGN(sizes->surface_width * bytespp, 64) *
> -                 sizes->surface_height;
> -       fb_size = ALIGN(fb_size, PAGE_SIZE);
> -
> -       if (fb_size > dev_priv->vram_stolen_size) {
> -               sizes->surface_bpp = 16;
> -               sizes->surface_depth = 16;
> -       }
> -
> -       return psbfb_create(fb_helper, sizes);
> -}
> -
>  static const struct drm_fb_helper_funcs psb_fb_helper_funcs = {
>         .fb_probe = psbfb_probe,
>  };
> --
> 2.39.2
>


More information about the dri-devel mailing list