Re: [PATCH v2 05/21] drm/i915: Factor out function to modeset commit a set of pipes

Ville Syrjälä
2024-05-22T18:23:39Z

On Mon, May 20, 2024 at 09:58:03PM +0300, Imre Deak wrote:
> Factor out a function to modeset commit a set of pipes, which a later
> patch will reuse for DP link retraining.
>
> Signed-off-by: Imre Deak <imre.deak@intel.com>

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> ---
> drivers/gpu/drm/i915/display/intel_ddi.c | 31 +-----------------
> drivers/gpu/drm/i915/display/intel_display.c | 34 ++++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_display.h | 3 ++
> 3 files changed, 38 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 3c3fc53376ce3..170ba01786cf8 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -4441,35 +4441,6 @@ intel_ddi_init_dp_connector(struct intel_digital_port *dig_port)
> return connector;
> }
>
> -static int modeset_pipe(struct drm_crtc *crtc,
> - struct drm_modeset_acquire_ctx *ctx)
> -{
> - struct drm_atomic_state *state;
> - struct drm_crtc_state *crtc_state;
> - int ret;
> -
> - state = drm_atomic_state_alloc(crtc->dev);
> - if (!state)
> - return -ENOMEM;
> -
> - state->acquire_ctx = ctx;
> - to_intel_atomic_state(state)->internal = true;
> -
> - crtc_state = drm_atomic_get_crtc_state(state, crtc);
> - if (IS_ERR(crtc_state)) {
> - ret = PTR_ERR(crtc_state);
> - goto out;
> - }
> -
> - crtc_state->connectors_changed = true;
> -
> - ret = drm_atomic_commit(state);
> -out:
> - drm_atomic_state_put(state);
> -
> - return ret;
> -}
> -
> static int intel_hdmi_reset_link(struct intel_encoder *encoder,
> struct drm_modeset_acquire_ctx *ctx)
> {
> @@ -4539,7 +4510,7 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
> * would be perfectly happy if were to just reconfigure
> * the SCDC settings on the fly.
> */
> - return modeset_pipe(&crtc->base, ctx);
> + return intel_modeset_commit_pipes(dev_priv, BIT(crtc->pipe), ctx);
> }
>
> static enum intel_hotplug_state
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index cce1420fb5417..4edb1ede4a1b4 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -5569,6 +5569,40 @@ int intel_modeset_all_pipes_late(struct intel_atomic_state *state,
> return 0;
> }
>
> +int intel_modeset_commit_pipes(struct drm_i915_private *i915,
> + u8 pipe_mask,
> + struct drm_modeset_acquire_ctx *ctx)
> +{
> + struct drm_atomic_state *state;
> + struct intel_crtc *crtc;
> + int ret;
> +
> + state = drm_atomic_state_alloc(&i915->drm);
> + if (!state)
> + return -ENOMEM;
> +
> + state->acquire_ctx = ctx;
> + to_intel_atomic_state(state)->internal = true;
> +
> + for_each_intel_crtc_in_pipe_mask(&i915->drm, crtc, pipe_mask) {
> + struct intel_crtc_state *crtc_state =
> + intel_atomic_get_crtc_state(state, crtc);
> +
> + if (IS_ERR(crtc_state)) {
> + ret = PTR_ERR(crtc_state);
> + goto out;
> + }
> +
> + crtc_state->uapi.connectors_changed = true;
> + }
> +
> + ret = drm_atomic_commit(state);
> +out:
> + drm_atomic_state_put(state);
> +
> + return ret;
> +}
> +
> /*
> * This implements the workaround described in the "notes" section of the mode
> * set sequence documentation. When going from no pipes or single pipe to
> diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
> index 56d1c0e3e62cd..dfdc42cef8723 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.h
> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> @@ -537,6 +537,9 @@ int intel_modeset_pipes_in_mask_early(struct intel_atomic_state *state,
> const char *reason, u8 pipe_mask);
> int intel_modeset_all_pipes_late(struct intel_atomic_state *state,
> const char *reason);
> +int intel_modeset_commit_pipes(struct drm_i915_private *i915,
> + u8 pipe_mask,
> + struct drm_modeset_acquire_ctx *ctx);
> void intel_modeset_get_crtc_power_domains(struct intel_crtc_state *crtc_state,
> struct intel_power_domain_mask *old_domains);
> void intel_modeset_put_crtc_power_domains(struct intel_crtc *crtc,
> --
> 2.43.3

--
Ville Syrjälä
Intel