This is a follow-up to
<[email protected]> and the
merge request
<https://salsa.debian.org/kernel-team/linux/-/merge_requests/1453>, and
I'm hoping to include all the involved maintainers so that we can agree
on what we're trying to do.

Please reply to let me know whether I've understood the goals correctly,
or if there's already a plan that I haven't seen, or if you already know
a reaosn why this implementation wouldn't work.  Also there are some
questions at the end that I would like to know the answer to.

Ben.

## Goals

On systems where UEFI (or other platform firmware or boot loader) sets
up a usable framebuffer, the default behaviour should be that:

- SimpleDRM a.k.a. `drm_simple` is:
  - included in either the kernel image or the initramfs
  - binds to that framebuffer
  - is used by Plymouth immediately
  For the last point, see
  <https://fedoraproject.org/wiki/Changes/PlymouthUseSimpledrm>.

- Other graphics drivers are not included in the initramfs.  This
  would result in much smaller images that load faster and don't fill
  up a separate `/boot` partition.

## Problems

- In the kernel, we cannot assume that an EFI framebuffer is always
  usable.  In particular, older versions of GRUB may break it by using
  a native graphics driver, but without clearing whatever signals the
  kernel that it is available.  This was fixed upstream in the default
  config for GRUB 2.14 but we cannot assume that the config change
  actually gets applied to existing installations.

- In an initramfs builder, we cannot assume that SimpleDRM will work
  just because the system boots with UEFI.

- Plymouth prefers not to use SimpleDRM devices.  This is because they
  might not be rotated or scaled properly, in which case the splash
  screen may change when the native graphics driver is loaded.  But
  the Fedora wiki page says the rotation and scaling issues have
  been mitigated.

## Implementation

It does not seem that we can safely make this change automatically on
upgrade.  It may be worth documenting how to opt-in to it in the
release notes and/or some package's NEWS file.

### Kernel

`CONFIG_SYSFB_SIMPLEFB` and `CONFIG_DRM_SIMPLE` must be enabled for all
relevant architectures.  The above merge request would do this on amd64.

### Initramfs

In initramfs-tools or plymouth, there should be a configuration option
that tells Plymouth to only include `drm_simple` (if modular) in the
initramfs, overriding `MODULES=most` for graphics drivers.

For dracut, there should be a similar configuration option that
overrides non-hostonly mode for graphics drivers.

### Installation

When booted through UEFI, the installer should:

- For itself:
  - Disable GRUB graphics drivers besides `efi_gop`:
    - Change `grub.cfg` in line with upstream changes
  
  - Disable kernel native graphics drivers.  This is not essential but
    it means that if SimpleDRM doesn't work the user will see this
    immediately rather than only after installation:
    - Add `nomodeset` to the kernel command lines in the GRUB menu

- For the installed system:
  - Configure Plymouth to use SimpleDRM devices:
    - Add `plymouth.use-simpledrm=y` to the kernel command line, or
      edit `plymouthd.conf`
  
  - Disable inclusion of additional graphics drivers in the initramfs
    - Set the configuration option added above

## Questions

What about sytsems with non-UEFI firmware (e.g. Coreboot) that sets up a
usable framebuffer?  Will they ever run the installer, or can we assume
they will be supported by images in which the above configuration should
be set up by the image builder?

-- 
Ben Hutchings - Debian developer, member of kernel, installer and LTS
teams

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to