Commit c8a17756 authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

drm/ofdrm: Add ofdrm for Open Firmware framebuffers



Open Firmware provides basic display output via the 'display' node.
DT platform code already provides a device that represents the node's
framebuffer. Add a DRM driver for the device. The display mode and
color format is pre-initialized by the system's firmware. Runtime
modesetting via DRM is not possible. The display is useful during
early boot stages or as error fallback.

Similar functionality is already provided by fbdev's offb driver,
which is insufficient for modern userspace. The old driver includes
support for BootX device tree, which can be found on old 32-bit
PowerPC Macintosh systems. If these are still in use, the
functionality can be added to ofdrm or implemented in a new
driver. As with simpledrm, the fbdev driver cannot be selected if
ofdrm is already enabled.

Two notable points about the driver:

 * Reading the framebuffer aperture from the device tree is not
reliable on all systems. Ofdrm takes the heuristics and a comment
from offb to pick the correct range.

 * No resource management may be tied to the underlying PCI device.
Otherwise the handover to the native driver will fail with a resource
conflict. PCI management is therefore done as part of the platform
device's cleanup.

The driver has been tested on qemu's ppc64le emulation. The device
hand-over has been tested with bochs.

v5:
	* use drm_atomic_helper_check_crtc_primary_plane()
v4:
	* set preferred depth to the correct value
	* set bpp value for console emulation
	* output scanout-buffer parameters with drm_dbg()
v3:
	* reintegrate FWFB helpers into ofdrm
	* use damage iterator
	* sync GEM BOs with drm_gem_fb_{begin,end}_cpu_access()
	* fix various atomic_check helpers
	* remove CRTC atomic_{enable,disable} (Javier)
	* compute stride with drm_format_info_min_pitch() (Daniel)
v2:
	* removed simple-pipe helpers
	* built driver on top of FWFB helpers
	* merged all init code into single function
	* make PCI support optional (Michal)
	* support COMPILE_TEST (Javier)

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>

convert
Link: https://patchwork.freedesktop.org/patch/msgid/20221011150712.3928-2-tzimmermann@suse.de
parent 9a0cdcd6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -6653,6 +6653,7 @@ L: dri-devel@lists.freedesktop.org
S:	Maintained
T:	git git://anongit.freedesktop.org/drm/drm-misc
F:	drivers/gpu/drm/drm_aperture.c
F:	drivers/gpu/drm/tiny/ofdrm.c
F:	drivers/gpu/drm/tiny/simpledrm.c
F:	drivers/video/aperture.c
F:	include/drm/drm_aperture.h
+13 −0
Original line number Diff line number Diff line
@@ -51,6 +51,19 @@ config DRM_GM12U320
	 This is a KMS driver for projectors which use the GM12U320 chipset
	 for video transfer over USB2/3, such as the Acer C120 mini projector.

config DRM_OFDRM
	tristate "Open Firmware display driver"
	depends on DRM && OF && (PPC || COMPILE_TEST)
	select APERTURE_HELPERS
	select DRM_GEM_SHMEM_HELPER
	select DRM_KMS_HELPER
	help
	  DRM driver for Open Firmware framebuffers.

	  This driver assumes that the display hardware has been initialized
	  by the Open Firmware before the kernel boots. Scanout buffer, size,
	  and display format must be provided via device tree.

config DRM_PANEL_MIPI_DBI
	tristate "DRM support for MIPI DBI compatible panels"
	depends on DRM && SPI
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ obj-$(CONFIG_DRM_ARCPGU) += arcpgu.o
obj-$(CONFIG_DRM_BOCHS)			+= bochs.o
obj-$(CONFIG_DRM_CIRRUS_QEMU)		+= cirrus.o
obj-$(CONFIG_DRM_GM12U320)		+= gm12u320.o
obj-$(CONFIG_DRM_OFDRM)			+= ofdrm.o
obj-$(CONFIG_DRM_PANEL_MIPI_DBI)	+= panel-mipi-dbi.o
obj-$(CONFIG_DRM_SIMPLEDRM)		+= simpledrm.o
obj-$(CONFIG_TINYDRM_HX8357D)		+= hx8357d.o
+763 −0

File added.

Preview size limit exceeded, changes collapsed.

+1 −0
Original line number Diff line number Diff line
@@ -455,6 +455,7 @@ config FB_ATARI
config FB_OF
	bool "Open Firmware frame buffer device support"
	depends on (FB = y) && PPC && (!PPC_PSERIES || PCI)
	depends on !DRM_OFDRM
	select APERTURE_HELPERS
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA