Skip to content

Commit afc189d

Browse files
vsyrjalatursulin
authored andcommitted
drm/i915: Correctly populate use_sagv_wm for all pipes
When changing between SAGV vs. no SAGV on tgl+ we have to update the use_sagv_wm flag for all the crtcs or else an active pipe not already in the state will end up using the wrong watermarks. That is especially bad when we end up with the tighter non-SAGV watermarks with SAGV enabled. Usually ends up in underruns. Cc: stable@vger.kernel.org Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Fixes: 7241c57 ("drm/i915: Add TGL+ SAGV support") Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220218064039.12834-2-ville.syrjala@linux.intel.com (cherry picked from commit 8dd8ffb) Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
1 parent a40ee54 commit afc189d

1 file changed

Lines changed: 11 additions & 11 deletions

File tree

drivers/gpu/drm/i915/intel_pm.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4029,6 +4029,17 @@ static int intel_compute_sagv_mask(struct intel_atomic_state *state)
40294029
return ret;
40304030
}
40314031

4032+
if (intel_can_enable_sagv(dev_priv, new_bw_state) !=
4033+
intel_can_enable_sagv(dev_priv, old_bw_state)) {
4034+
ret = intel_atomic_serialize_global_state(&new_bw_state->base);
4035+
if (ret)
4036+
return ret;
4037+
} else if (new_bw_state->pipe_sagv_reject != old_bw_state->pipe_sagv_reject) {
4038+
ret = intel_atomic_lock_global_state(&new_bw_state->base);
4039+
if (ret)
4040+
return ret;
4041+
}
4042+
40324043
for_each_new_intel_crtc_in_state(state, crtc,
40334044
new_crtc_state, i) {
40344045
struct skl_pipe_wm *pipe_wm = &new_crtc_state->wm.skl.optimal;
@@ -4044,17 +4055,6 @@ static int intel_compute_sagv_mask(struct intel_atomic_state *state)
40444055
intel_can_enable_sagv(dev_priv, new_bw_state);
40454056
}
40464057

4047-
if (intel_can_enable_sagv(dev_priv, new_bw_state) !=
4048-
intel_can_enable_sagv(dev_priv, old_bw_state)) {
4049-
ret = intel_atomic_serialize_global_state(&new_bw_state->base);
4050-
if (ret)
4051-
return ret;
4052-
} else if (new_bw_state->pipe_sagv_reject != old_bw_state->pipe_sagv_reject) {
4053-
ret = intel_atomic_lock_global_state(&new_bw_state->base);
4054-
if (ret)
4055-
return ret;
4056-
}
4057-
40584058
return 0;
40594059
}
40604060

0 commit comments

Comments
 (0)