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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx