Coreboot implements framebuffer support via simplefb. Provide a native DRM driver. Keep the simplefb code for now.
For each firmware's provided framebuffer, we want a dedicated DRM driver tailored towards the platform's feature set. The coreboot framebuffer device creates a simplefb device for the provided framebuffer. When the native graphics driver unloads the simplefb device, it leaves behind a dangling pointer in the coreboot framebuffer device. [1] This only works because the coreboot framebuffer device never runs this code; even after the native driver took over the hardware. At that point the underlying coreboot framebuffer is gone, which is inconsistent with kernel state. Additionally, the simplefb drivers handle simple-framebuffer nodes in the DeviceTree, but were not meant for supporting arbitrary framebuffers. The simplefb infrastructure should be phased out for non-DT use cases. Coreboot is one of the final users of the code (besides n64). Patches 1 to 4 of this series prepare the kernel's coreboot support for the DRM driver. With patch 1, the coreboot framebuffer device will only be created if it really handles the framebuffer. Some systems emulate UEFI instead. The other 3 patches make coreboot drivers available to other subsystems. A DRM driver will then be able to bind directly to a coreboot device. Patch 5 prepares the kernel's aperture helpers for coreboot devices. This is required to handover hardware to the native graphics driver. Patches 6 to 8 prepare DRM and add a new driver for the coreboot framebuffer. The corebootdrm driver follows the pattern established by similar drivers. It also uses the same sysfb helpers. It's fairly small therefore. Tested on an HP Chromebook with MrChromebox 4.16. Runs with Weston and fbcon. Xorg requires an additional patch available at [2]. [1] https://elixir.bootlin.com/linux/v6.18/source/drivers/firmware/google/framebuffer-coreboot.c#L92 [2] https://gitlab.freedesktop.org/tzimmermann/xserver/-/commit/0b326aad28549762ed2b0e2bedf8f8a42f1f6b3b Thomas Zimmermann (8): firmware: google: Do sysfb test before creating coreboot framebuffer firmware: google: Init coreboot bus with subsys_initcall() firmware: google: Clean up include statements in coreboot_table.h firmware: google: Export coreboot driver and device interfaces video/aperture: Support coreboot devices drm/sysfb: Remove duplicate declarations drm/sysfb: Generalize pixel-format matching drm/sysfb: corebootdrm: Add DRM driver for coreboot framebuffers drivers/firmware/google/Kconfig | 1 + drivers/firmware/google/cbmem.c | 4 +- drivers/firmware/google/coreboot_table.c | 33 +- .../firmware/google/framebuffer-coreboot.c | 20 +- drivers/firmware/google/memconsole-coreboot.c | 3 +- drivers/firmware/google/vpd.c | 3 +- drivers/gpu/drm/sysfb/Kconfig | 16 + drivers/gpu/drm/sysfb/Makefile | 1 + drivers/gpu/drm/sysfb/corebootdrm.c | 402 ++++++++++++++++++ drivers/gpu/drm/sysfb/drm_sysfb.c | 24 ++ drivers/gpu/drm/sysfb/drm_sysfb_helper.h | 17 +- drivers/gpu/drm/sysfb/drm_sysfb_screen_info.c | 30 -- drivers/gpu/drm/sysfb/efidrm.c | 8 +- drivers/gpu/drm/sysfb/vesadrm.c | 8 +- drivers/video/aperture.c | 60 ++- include/linux/aperture.h | 16 + .../linux/coreboot.h | 29 +- 17 files changed, 575 insertions(+), 100 deletions(-) create mode 100644 drivers/gpu/drm/sysfb/corebootdrm.c rename drivers/firmware/google/coreboot_table.h => include/linux/coreboot.h (86%) -- 2.52.0
