Skip to content

Enable DRM_SIMPLEDRM and SYSFB_SIMPLEFB

Alper Nebi Yasak requested to merge alpernebbi/linux:simpledrm into debian/latest

This is a weird bunch of changes to switch from the fbdev-based simplefb to drm-based simpledrm. With SYSFB_SIMPLEFB, it can also drive platform framebuffers like efifb, vesafb. Plymouth can render onto a display driven by simpledrm if we include plymouth.use-simpledrm kernel command line argument, which can help us skip adding the full drm modules into the initramfs with huge amounts of firmware. Apparently we can also run Wayland compositors on simpledrm displays unlike fbdev ones.

I assume we do not want DRM=y and thus must have DRM_SIMPLEDRM=m, but AFAICT other distros have it built-in instead. It doesn't probe as a module automatically for efifb, so it will need changes in initramfs-tools and in installer, both to have it available and to call modprobe for it. I have filed initramfs-tools!142 (merged) for the initramfs side of it, and included them in the udebs here, and I think the installer will need to also probe the modules which I tried to do in installer-team/rootskel!9. But things would be simpler if we can do DRM=y and DRM_SIMPLEDRM=y like others.

The cloud flavour disables DRM and FB_SIMPLE but enables FB_EFI. With SYSFB_SIMPLEFB=y the EFI framebuffer will functionally require DRM_SIMPLEDRM (or FB_SIMPLE), so I've removed the fragments disabling the configs in cloud. Alternatively we can keep SYSFB_SIMPLEFB disabled on cloud.

The coreboot framebuffer driver depends on either simplefb or simpledrm and it would need to be a module as well if DRM_SIMPLEDRM=m. It used to not probe automatically as a module, but looks like that has been fixed for a while. Making that a module also means it needs to go into initramfs and udebs. There's also a two-patch fix I need from v6.13-rc1 for it to avoid conflicting with efifb and breaking boot on my x86 Chromebooks.

To test:

  • Comment out the drm modules block from Plymouth initramfs-tools hook and regenerate initramfs
  • Boot with console=tty0 break, observe display works with initramfs shell, check /proc/fb to confirm it's not a full driver
  • Install kernel with these changes, apply initramfs-tools!142 (merged) to your system, regenerate initramfs
  • Boot with console=tty0 break and check framebuffer again, should work as before
  • Boot with console=tty0 splash plymouth.use-simpledrm plymouth.ignore-serial-consoles and check boot splash
    • Try adding module_blacklist=i915,amdgpu,radeon,nouveau,nvidia etc. to see if simpledrm works after boot

There are some problems with omitting full drm drivers from the initramfs to use Plymouth on simpledrm. But enabling the driver doesn't mean we have to do that, so the issues are orthogonal to this change. Some that I've found during testing, most not necessarily about simpledrm per se:

  • U-Boot may provide an EFI framebuffer, but may be turning off the display at ExitBootServices
  • QEMU ARM64 OVMF also appears to turn off display at ExitBootServices
  • An Intel Chromebook has an early framebuffer in only a non-native resolution (boot splash gets re-scaled and moved)
  • Flicker during boot splash because the full driver re-initializes the display
  • Boot splash disappears after switching to amdgpu (initializes too slow that boot is actually done?)
  • ARM64 Chromebooks have a bogus coreboot framebuffer

See also:

I hope I haven't missed anything big. I think it needs more discussion and testing from others, so marking as a draft.

Edited by Alper Nebi Yasak

Merge request reports

Loading