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

drm/i915: Reassign DPLLs only for crtcs going throug .compute_config()



Only reassign the pipe's DPLL if it's going through a full
.compute_config() cycle. If OTOH it's just getting modeset
eg. in order to change cdclk there doesn't seem much point in
picking a new DPLL for it.

This should also prevent .get_dplls() from seeing a funky port_clock
for DP even in cases where the readout produces a non-standard
clock and we (for some reason) have decided to not fully recompute
the state to remedy the situation.

Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220907091057.11572-7-ville.syrjala@linux.intel.com
parent b000abd3
Loading
Loading
Loading
Loading
+1 −16
Original line number Diff line number Diff line
@@ -6066,20 +6066,6 @@ void intel_crtc_update_active_timings(const struct intel_crtc_state *crtc_state)
	}
}

static void intel_modeset_clear_plls(struct intel_atomic_state *state)
{
	struct intel_crtc_state *new_crtc_state;
	struct intel_crtc *crtc;
	int i;

	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
		if (!intel_crtc_needs_modeset(new_crtc_state))
			continue;

		intel_release_shared_dplls(state, crtc);
	}
}

/*
 * This implements the workaround described in the "notes" section of the mode
 * set sequence documentation. When going from no pipes or single pipe to
@@ -6913,6 +6899,7 @@ static int intel_atomic_check(struct drm_device *dev,
			if (ret)
				goto fail;

			intel_release_shared_dplls(state, crtc);
			continue;
		}

@@ -6960,8 +6947,6 @@ static int intel_atomic_check(struct drm_device *dev,
		ret = intel_modeset_calc_cdclk(state);
		if (ret)
			return ret;

		intel_modeset_clear_plls(state);
	}

	ret = intel_atomic_check_crtcs(state);
+2 −4
Original line number Diff line number Diff line
@@ -1436,11 +1436,9 @@ int intel_dpll_crtc_get_shared_dpll(struct intel_atomic_state *state,
	int ret;

	drm_WARN_ON(&i915->drm, !intel_crtc_needs_modeset(crtc_state));
	drm_WARN_ON(&i915->drm, !crtc_state->hw.enable && crtc_state->shared_dpll);

	if (drm_WARN_ON(&i915->drm, crtc_state->shared_dpll))
		return 0;

	if (!crtc_state->hw.enable)
	if (!crtc_state->hw.enable || crtc_state->shared_dpll)
		return 0;

	if (!i915->display.funcs.dpll->crtc_get_shared_dpll)