Re: [PATCH v3 11/13] drm/fb-helper: Fix single-probe color-format selection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

Am 12.05.23 um 15:20 schrieb Linus Walleij:
Sorry for late regression detection but this patch regresses
the Integrator AB IMPD-1 graphics, I bisected down to this
patch.
[...]
This is the driver:
drivers/gpu/drm/pl111/pl111_versatile.c
with the pl110_impd1 variant, so these are the supported modes:

/* PL110 pixel formats for Integrator, vanilla PL110 */
static const u32 pl110_integrator_pixel_formats[] = {
         DRM_FORMAT_ABGR8888,
         DRM_FORMAT_XBGR8888,
         DRM_FORMAT_ARGB8888,
         DRM_FORMAT_XRGB8888,
         DRM_FORMAT_ABGR1555,
         DRM_FORMAT_XBGR1555,
         DRM_FORMAT_ARGB1555,
         DRM_FORMAT_XRGB1555,
};
(...)
/*
  * The IM-PD1 variant is a PL110 with a bunch of broken, or not
  * yet implemented features
  */
static const struct pl111_variant_data pl110_impd1 = {
         .name = "PL110 IM-PD1",
         .is_pl110 = true,
         .broken_clockdivider = true,
         .broken_vblank = true,
         .formats = pl110_integrator_pixel_formats,
         .nformats = ARRAY_SIZE(pl110_integrator_pixel_formats),
         .fb_bpp = 16,
};

Notice the absence of RGB565!
Then we initialized the frambuffer like this:

         drm_fbdev_dma_setup(drm, priv->variant->fb_bpp);

And as you see priv->variant->fb_bpp will be 16, so we want some
16bpp mode however the only supported depth is 15 (the 1555 modes)
so it would use that by scaling back depth to 15.

However after this patch that doesn't work anymore.

Any hints on how we can fix this?

According to a quick grep for fb_bpp, it's only used for the call to drm_fbdev_dma_setup(), right? In this case, you should set it to 15 for the models without rgb565. The switch at [1] should then pick the correct values.

The preferred_bpp parameter had a change in semantics. It used to be the number of bits per pixel. But that makes it hard to select between RGB1555 and RGB565. So it's now a special color-mode value that works like the kernel's video= parameter. Values of 15 and 32 are different from the rest. That switch at [1] explains it. Maybe you should rename fb_bpp to color_mode for clarity.

Let me know if this helps.

Best regards
Thomas

[1] https://elixir.bootlin.com/linux/v6.4-rc1/source/drivers/gpu/drm/drm_fb_helper.c#L1827


Yours,
Linus Walleij

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux