提交 2b4b9f35 编写于 作者: M Matt Roper

drm/i915/gen9: Use a bitmask to track dirty pipe watermarks

Slightly easier to work with than an array of bools.
Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
Reviewed-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-14-git-send-email-matthew.d.roper@intel.com
上级 f4a96752
...@@ -1598,7 +1598,7 @@ struct skl_ddb_allocation { ...@@ -1598,7 +1598,7 @@ struct skl_ddb_allocation {
}; };
struct skl_wm_values { struct skl_wm_values {
bool dirty[I915_MAX_PIPES]; unsigned dirty_pipes;
struct skl_ddb_allocation ddb; struct skl_ddb_allocation ddb;
uint32_t wm_linetime[I915_MAX_PIPES]; uint32_t wm_linetime[I915_MAX_PIPES];
uint32_t plane[I915_MAX_PIPES][I915_MAX_PLANES][8]; uint32_t plane[I915_MAX_PIPES][I915_MAX_PLANES][8];
......
...@@ -3516,7 +3516,7 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, ...@@ -3516,7 +3516,7 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv,
int i, level, max_level = ilk_wm_max_level(dev); int i, level, max_level = ilk_wm_max_level(dev);
enum pipe pipe = crtc->pipe; enum pipe pipe = crtc->pipe;
if (!new->dirty[pipe]) if ((new->dirty_pipes & drm_crtc_mask(&crtc->base)) == 0)
continue; continue;
I915_WRITE(PIPE_WM_LINETIME(pipe), new->wm_linetime[pipe]); I915_WRITE(PIPE_WM_LINETIME(pipe), new->wm_linetime[pipe]);
...@@ -3741,7 +3741,7 @@ static void skl_update_other_pipe_wm(struct drm_device *dev, ...@@ -3741,7 +3741,7 @@ static void skl_update_other_pipe_wm(struct drm_device *dev,
WARN_ON(!wm_changed); WARN_ON(!wm_changed);
skl_compute_wm_results(dev, &pipe_wm, r, intel_crtc); skl_compute_wm_results(dev, &pipe_wm, r, intel_crtc);
r->dirty[intel_crtc->pipe] = true; r->dirty_pipes |= drm_crtc_mask(&intel_crtc->base);
} }
} }
...@@ -3844,7 +3844,7 @@ static void skl_update_wm(struct drm_crtc *crtc) ...@@ -3844,7 +3844,7 @@ static void skl_update_wm(struct drm_crtc *crtc)
/* Clear all dirty flags */ /* Clear all dirty flags */
memset(results->dirty, 0, sizeof(bool) * I915_MAX_PIPES); results->dirty_pipes = 0;
skl_clear_wm(results, intel_crtc->pipe); skl_clear_wm(results, intel_crtc->pipe);
...@@ -3852,7 +3852,7 @@ static void skl_update_wm(struct drm_crtc *crtc) ...@@ -3852,7 +3852,7 @@ static void skl_update_wm(struct drm_crtc *crtc)
return; return;
skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); skl_compute_wm_results(dev, pipe_wm, results, intel_crtc);
results->dirty[intel_crtc->pipe] = true; results->dirty_pipes |= drm_crtc_mask(&intel_crtc->base);
skl_update_other_pipe_wm(dev, crtc, results); skl_update_other_pipe_wm(dev, crtc, results);
skl_write_wm_values(dev_priv, results); skl_write_wm_values(dev_priv, results);
...@@ -4011,7 +4011,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc) ...@@ -4011,7 +4011,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc)
if (!intel_crtc->active) if (!intel_crtc->active)
return; return;
hw->dirty[pipe] = true; hw->dirty_pipes |= drm_crtc_mask(crtc);
active->linetime = hw->wm_linetime[pipe]; active->linetime = hw->wm_linetime[pipe];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册