Re: [PATCH] drm/i915: Remove non-existent pipes from bigjoiner pipe mask

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Ville
> Syrjala
> Sent: Saturday, November 19, 2022 12:22 AM
> To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx
> Cc: stable@xxxxxxxxxxxxxxx
> Subject:  [PATCH] drm/i915: Remove non-existent pipes from
> bigjoiner pipe mask
> 
> From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> 
> bigjoiner_pipes() doesn't consider that:
> - RKL only has three pipes
> - some pipes may be fused off
> 
> This means that intel_atomic_check_bigjoiner() won't reject all configurations
> that would need a non-existent pipe.
> Instead we just keep on rolling witout actually having reserved the slave pipe
> we need.
> 
> It's possible that we don't outright explode anywhere due to this since eg.
> for_each_intel_crtc_in_pipe_mask() will only walk the crtcs we've registered
> even though the passed in pipe_mask asks for more of them. But clearly the
> thing won't do what is expected of it when the required pipes are not
> present.
> 
> Fix the problem by consulting the device info pipe_mask already in
> bigjoiner_pipes().
> 
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> ---
Reviewed-by: Arun R Murthy <arun.r.murthy@xxxxxxxxx>

Thanks and Regards,
Arun R Murthy
--------------------
>  drivers/gpu/drm/i915/display/intel_display.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index b3e23708d194..6c2686ecb62a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -3733,12 +3733,16 @@ static bool ilk_get_pipe_config(struct intel_crtc
> *crtc,
> 
>  static u8 bigjoiner_pipes(struct drm_i915_private *i915)  {
> +	u8 pipes;
> +
>  	if (DISPLAY_VER(i915) >= 12)
> -		return BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D);
> +		pipes = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D);
>  	else if (DISPLAY_VER(i915) >= 11)
> -		return BIT(PIPE_B) | BIT(PIPE_C);
> +		pipes = BIT(PIPE_B) | BIT(PIPE_C);
>  	else
> -		return 0;
> +		pipes = 0;
> +
> +	return pipes & RUNTIME_INFO(i915)->pipe_mask;
>  }
> 
>  static bool transcoder_ddi_func_is_enabled(struct drm_i915_private
> *dev_priv,
> --
> 2.37.4





[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux