[Intel-gfx] [RFC 00/15] Atomic watermark updates

Matt Roper matthew.d.roper at intel.com
Wed May 20 19:12:12 PDT 2015


Here's an early RFC series for transitioning watermark updates to an atomic
model.  The general idea is that we want to move calculation of a pipe's
watermark values to the atomic check phase rather than doing it at the commit
stage as we do today, but we actually want to calculate two sets of values: a
"final" (i.e., optimal) set of watermark values, plus an "intermediate"
(transitional) set of values.  The intermediate watermark values are a
combination of the values for the old CRTC state and the new CRTC state so they
should be able to satisfy the needs of both configurations.  That means that
when we get to the atomic commit phase, we can immediately program the
intermediate watermark values without waiting for the vblank to happen.  Later,
when the vblank finally does happen, a workqueue task will be scheduled to
program the watermarks again, this time using the final, optimal values.

Watermark programming details vary wildly between the various platforms we
support.  For this initial RFC, I've only coverted ILK-style platforms to use
this new model (to keep the series simple, and because IVB, which uses
ILK-style watermarks, is the only platform I actually have available to test on
at the moment).  The behavior on platforms I haven't converted should remain
the same.

This series is still very rough and is definitely not ready for merging yet;
I'm just looking to get some feedback that the general approach looks good and
is the way we want to handle this.

One known issue at the moment is that this series has some issues when
disabling a CRTC while sprite planes are active; it seems our modeset code
isn't quite far enough along with the atomic conversion for the calculated
plane states to get properly swapped into plane->state at the commit stage.  I
know Maarten has a bunch of patches that clean up and pretty much finish the
atomic conversion for legacy modeset, so I suspect his series will solve this
issue.



Matt Roper (14):
  drm/i915: Test plane mask for sprite watermark updates properly
  drm/i915: Drop parameters to intel_update_sprite_watermarks()
  drm/i915: Update sprite watermarks outside vblank evasion
  drm/i915: Make atomic use in-flight state for CRTC active value (v2)
  drm/i915: Lookup CRTC for plane directly
  drm/i915: Eliminate usage of plane_wm_parameters from ILK-style WM
    code
  drm/i915: Eliminate usage of pipe_wm_parameters from ILK-style WM
  drm/i915: Allow ILK watermark computation to use atomic state
  drm/i915: Move active watermarks into CRTC state
  drm/i915: Calculate pipe watermark values during atomic check
  drm/i915: Actually use pre-computer watermark values (!!SQUASHME)
  drm/i915: Introduce intel_schedule_vblank_job()
  drm/i915: Program atomic watermarks via vblank job
  drm/i915: Add intermediate watermarks

Ville Syrjälä (1):
  drm/i915: Refactor ilk_update_wm (v3)

 drivers/gpu/drm/i915/i915_drv.h           |  16 ++
 drivers/gpu/drm/i915/i915_irq.c           | 117 ++++++++++
 drivers/gpu/drm/i915/intel_atomic.c       |  40 +++-
 drivers/gpu/drm/i915/intel_atomic_plane.c |  23 +-
 drivers/gpu/drm/i915/intel_display.c      | 147 +++++++++++--
 drivers/gpu/drm/i915/intel_drv.h          |  97 ++++++---
 drivers/gpu/drm/i915/intel_pm.c           | 345 +++++++++++++++++-------------
 drivers/gpu/drm/i915/intel_sprite.c       |  40 +---
 8 files changed, 584 insertions(+), 241 deletions(-)

-- 
1.8.5.1



More information about the Intel-gfx mailing list