Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd5351f4 authored by Rob Clark's avatar Rob Clark Committed by Greg Kroah-Hartman
Browse files

staging: add omapdrm DRM/KMS driver for TI OMAP platforms

A DRM display driver for TI OMAP platform.  Similar to omapfb (fbdev)
and omap_vout (v4l2 display) drivers in the past, this driver uses the
DSS2 driver to access the display hardware, including support for
HDMI, DVI, and various types of LCD panels.  And it implements GEM
support for buffer allocation (for KMS as well as offscreen buffers
used by the xf86-video-omap userspace xorg driver).

The driver maps CRTCs to overlays, encoders to overlay-managers, and
connectors to dssdev's.  Note that this arrangement might change slightly
when support for drm_plane overlays is added.

For GEM support, non-scanout buffers are using the shmem backed pages
provided by GEM core (In drm_gem_object_init()).  In the case of scanout
buffers, which need to be physically contiguous, those are allocated
with CMA and use drm_gem_private_object_init().

See userspace xorg driver:
git://github.com/robclark/xf86-video-omap.git

Refer to this link for CMA (Continuous Memory Allocator):
http://lkml.org/lkml/2011/8/19/302

Links to previous versions of the patch:
v1: http://lwn.net/Articles/458137/
v2: http://patches.linaro.org/4156/
v3: http://patches.linaro.org/4688/
v4: http://patches.linaro.org/4791/



History:

v5: move headers from include/drm at Greg KH's request, minor rebasing
    on 3.2-rc1, pull in private copies of drm_gem_{get,put}_pages()
    because "drm/gem: add functions to get/put pages" patch is not
    merged yet
v4: bit of rework of encoder/connector _dpms() code, modeset_init()
    rework to not use nested functions, update TODO.txt
v3: minor cleanups, improved error handling for dev_load(), some minor
    API changes that will be needed later for tiled buffer support
v2: replace omap_vram with CMA for scanout buffer allocation, remove
    unneeded functions, use dma_addr_t for physical addresses, error
    handling cleanup, refactor attach/detach pages into common drm
    functions, split non-userspace-facing API into omap_priv.h, remove
    plugin API

v1: original

Signed-off-by: default avatarRob Clark <rob@ti.com>
Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent be7f39c5
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -130,4 +130,6 @@ source "drivers/staging/nvec/Kconfig"

source "drivers/staging/media/Kconfig"

source "drivers/staging/omapdrm/Kconfig"

endif # STAGING
+1 −0
Original line number Diff line number Diff line
@@ -56,3 +56,4 @@ obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4) += ste_rmi4/
obj-$(CONFIG_DRM_PSB)		+= gma500/
obj-$(CONFIG_INTEL_MEI)		+= mei/
obj-$(CONFIG_MFD_NVEC)		+= nvec/
obj-$(CONFIG_DRM_OMAP)		+= omapdrm/
+25 −0
Original line number Diff line number Diff line

config DRM_OMAP
	tristate "OMAP DRM"
	depends on DRM && !CONFIG_FB_OMAP2
	depends on ARCH_OMAP2PLUS
	select DRM_KMS_HELPER
	select OMAP2_DSS
	select FB_SYS_FILLRECT
	select FB_SYS_COPYAREA
	select FB_SYS_IMAGEBLIT
	select FB_SYS_FOPS
	default n
	help
	  DRM display driver for OMAP2/3/4 based boards.

config DRM_OMAP_NUM_CRTCS
	int "Number of CRTCs"
	range 1 10
	default 1  if ARCH_OMAP2 || ARCH_OMAP3
	default 2  if ARCH_OMAP4
	depends on DRM_OMAP
	help
	  Select the number of video overlays which can be used as framebuffers.
	  The remaining overlays are reserved for video.
+12 −0
Original line number Diff line number Diff line
#
# Makefile for the drm device driver.  This driver provides support for the
# Direct Rendering Infrastructure (DRI)
#

ccflags-y := -Iinclude/drm -Werror
omapdrm-y := omap_drv.o omap_crtc.o omap_encoder.o omap_connector.o omap_fb.o omap_fbdev.o omap_gem.o

# temporary:
omapdrm-y += omap_gem_helpers.o

obj-$(CONFIG_DRM_OMAP)	+= omapdrm.o
+32 −0
Original line number Diff line number Diff line
TODO
. check error handling/cleanup paths
. add drm_plane / overlay support
. add video decode/encode support (via syslink3 + codec-engine)
. still some rough edges with flipping.. event back to userspace should
  really come after VSYNC interrupt
. where should we do eviction (detatch_pages())?  We aren't necessarily
  accessing the pages via a GART, so maybe we need some other threshold
  to put a cap on the # of pages that can be pin'd.  (It is mostly only
  of interest in case you have a swap partition/file.. which a lot of
  these devices do not.. but it doesn't hurt for the driver to do the
  right thing anyways.)
  . Use mm_shrinker to trigger unpinning pages.  Need to figure out how
    to handle next issue first (I think?)
  . Note TTM already has some mm_shrinker stuff..  maybe an argument to
    move to TTM?  Or maybe something that could be factored out in common?
. GEM/shmem backed pages can have existing mappings (kernel linear map,
  etc..), which isn't really ideal.
. Revisit GEM sync object infrastructure.. TTM has some framework for this
  already.  Possibly this could be refactored out and made more common?
  There should be some way to do this with less wheel-reinvention.
. Review DSS vs KMS mismatches.  The omap_dss_device is sort of part encoder,
  part connector.  Which results in a bit of duct tape to fwd calls from
  encoder to connector.  Possibly this could be done a bit better.

Userspace:
. git://github.com/robclark/xf86-video-omap.git

Currently tested on
. OMAP3530 beagleboard
. OMAP4430 pandaboard
. OMAP4460 pandaboard
Loading