[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