The upcoming Fedora release includes a change proposed by Peter Robinson and yours truly, that disables all the Frame Buffer Device (fbdev) drivers in the Linux kernel package.
This means that starting from Fedora 36, only DRM/KMS drivers will be used.
Many Linux developers have been arguing for over a decade now that fbdev is deprecated and it has been almost 7 years since the previous fbdev
maintainer said that no new fbdev
drivers would be added to the kernel. So this feels like a change long overdue.
This was possible thanks to the work of Thomas Zimmermann @ SUSE, who added the simpledrm driver, that exposes the system framebuffer set-up by the firmware as a DRM
device.
Using the simpledrm
driver, a framebuffer would be available even if the platform does not have a DRM
driver or the user disables it using the nomodeset
kernel command-line parameter.
Before this change, the video drivers used when DRM
drivers were disabled with the nomodeset
parameter, where either efifb
(for systems booted with EFI) or vesafb
(for systems booted with legacy BIOS and a VESA video mode selected on boot using the vga
kernel command line parameter).
The need to rely on the system framebuffer initialized by the firmware was the primary reason why these fbdev
drivers were still enabled in the Fedora kernel.
But the simpledrm
replaces both, since is able to expose any system framebuffer, as long as platform code pass it as a proper I/O memory region for the driver to use it.
That includes not only the EFI system framebuffer provided through the Graphics Output Protocol (GOP and the VESA framebuffer configured with the vga
parameter, but also framebuffers whose information is passed to the kernel through other hardware description mechanisms. For example, as a “simple-framebuffer” Device Tree node, which is common on aarch64
devices.
Even when no fbdev
drivers are used anymore, the fbdev
subsystem is still enabled. This is needed because the The Framebuffer Console (fbcon) needs an fbdev
device to bind. But fortunately the DRM
subsystem provides a generic fbdev
emulation layer, so DRM
drivers can also provide a fbdev
interface for fbcon
(or even to user-space that still expects an fbdev
device to work).
While working on this, we found that a lot of assumptions made all over the stack were no longer true once simpledrm
was used instead of {efi,vesa}fb
. So changes were needed in the Linux kernel, Plymouth, GDM, Xorg, etc.
But that will be a topic for another post since this one got too long already!