linux/include/drm
Daniel Vetter c2fcd274bc drm: Add atomic/plane helpers
This is the first cut of atomic helper code. As-is it's only useful to
implement a pure atomic interface for plane updates.

Later patches will integrate this with the crtc helpers so that full
atomic updates are possible. We also need a pile of helpers to aid
drivers in transitioning from the legacy world to the shiny new atomic
age. Finally we need helpers to implement legacy ioctls on top of the
atomic interface.

The design of the overall helpers<->driver interaction is fairly
simple, but has an unfortunate large interface:

- We have ->atomic_check callbacks for crtcs and planes. The idea is
  that connectors don't need any checking, and if they do they can
  adjust the relevant crtc driver-private state. So no connector hooks
  should be needed. Also the crtc helpers integration will do the
  ->best_encoder checks, so no need for that.

- Framebuffer pinning needs to be done before we can commit to the hw
  state. This is especially important for async updates where we must
  pin all buffers before returning to userspace, so that really only
  hw failures can happen in the asynchronous worker.

  Hence we add ->prepare_fb and ->cleanup_fb hooks for this resources
  management.

- The actual atomic plane commit can't fail (except hw woes), so has
  void return type. It has three stages:
  1. Prepare all affected crtcs with crtc->atomic_begin. Drivers can
     use this to unset the GO bit or similar latches to prevent plane
     updates.
  2. Update plane state by looping over all changed planes and calling
     plane->atomic_update. Presuming the hardware is sane and has GO
     bits drivers can simply bash the state into the hardware in this
     function. Other drivers might use this to precompute hw state for
     the final step.
  3. Finally latch the update for the next vblank with
     crtc->atomic_flush. Note that this function doesn't need to wait
     for the vblank to happen even for the synchronous case.

v2: Clear drm_<obj>_state->state to NULL when swapping in state.

v3: Add TODO that we don't short-circuit plane updates for now. Likely
no one will care.

v4: Squash in a bit of polish that somehow landed in the wrong (later)
patche.

v5: Integrate atomic functions into the drm docbook and fixup the
kerneldoc.

v6: Fixup fixup patch squashing fumble.

v7: Don't touch the legacy plane state plane->fb and plane->crtc. This
is only used by the legacy ioctl code in the drm core, and that code
already takes care of updating the pointers in all relevant cases.
This is in stark contrast to connector->encoder->crtc links on the
modeset side, which we still need to set since the core doesn't touch
them.

Also some more kerneldoc polish.

v8: Drop outdated comment.

v9: Handle the state->state pointer correctly: Only clearing the
->state pointer when assigning the state to the kms object isn't good
enough. We also need to re-link the swapped out state into the
drm_atomic_state structure.

v10: Shuffle the misplaced docbook template hunk around that Sean spotted.

