[PATCH v3 0/3] drm: add SimpleDRM driver

Noralf Trønnes
2016-08-14T16:52:26Z

This patchset adds the simpledrm driver by David Herrmann based on a
patchset[1] from 2014. That patchset also included patches for kicking
out simpledrm by real drivers. I have stayed away from that since it
involves another subsystem and I would probably be unable to answer any
questions about the implementation.

Two main changes in this third version:

Paul Gortmaker pointed out that module.h pulls in 750k and is best
avoided when not necessary. All the source files included it, but only
one needed it. I the same spirit I moved the includes I could from the
header file to the respective source files.

The panic handling I'm working on requires an enabled pipeline to work,
so I have switched the fbdev code to use the drm fb helper. Maybe not
strictly necessary since fbcon can output panic messages, but it gave
me an excuse to do it, making the fbdev code "drm standard".

I have tested simpledrm on a Raspberry Pi B+ with U-boot setting up the
framebuffer and producing this node (legacy, not under /chosen):

/ {
framebuffer@1e887000 {
compatible = "simple-framebuffer";
reg = <0x1e887000 0x36c600>;
format = "r5g6b5";
width = <1824>;
height = <984>;
stride = <3648>;
status = "okay";
};

I have only tested with fbcon and modetest (XR24,RG16).

Noralf.

Changes from version 2:
- Remove superfluos module.h includes
- Move includes from header to source files
- Set plane.fb before flushing in pipe update, or else the previous one
gets flushed
- Added check for vblank event in sdrm_display_pipe_update()
fbdev:
- Switch to using drm_fb_helper in preparation for future panic handling
which needs an enabled pipeline.
- Don't forget to free fb_info when kicked out.

Changes from version 1:
- Move platform_set_drvdata() before drm_dev_register()
- Remove drm_legacy_mmap() call.
- Set mode_config.{min,max}_{width,height} to the actual dimensions
of the native framebuffer
- Remove plane positioning since it won't work with the simple display pipe,
meaning sdrm_display_pipe_check() isn't necessary either
- Support the additions to the Device Tree binding document, including
clocks, regulators and having the node under /chosen
fbdev:
- Honour remove_conflicting_framebuffers()

Changes from previous version[2]:
- Remove FB_SIMPLE=n dependency to avoid kconfig recursive error
- Changed module name to match kconfig help text: sdrm -> simpledrm
- Use drm_simple_display_pipe
- Replace deprecated drm_platform_init()
- sdrm_dumb_create(): drm_gem_object_unreference() -> *_unlocked()
- sdrm_dumb_map_offset(): drm_gem_object_lookup() remove drm_device parameter
- sdrm_drm_mmap() changes:
Remove struct_mutex locking
Add drm_vma_offset_{lock,unlock}_lookup()
drm_mmap() -> drm_legacy_mmap()
- dma_buf_begin_cpu_access() doesn't require start and length anymore
- Use drm_cvt_mode() instead of open coding a mode
- Fix format conversion. In the intermediate step, store the 8/6/5 bit color
value in the upper part of the 16-bit color variable, not the lower.
- Support clips == NULL in sdrm_dirty()
- Set mode_config.preferred_depth
- Attach mode_config.dirty_info_property to connector
fbdev:
- Remove the DRM_SIMPLEDRM_FBDEV kconfig option and use DRM_FBDEV_EMULATION
- Suspend fbcon/fbdev when the pipeline is enabled, resume in lastclose
- Add FBINFO_CAN_FORCE_OUTPUT flag so we get oops'es on the console

[1] https://lists.freedesktop.org/archives/dri-devel/2014-January/052584.html
[2] https://lists.freedesktop.org/archives/dri-devel/2014-January/052594.html

Further history:

[PATCH v4 0/6] SimpleDRM Driver
https://lists.freedesktop.org/archives/dri-devel/2013-September/044638.html

[PATCH v2 00/14] Platform Framebuffers and SimpleDRM
https://lists.freedesktop.org/archives/dri-devel/2013-July/041090.html

[RFC 0/6] SimpleDRM Driver (was: dvbe driver)
https://lists.freedesktop.org/archives/dri-devel/2013-June/040386.html

[PATCH 0/9] System Framebuffer Bus (sysfb)
https://lists.freedesktop.org/archives/dri-devel/2013-February/035013.html

Noralf Trønnes (3):
drm: add SimpleDRM driver
drm: simpledrm: add fbdev fallback support
drm: simpledrm: honour remove_conflicting_framebuffers()

drivers/gpu/drm/Kconfig | 2 +
drivers/gpu/drm/Makefile | 1 +
drivers/gpu/drm/simpledrm/Kconfig | 27 ++
drivers/gpu/drm/simpledrm/Makefile | 5 +
drivers/gpu/drm/simpledrm/simpledrm.h | 129 +++++++
drivers/gpu/drm/simpledrm/simpledrm_damage.c | 302 +++++++++++++++
drivers/gpu/drm/simpledrm/simpledrm_drv.c | 546 +++++++++++++++++++++++++++
drivers/gpu/drm/simpledrm/simpledrm_fbdev.c | 252 +++++++++++++
drivers/gpu/drm/simpledrm/simpledrm_gem.c | 274 ++++++++++++++
drivers/gpu/drm/simpledrm/simpledrm_kms.c | 266 +++++++++++++
10 files changed, 1804 insertions(+)
create mode 100644 drivers/gpu/drm/simpledrm/Kconfig
create mode 100644 drivers/gpu/drm/simpledrm/Makefile
create mode 100644 drivers/gpu/drm/simpledrm/simpledrm.h
create mode 100644 drivers/gpu/drm/simpledrm/simpledrm_damage.c
create mode 100644 drivers/gpu/drm/simpledrm/simpledrm_drv.c
create mode 100644 drivers/gpu/drm/simpledrm/simpledrm_fbdev.c
create mode 100644 drivers/gpu/drm/simpledrm/simpledrm_gem.c
create mode 100644 drivers/gpu/drm/simpledrm/simpledrm_kms.c

--
2.8.2