[Intel-gfx] [PATCH v2 07/22] drm/i915: Factor out a helper to check/compute all the CRTC states
Ville Syrjälä
ville.syrjala at linux.intel.com
Fri Sep 8 19:31:31 UTC 2023
On Thu, Aug 24, 2023 at 11:05:02AM +0300, Imre Deak wrote:
> Factor out intel_atomic_check_config() to check and compute all the CRTC
> states. This will be used by a follow up patch to recompute/check the
> state until required by BW limitations between CRTCs.
>
> Signed-off-by: Imre Deak <imre.deak at intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 78 ++++++++++++--------
> 1 file changed, 46 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index a1956b89fd75d..dbf109a2e738f 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -6206,6 +6206,51 @@ static int intel_bigjoiner_add_affected_crtcs(struct intel_atomic_state *state)
> return 0;
> }
>
> +static int intel_atomic_check_config(struct intel_atomic_state *state)
> +{
> + struct drm_i915_private *i915 = to_i915(state->base.dev);
> + struct intel_crtc_state *new_crtc_state;
> + struct intel_crtc *crtc;
> + int ret;
> + int i;
> +
> + ret = intel_bigjoiner_add_affected_crtcs(state);
> + if (ret)
> + return ret;
> +
> + for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
> + if (!intel_crtc_needs_modeset(new_crtc_state)) {
> + if (intel_crtc_is_bigjoiner_slave(new_crtc_state))
> + copy_bigjoiner_crtc_state_nomodeset(state, crtc);
> + else
> + intel_crtc_copy_uapi_to_hw_state_nomodeset(state, crtc);
> + continue;
> + }
> +
> + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
> + drm_WARN_ON(&i915->drm, new_crtc_state->uapi.enable);
> + continue;
> + }
> +
> + ret = intel_crtc_prepare_cleared_state(state, crtc);
> + if (ret)
> + break;
> +
> + if (!new_crtc_state->hw.enable)
> + continue;
> +
> + ret = intel_modeset_pipe_config(state, crtc);
> + if (ret)
> + break;
> +
> + ret = intel_atomic_check_bigjoiner(state, crtc);
> + if (ret)
> + break;
> + }
> +
> + return ret;
> +}
> +
> /**
> * intel_atomic_check - validate state object
> * @dev: drm device
> @@ -6250,41 +6295,10 @@ int intel_atomic_check(struct drm_device *dev,
> return ret;
> }
>
> - ret = intel_bigjoiner_add_affected_crtcs(state);
> + ret = intel_atomic_check_config(state);
> if (ret)
> goto fail;
>
> - for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
> - new_crtc_state, i) {
> - if (!intel_crtc_needs_modeset(new_crtc_state)) {
> - if (intel_crtc_is_bigjoiner_slave(new_crtc_state))
> - copy_bigjoiner_crtc_state_nomodeset(state, crtc);
> - else
> - intel_crtc_copy_uapi_to_hw_state_nomodeset(state, crtc);
> - continue;
> - }
> -
> - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
> - drm_WARN_ON(&dev_priv->drm, new_crtc_state->uapi.enable);
> - continue;
> - }
> -
> - ret = intel_crtc_prepare_cleared_state(state, crtc);
> - if (ret)
> - goto fail;
> -
> - if (!new_crtc_state->hw.enable)
> - continue;
> -
> - ret = intel_modeset_pipe_config(state, crtc);
> - if (ret)
> - goto fail;
> -
> - ret = intel_atomic_check_bigjoiner(state, crtc);
> - if (ret)
> - goto fail;
> - }
> -
> for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
> new_crtc_state, i) {
> if (!intel_crtc_needs_modeset(new_crtc_state))
> --
> 2.37.2
--
Ville Syrjälä
Intel
More information about the Intel-gfx
mailing list