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

Linus Walleij linus.walleij at linaro.org
Fri May 12 13:20:11 UTC 2023


Sorry for late regression detection but this patch regresses
the Integrator AB IMPD-1 graphics, I bisected down to this
patch.

On Mon, Jan 2, 2023 at 12:30 PM Thomas Zimmermann <tzimmermann at suse.de> wrote:

> Fix the color-format selection of the single-probe helper. Go
> through all user-specified values and test each for compatibility
> with the driver. If none is supported, use the driver-provided
> default. This guarantees that the console is always available in
> any color format at least.
>
> Until now, the format selection of the single-probe helper tried
> to either use a user-specified format or a 32-bit default format.
> If the user-specified format was not supported by the driver, the
> selection failed and the display remained blank.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> Reviewed-by: Javier Martinez Canillas <javierm at redhat.com>

Before this patch:

[drm] Initialized pl111 1.0.0 20170317 for c1000000.display on minor 0
drm-clcd-pl111 c1000000.display: [drm] requested bpp 16, scaled depth down to 15
drm-clcd-pl111 c1000000.display: enable IM-PD1 CLCD connectors
Console: switching to colour frame buffer device 80x30
drm-clcd-pl111 c1000000.display: [drm] fb0: pl111drmfb frame buffer device

After this patch:

[drm] Initialized pl111 1.0.0 20170317 for c1000000.display on minor 0
drm-clcd-pl111 c1000000.display: [drm] bpp/depth value of 16/16 not supported
drm-clcd-pl111 c1000000.display: [drm] No compatible format found
drm-clcd-pl111 c1000000.display: [drm] *ERROR* fbdev: Failed to setup
generic emulation (ret=-12)

It seems the bpp downscaling stopped to work?

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?

Yours,
Linus Walleij


More information about the dri-devel mailing list