Linux >= 5.14.12 and 5.15-rc5 fail to show anything on the screen with CONFIG_DRM_SIMPLEDRM=y

Arnd Bergmann arnd at arndb.de
Fri Oct 22 12:55:05 UTC 2021


On Fri, Oct 22, 2021 at 2:15 PM Artem S. Tashkinov <aros at gmx.com> wrote:
> Kernel 5.14.12 introduced this change, git commit
> ec7cc3f74b4236860ce612656aa5be7936d1c594:
>
> --- a/linux-5.14.11/drivers/video/fbdev/Kconfig
> +++ b/linux-5.14.12/drivers/video/fbdev/Kconfig
> @@ -2191,8 +2191,9 @@ config FB_HYPERV
>        This framebuffer driver supports Microsoft Hyper-V Synthetic Video.
>
>   config FB_SIMPLE
> -   bool "Simple framebuffer support"
> -   depends on (FB = y) && !DRM_SIMPLEDRM
> +   tristate "Simple framebuffer support"
> +   depends on FB
> +   depends on !DRM_SIMPLEDRM
>      select FB_CFB_FILLRECT
>      select FB_CFB_COPYAREA
>      select FB_CFB_IMAGEBLIT
>
>
> However if you enable CONFIG_DRM_SIMPLEDRM=y along with it, the system
> will show a black screen on boot while logging these messages:
>
> [drm] Initialized simpledrm 1.0.0 20200625 for simple-framebuffer.0 on
> minor 0
> simple-framebuffer simple-framebuffer.0: [drm] *ERROR* fbdev: Failed to
> setup generic emulation (ret=-22)
> fbcon: Taking over console

If you want to help debug this, you can try adding a few printk
statements around this code that could run into -EINVAL (22):

drm_file_alloc()
...
        if (dev->driver->open) {
                ret = dev->driver->open(dev, file);
                if (ret < 0)
                        goto out_prime_destroy;
        }

or
static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
                                         int preferred_bpp)
...
        ret = (*fb_helper->funcs->fb_probe)(fb_helper, &sizes);
or
static int do_fbcon_takeover(int show_logo)
...
        if (!num_registered_fb)
                return -ENODEV;

and then go from there.

> When CONFIG_DRM_SIMPLEDRM is disabled it proceeds to boot normally:
> simple-framebuffer simple-framebuffer.0: framebuffer at 0xe1000000,
> 0x300000 bytes
> simple-framebuffer simple-framebuffer.0: format=a8r8g8b8,
> mode=1024x768x32, linelength=4096
> fbcon: Deferring console take-over
> simple-framebuffer simple-framebuffer.0: fb0: simplefb registered!

Ok, good, so FB_SIMPLE continues to work as expected if it's built-in.

When the driver is a loadable module, it should work once you load
the module, but that is only after the system is fully booted. It's
possible that there is a bug with the module loading.

In the meantime I would suggest to keep using FB_SIMPLE=y if that
works for you.

       Arnd


More information about the dri-devel mailing list