Commit dbf1b1ed authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm/i915: Split wm sanitize from readout



I'll need to move the wm readout to an earlier point in the
sequence (since the bw state readout will need ddb information
from the wm readout). But (at least for now) the wm sanitation
will need to stay put as it needs to also sanitize things for
any pipes/planes we disable later during the hw state takeover.

Reviewed-by: default avatarVinod Govindapillai <vinod.govindapillai@intel.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250306163420.3961-16-ville.syrjala@linux.intel.com
parent 003ec4ce
Loading
Loading
Loading
Loading
+4 −14
Original line number Diff line number Diff line
@@ -3902,12 +3902,6 @@ static void g4x_wm_sanitize(struct drm_i915_private *dev_priv)
	mutex_unlock(&dev_priv->display.wm.wm_mutex);
}

static void g4x_wm_get_hw_state_and_sanitize(struct drm_i915_private *i915)
{
	g4x_wm_get_hw_state(i915);
	g4x_wm_sanitize(i915);
}

static void vlv_wm_get_hw_state(struct drm_i915_private *dev_priv)
{
	struct vlv_wm_values *wm = &dev_priv->display.wm.vlv;
@@ -4055,12 +4049,6 @@ static void vlv_wm_sanitize(struct drm_i915_private *dev_priv)
	mutex_unlock(&dev_priv->display.wm.wm_mutex);
}

static void vlv_wm_get_hw_state_and_sanitize(struct drm_i915_private *i915)
{
	vlv_wm_get_hw_state(i915);
	vlv_wm_sanitize(i915);
}

/*
 * FIXME should probably kill this and improve
 * the real watermark readout/sanitation instead
@@ -4122,14 +4110,16 @@ static const struct intel_wm_funcs vlv_wm_funcs = {
	.initial_watermarks = vlv_initial_watermarks,
	.optimize_watermarks = vlv_optimize_watermarks,
	.atomic_update_watermarks = vlv_atomic_update_fifo,
	.get_hw_state = vlv_wm_get_hw_state_and_sanitize,
	.get_hw_state = vlv_wm_get_hw_state,
	.sanitize = vlv_wm_sanitize,
};

static const struct intel_wm_funcs g4x_wm_funcs = {
	.compute_watermarks = g4x_compute_watermarks,
	.initial_watermarks = g4x_initial_watermarks,
	.optimize_watermarks = g4x_optimize_watermarks,
	.get_hw_state = g4x_wm_get_hw_state_and_sanitize,
	.get_hw_state = g4x_wm_get_hw_state,
	.sanitize = g4x_wm_sanitize,
};

static const struct intel_wm_funcs pnv_wm_funcs = {
+1 −0
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ struct intel_wm_funcs {
				    struct intel_crtc *crtc);
	int (*compute_global_watermarks)(struct intel_atomic_state *state);
	void (*get_hw_state)(struct drm_i915_private *i915);
	void (*sanitize)(struct drm_i915_private *i915);
};

struct intel_audio_state {
+1 −0
Original line number Diff line number Diff line
@@ -991,6 +991,7 @@ void intel_modeset_setup_hw_state(struct drm_i915_private *i915,
	intel_dpll_sanitize_state(display);

	intel_wm_get_hw_state(i915);
	intel_wm_sanitize(i915);

	for_each_intel_crtc(&i915->drm, crtc) {
		struct intel_crtc_state *crtc_state =
+6 −0
Original line number Diff line number Diff line
@@ -108,6 +108,12 @@ void intel_wm_get_hw_state(struct drm_i915_private *i915)
		return i915->display.funcs.wm->get_hw_state(i915);
}

void intel_wm_sanitize(struct drm_i915_private *i915)
{
	if (i915->display.funcs.wm->sanitize)
		return i915->display.funcs.wm->sanitize(i915);
}

bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
			    const struct intel_plane_state *plane_state)
{
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ void intel_optimize_watermarks(struct intel_atomic_state *state,
			       struct intel_crtc *crtc);
int intel_compute_global_watermarks(struct intel_atomic_state *state);
void intel_wm_get_hw_state(struct drm_i915_private *i915);
void intel_wm_sanitize(struct drm_i915_private *i915);
bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
			    const struct intel_plane_state *plane_state);
void intel_print_wm_latency(struct drm_i915_private *i915,
Loading