Cc: Sean Paul <seanpaul@chromium.org>
Reviewed-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2014-11-05 18:07:01 +01:00
..
bridge drm/bridge/ptn3460: fix modular build 2014-03-24 09:21:15 +10:00
i2c drm/i2c: tda998x: add video and audio input configuration 2013-08-19 09:10:32 +10:00
ttm drm/ttm: add reservation_object as argument to ttm_bo_init 2014-09-30 14:04:00 +02:00
ati_pcigart.h drm: Move legacy buffer structures to <drm/drm_legacy.h> 2014-09-12 15:28:12 +02:00
drm_agpsupport.h drm: move remaining includes in drmP.h to the top 2014-09-10 17:42:03 +10:00
drm_atomic_helper.h drm: Add atomic/plane helpers 2014-11-05 18:07:01 +01:00
drm_atomic.h drm: Global atomic state handling 2014-11-05 18:05:36 +01:00
drm_cache.h
drm_core.h drm: Fix support for PCI domains 2010-08-10 08:20:20 +10:00
drm_crtc_helper.h drm: Add atomic/plane helpers 2014-11-05 18:07:01 +01:00
drm_crtc.h drm: Add atomic/plane helpers 2014-11-05 18:07:01 +01:00
drm_dp_helper.h drm/i915: Fix Sink CRC 2014-09-30 09:18:37 +02:00
drm_dp_mst_helper.h drm/mst: rework payload table allocation to conform better. 2014-10-13 14:40:53 +10:00
drm_edid.h drm/edid: Parse and handle HDMI deep color modes. 2014-06-02 18:37:34 -04:00
drm_encoder_slave.h drm: i2c encoder helper wrappers 2013-02-17 17:55:42 -05:00
drm_fb_cma_helper.h drm: Make drm_fb_cma_describe() static 2013-08-21 12:47:41 +10:00
drm_fb_helper.h drm: Perform cmdline mode parsing during connector initialisation 2014-08-06 14:50:12 +02:00
drm_fixed.h drm: fix 64 bit drm fixed point helpers 2013-07-30 17:24:13 -04:00
drm_flip_work.h drm: Fixup flip-work kerneldoc 2014-04-29 12:33:35 +02:00
drm_gem_cma_helper.h drm: Pass dma-buf as argument to gem_prime_import_sg_table 2014-09-30 14:04:00 +02:00
drm_gem.h drm: Extract <drm/drm_gem.h> 2014-09-24 11:43:41 +10:00
drm_global.h
drm_hashtab.h drm: Add a hash-tab rcu-safe API 2012-11-28 18:36:05 +10:00
drm_legacy.h drm: move drm_mmap to <drm/drm_legacy.h> 2014-09-24 11:43:07 +10:00
drm_mem_util.h introduce SIZE_MAX 2012-05-31 17:49:26 -07:00
drm_mipi_dsi.h drm/mipi-dsi: consider low power transmission 2014-09-20 00:56:08 +09:00
drm_mm.h drm: Add support for two-ended allocation, v3 2014-04-04 09:28:14 +10:00
drm_modes.h drm: try harder to avoid regression when merging mode bits 2014-05-01 09:26:53 +10:00
drm_modeset_lock.h drm/modeset_lock: document trylock_only in kerneldoc 2014-11-05 17:23:16 +01:00
drm_of.h drm: add of_graph endpoint helper to find possible CRTCs 2014-07-11 15:38:28 +01:00
drm_os_linux.h drm: Kill DRM_SUSER 2013-12-18 11:35:45 +10:00
drm_panel.h drm/panel: Provide convenience wrapper for .get_modes() 2014-08-06 16:44:09 +02:00
drm_pciids.h drm/radeon: add additional SI pci ids 2014-08-22 10:47:59 -04:00
drm_plane_helper.h drm: Add atomic/plane helpers 2014-11-05 18:07:01 +01:00
drm_rect.h drm: Add drm_rect rotation functions 2014-07-11 23:44:12 +02:00
drm_sysfs.h
drm_vma_manager.h drm: init TTM dev_mapping in ttm_bo_device_init() 2014-03-16 12:23:42 +01:00
drmP.h drm: Pass dma-buf as argument to gem_prime_import_sg_table 2014-09-30 14:04:00 +02:00
exynos_drm.h drm/exynos: fimd: replace struct fb_videomode with videomode 2013-09-05 13:43:44 +09:00
gma_drm.h drm/gma500: Remove unused ioctls 2014-03-17 20:11:57 +01:00
i915_drm.h x86/gpu: Add Intel graphics stolen memory quirk for gen2 platforms 2014-02-09 15:11:30 +01:00
i915_pciids.h drm/i915/skl: Add the Skylake PCI ids 2014-09-24 14:32:14 +02:00
i915_powerwell.h drm/i915: provide interface for audio driver to query cdclk 2014-07-04 07:46:09 +02:00
intel-gtt.h drm/i915: Fix gen2 mappable calculations 2013-02-15 10:30:38 +01:00