linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/10] drm: Support simple-framebuffer devices and firmware fbs
@ 2021-03-18 10:29 Thomas Zimmermann
  2021-03-18 10:29 ` [PATCH v2 01/10] drm/format-helper: Pass destination pitch to drm_fb_memcpy_dstclip() Thomas Zimmermann
                   ` (10 more replies)
  0 siblings, 11 replies; 35+ messages in thread
From: Thomas Zimmermann @ 2021-03-18 10:29 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, kraxel, corbet,
	lgirdwood, broonie, sam, robh, emil.l.velikov, geert+renesas,
	hdegoede, bluescreen_avenger
  Cc: dri-devel, linux-doc, virtualization, Thomas Zimmermann

This patchset adds support for simple-framebuffer platform devices and
a handover mechanism for native drivers to take-over control of the
hardware.

The new driver, called simpledrm, binds to a simple-frambuffer platform
device. The kernel's boot code creates such devices for firmware-provided
framebuffers, such as EFI-GOP or VESA. Typically the BIOS, UEFI or boot
loader sets up the framebuffers. Description via device tree is also an
option.

Simpledrm is small enough to be linked into the kernel. The driver's main
purpose is to provide graphical output during the early phases of the boot
process, before the native DRM drivers are available. Native drivers are
typically loaded from an initrd ram disk. Occationally simpledrm can also
serve as interim solution on graphics hardware without native DRM driver.

So far distributions rely on fbdev drivers, such as efifb, vesafb or
simplefb, for early-boot graphical output. However fbdev is deprecated and
the drivers do not provide DRM interfaces for modern userspace.

Patches 1 and 2 prepare the DRM format helpers for simpledrm.

Patches 3 and 4 add a hand-over mechanism. Simpledrm acquires it's
framebuffer's I/O-memory range and provides a callback function to be
removed by a native driver. The native driver will remove simpledrm before
taking over the hardware. The removal is integrated into existing helpers,
so drivers use it automatically.

Patches 5 to 10 add the simpledrm driver. It's build on simple DRM helpers
and SHMEM. It supports 16-bit, 24-bit and 32-bit RGB framebuffers. During
pageflips, SHMEM buffers are copied into the framebuffer memory, similar
to cirrus or mgag200. The code in patches 8 and 9 handles clocks and
regulators. It's based on the simplefb drivers, but has been modified for
DRM.

I've also been working on fastboot support (i.e., flicker-free booting).
This requires state-readout from simpledrm via generic interfaces, as
outlined in [1]. I do have some prototype code, but it will take a while
to get this ready. Simpledrm will then support it.

I've tested simpledrm with x86 EFI and VESA framebuffers, which both work
reliably. The fbdev console and Weston work automatically. Xorg requires
manual configuration of the device. Xorgs current modesetting driver does
not work with both, platform and PCI device, for the same physical
hardware. Once configured, X11 works. I looked into X11, but couldn't see
an easy way of fixing the problem. With the push towards Wayland+Xwayland
I expect the problem to become a non-issue soon. Additional testing has
been reported at [2].

One cosmetical issue is that simpledrm's device file is card0 and the
native driver's device file is card1. After simpledrm has been kicked out,
only card1 is left. This does not seem to be a practical problem however.

TODO/IDEAS:

	* provide deferred takeover
	* provide bootsplash DRM client
	* make simplekms usable with ARM-EFI fbs

v2:
	* rename to simpledrm, aperture helpers
	* reorganized patches
	* use hotplug helpers for removal (Daniel)
	* added DT match tables (Rob)
	* use shadow-plane helpers
	* lots of minor cleanups

[1] https://lore.kernel.org/dri-devel/CAKMK7uHtqHy_oz4W7F+hmp9iqp7W5Ra8CxPvJ=9BwmvfU-O0gg@mail.gmail.com/
[2] https://lore.kernel.org/dri-devel/1761762.3HQLrFs1K7@nerdopolis/

