Enable DRM_SIMPLEDRM and SYSFB_SIMPLEFB
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- On ARM systems, try also commenting out the fb modules block in initramfs-tools hook-functions
- 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 ifsimpledrm
works after boot
- Try adding
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:
- Ben's email about limiting graphics drivers in initramfs
- Debian Bug #993640: Please turn on the SimpleDRM driver in 6.11
- Fedora notes for simpledrm migration
- Ubuntu bug about moving to simpledrm
- Plymouth issue about supporting simpledrm by default
- Hans de Goede's blog post about graphics modules in initramfs
- KDE recommendation to use simpledrm as built-in
I hope I haven't missed anything big. I think it needs more discussion and testing from others, so marking as a draft.