[PATCH 00/18] drm: Provide helpers for system framebuffers and add efidrm/vesadrm
Thomas Zimmermann
tzimmermann at suse.de
Wed Mar 19 12:59:11 UTC 2025
Hi
Am 19.03.25 um 13:50 schrieb nerdopolis:
> On Wednesday, March 19, 2025 3:44:59 AM EDT Thomas Zimmermann wrote:
>> This series simplifies the existing ofdrm and simepldrm drivers,
>> and adds new drivers for EFI- and VESA-based framebuffers. Existing
>> drivers for system framebuffers, ofdrm and simpledrm, share much of
>> their mode-setting pipeline. The major difference between the two
>> drivers is in how they retrieve the framebuffer from the systems.
>> Hence, it makes sense to share some of the pipeline implementation.
>> With the shared helpers in place, we can then add dedicated drivers
>> for EFI and VESA easily.
>>
>> Patches 1 to 3 clean up obsolete artifacts from ofdrm and simpledrm.
>>
>> Patch 4 moves both drivers from tiny/ into their own subdirectory
>> sysfb/. The name aligns with the naming in drivers/firmware/sysfb.c
>> to signal the connection. It's the firmware code that creates most
>> of the system-framebuffer devices that these drivers operate on. The
>> patch also adds a separate menu in Kconfig.
>>
>> Patches 5 to 11 unify the mode-setting pipeline between ofdrm and
>> simpledrm. Either both drivers already use the same implementation
>> or they can easily do so. There've been previous attempts to unify
>> some of the drivers' code, but with little success. This time the
>> helpers will be shared among 4 drivers, so it's already much more
>> successful than before.
>>
>> Patch 12 adds EDID support to ofdrm. The EDID data can be found in
>> some Macintosh's DeviceTree next to the framebuffer configuration.
>> EDID support will be useful for EFI and VESA as well.
>>
>> Patch 13 adds another helper for screen_info that will be required
>> by EFI and VESA drivers.
>>
>> Patch 14 and 15 add efidrm, a DRM driver that operates on EFI-provided
>> framebuffers. It uses the shared sysfb helpers. The immediate benefit
>> over simpledrm is the support for EFI's various types of memory caching
>> on the framebuffer. Simpledrm only supported WriteCombine caching.
>> There's also EDID support if the kernel's edid_info has been initialized.
>> This feature needs to be implemented in the kernel's efistub library.
>>
>> Patches 16 to 18 add vesadrm, a DRM driver that operates in VESA-
>> provided framebuffers. It is very much like efidrm, but tailored
>> towards VESA features. It has EDID support and there's a patch at [1]
>> for grub to provide the data as part of the kernel's boot parameters.
>> Vesadrm also supports gamma ramps. Together with EDID, this allows
>> for gamma correction and night mode. Gnome already does that.
>>
>> Future directions: Efidrm requires EDID data that has to be provided
>> by the efistub library. There is an EFI call to do so. Vesadrm currently
>> requires a discrete color mode. Support for palette modes can be added
>> later. There's still a bit of code duplication among palette handling.
>> We have more drivers that use similar code for palette LUTs, such as
>> ast and mgag200. We should try to provide generic palette helpers for
>> all these drivers.
>>
>> This series has been tested on various devices that require the provided
>> drivers.
>>
>> [1] https://build.opensuse.org/projects/home:tdz:branches:Base:System/packages/grub2/files/grub2-provide-edid.patch?expand=1
>>
>> Thomas Zimmermann (18):
>> drm/ofdrm: Remove struct ofdrm_device.pdev
>> drm/ofdrm: Open-code drm_simple_encoder_init()
>> drm/simpledrm: Remove struct simpledrm_device.nformats
>> drm: Move sysfb drivers into separate subdirectory
>> drm/sysfb: Add struct drm_sysfb_device
>> drm/sysfb: Provide single mode-init helper
>> drm/sysfb: Merge mode-config functions
>> drm/sysfb: Merge connector functions
>> drm/sysfb: Maintain CRTC state in struct drm_sysfb_crtc_state
>> drm/sysfb: Merge CRTC functions
>> drm/sysfb: Merge primary-plane functions
>> drm/sysfb: ofdrm: Add EDID support
>> firmware: sysfb: Move bpp-depth calculation into screen_info helper
>> drm/sysfb: Add efidrm for EFI displays
>> drm/sysfb: efidrm: Add EDID support
>> drm/sysfb: Add vesadrm for VESA displays
>> drm/sysfb: vesadrm: Add EDID support
>> drm/sysfb: vesadrm: Add gamma correction
>>
>> MAINTAINERS | 3 +-
>> drivers/firmware/sysfb_simplefb.c | 31 +-
>> drivers/gpu/drm/Kconfig | 2 +
>> drivers/gpu/drm/Makefile | 1 +
>> drivers/gpu/drm/sysfb/Kconfig | 76 +++
>> drivers/gpu/drm/sysfb/Makefile | 8 +
>> drivers/gpu/drm/sysfb/drm_sysfb_helper.c | 319 ++++++++++
>> drivers/gpu/drm/sysfb/drm_sysfb_helper.h | 136 ++++
>> drivers/gpu/drm/sysfb/efidrm.c | 495 +++++++++++++++
>> drivers/gpu/drm/{tiny => sysfb}/ofdrm.c | 364 ++---------
>> drivers/gpu/drm/{tiny => sysfb}/simpledrm.c | 237 +------
>> drivers/gpu/drm/sysfb/vesadrm.c | 660 ++++++++++++++++++++
>> drivers/gpu/drm/tiny/Kconfig | 32 -
>> drivers/gpu/drm/tiny/Makefile | 2 -
>> drivers/video/screen_info_generic.c | 36 ++
>> include/linux/screen_info.h | 9 +
>> include/video/pixel_format.h | 41 ++
>> 17 files changed, 1885 insertions(+), 567 deletions(-)
>> create mode 100644 drivers/gpu/drm/sysfb/Kconfig
>> create mode 100644 drivers/gpu/drm/sysfb/Makefile
>> create mode 100644 drivers/gpu/drm/sysfb/drm_sysfb_helper.c
>> create mode 100644 drivers/gpu/drm/sysfb/drm_sysfb_helper.h
>> create mode 100644 drivers/gpu/drm/sysfb/efidrm.c
>> rename drivers/gpu/drm/{tiny => sysfb}/ofdrm.c (75%)
>> rename drivers/gpu/drm/{tiny => sysfb}/simpledrm.c (76%)
>> create mode 100644 drivers/gpu/drm/sysfb/vesadrm.c
>> create mode 100644 include/video/pixel_format.h
>>
>>
> FYI When this gets merged,
> https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/hw/xfree86/common/xf86platformBus.c?ref_type=heads#L589
> might need to be updated to add exceptions for vesadrm and efidrm like there
> is for simpledrm.
Yeah, we need a workaround for each of these drivers unfortunately.
> I am willing to open a merge request, but freedesktop is readonly for now
> during their migration.
No worries, I'll provide the patches.
Best regards
Thomas
>
>
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
More information about the dri-devel
mailing list