Thomas Zimmermann (10):
  drm/format-helper: Pass destination pitch to drm_fb_memcpy_dstclip()
  drm/format-helper: Add blitter functions
  drm/aperture: Move fbdev conflict helpers into drm_aperture.h
  drm/aperture: Add infrastructure for aperture ownership
  drm: Add simpledrm driver
  drm/simpledrm: Add fbdev emulation
  drm/simpledrm: Initialize framebuffer data from device-tree node
  drm/simpledrm: Acquire clocks from DT device node
  drm/simpledrm: Acquire regulators from DT device node
  drm/simpledrm: Acquire memory aperture for framebuffer

 Documentation/gpu/drm-internals.rst    |  12 +
 MAINTAINERS                            |   7 +
 drivers/gpu/drm/Kconfig                |   7 +
 drivers/gpu/drm/Makefile               |   1 +
 drivers/gpu/drm/drm_aperture.c         | 287 ++++++++
 drivers/gpu/drm/drm_format_helper.c    |  96 ++-
 drivers/gpu/drm/mgag200/mgag200_mode.c |   2 +-
 drivers/gpu/drm/tiny/Kconfig           |  17 +
 drivers/gpu/drm/tiny/Makefile          |   1 +
 drivers/gpu/drm/tiny/cirrus.c          |   2 +-
 drivers/gpu/drm/tiny/simpledrm.c       | 932 +++++++++++++++++++++++++
 include/drm/drm_aperture.h             |  96 +++
 include/drm/drm_fb_helper.h            |  56 +-
 include/drm/drm_format_helper.h        |  10 +-
 14 files changed, 1466 insertions(+), 60 deletions(-)
 create mode 100644 drivers/gpu/drm/drm_aperture.c
 create mode 100644 drivers/gpu/drm/tiny/simpledrm.c
 create mode 100644 include/drm/drm_aperture.h

--
2.30.1


^ permalink raw reply	[flat|nested] 35+ messages in thread

end of thread, other threads:[~2021-04-16  8:42 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-18 10:29 [PATCH v2 00/10] drm: Support simple-framebuffer devices and firmware fbs Thomas Zimmermann
2021-03-18 10:29 ` [PATCH v2 01/10] drm/format-helper: Pass destination pitch to drm_fb_memcpy_dstclip() Thomas Zimmermann
2021-03-18 10:29 ` [PATCH v2 02/10] drm/format-helper: Add blitter functions Thomas Zimmermann
2021-03-18 10:29 ` [PATCH v2 03/10] drm/aperture: Move fbdev conflict helpers into drm_aperture.h Thomas Zimmermann
2021-04-08  9:50   ` Daniel Vetter
2021-04-09  7:09     ` Thomas Zimmermann
2021-03-18 10:29 ` [PATCH v2 04/10] drm/aperture: Add infrastructure for aperture ownership Thomas Zimmermann
2021-04-08  9:48   ` Daniel Vetter
2021-04-09  7:06     ` Thomas Zimmermann
2021-04-09  9:22       ` Daniel Vetter
2021-04-15  6:56         ` Thomas Zimmermann
2021-04-15 12:57           ` Daniel Vetter
2021-04-15 19:12             ` Thomas Zimmermann
2021-04-16  8:42               ` Daniel Vetter
2021-04-09  7:54     ` Thomas Zimmermann
2021-04-09  9:29       ` Daniel Vetter
2021-03-18 10:29 ` [PATCH v2 05/10] drm: Add simpledrm driver Thomas Zimmermann
2021-03-18 10:29 ` [PATCH v2 06/10] drm/simpledrm: Add fbdev emulation Thomas Zimmermann
2021-03-18 10:29 ` [PATCH v2 07/10] drm/simpledrm: Initialize framebuffer data from device-tree node Thomas Zimmermann
2021-03-18 10:29 ` [PATCH v2 08/10] drm/simpledrm: Acquire clocks from DT device node Thomas Zimmermann
2021-03-18 10:39   ` Geert Uytterhoeven
2021-03-18 11:00     ` Thomas Zimmermann
2021-04-08  8:13   ` Maxime Ripard
2021-04-15  7:31     ` Thomas Zimmermann
2021-04-15  9:21       ` Maxime Ripard
2021-04-15 11:02         ` Thomas Zimmermann
2021-04-15 12:11           ` maxime
2021-03-18 10:29 ` [PATCH v2 09/10] drm/simpledrm: Acquire regulators " Thomas Zimmermann
2021-03-18 10:29 ` [PATCH v2 10/10] drm/simpledrm: Acquire memory aperture for framebuffer Thomas Zimmermann
2021-03-25 11:29 ` [PATCH v2 00/10] drm: Support simple-framebuffer devices and firmware fbs Hans de Goede
2021-03-29 12:31   ` Thomas Zimmermann
2021-03-29 14:50     ` Hans de Goede
2021-03-30  7:09       ` Thomas Zimmermann
2021-03-30  8:34         ` Hans de Goede
2021-04-08 10:14           ` Daniel Vetter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).