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

Commit 2b4b9f35 authored by Matt Roper's avatar Matt Roper
Browse files

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

parent f4a96752
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1598,7 +1598,7 @@ struct skl_ddb_allocation {
};

struct skl_wm_values {
	bool dirty[I915_MAX_PIPES];
	unsigned dirty_pipes;
	struct skl_ddb_allocation ddb;
	uint32_t wm_linetime[I915_MAX_PIPES];
	uint32_t plane[I915_MAX_PIPES][I915_MAX_PLANES][8];
+5 −5
Original line number Diff line number Diff line
@@ -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);
		enum pipe pipe = crtc->pipe;

		if (!new->dirty[pipe])
		if ((new->dirty_pipes & drm_crtc_mask(&crtc->base)) == 0)
			continue;

		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,
		WARN_ON(!wm_changed);

		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)


	/* Clear all dirty flags */
	memset(results->dirty, 0, sizeof(bool) * I915_MAX_PIPES);
	results->dirty_pipes = 0;

	skl_clear_wm(results, intel_crtc->pipe);

@@ -3852,7 +3852,7 @@ static void skl_update_wm(struct drm_crtc *crtc)
		return;

	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_write_wm_values(dev_priv, results);
@@ -4011,7 +4011,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc)
	if (!intel_crtc->active)
		return;

	hw->dirty[pipe] = true;
	hw->dirty_pipes |= drm_crtc_mask(crtc);

	active->linetime = hw->wm_linetime[pipe];