> -----Original Message-----
> From: Intel-gfx <[email protected]> On Behalf Of Jani 
> Nikula
> Sent: Thursday, February 11, 2021 8:22 PM
> To: [email protected]
> Cc: Nikula, Jani <[email protected]>; Varide, Nischal 
> <[email protected]>
> Subject: [Intel-gfx] [PATCH v3 8/9] drm/i915/edp: modify fixed and downclock
> modes for MSO
> 
> In the case of MSO (Multi-SST Operation), the EDID contains the timings for a 
> single
> panel segment. We'll want to hide the fact from userspace, and expose modes 
> that
> span the entire display.
> 
> Don't modify the EDID, as the userspace should not use that for modesetting, 
> only
> modify the actual modes.
> 
> v3: Use pixel overlap if available.

Looks Good to me.
Reviewed-by: Uma Shankar <[email protected]>

> v2: Rename intel_dp_mso_mode_fixup -> intel_edp_mso_mode_fixup
> 
> Cc: Nischal Varide <[email protected]>
> Signed-off-by: Jani Nikula <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 29 +++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 48e65b9a967a..5d5b16f70ed2 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -3516,6 +3516,31 @@ static void intel_dp_get_dsc_sink_cap(struct intel_dp
> *intel_dp)
>       }
>  }
> 
> +static void intel_edp_mso_mode_fixup(struct intel_connector *connector,
> +                                  struct drm_display_mode *mode) {
> +     struct intel_dp *intel_dp = intel_attached_dp(connector);
> +     struct drm_i915_private *i915 = to_i915(connector->base.dev);
> +     int n = intel_dp->mso_link_count;
> +     int overlap = intel_dp->mso_pixel_overlap;
> +
> +     if (!mode || !n)
> +             return;
> +
> +     mode->hdisplay = (mode->hdisplay - overlap) * n;
> +     mode->hsync_start = (mode->hsync_start - overlap) * n;
> +     mode->hsync_end = (mode->hsync_end - overlap) * n;
> +     mode->htotal = (mode->htotal - overlap) * n;
> +     mode->clock *= n;
> +
> +     drm_mode_set_name(mode);
> +
> +     drm_dbg_kms(&i915->drm,
> +                 "[CONNECTOR:%d:%s] using generated MSO mode: ",
> +                 connector->base.base.id, connector->base.name);
> +     drm_mode_debug_printmodeline(mode);
> +}
> +
>  static void intel_edp_mso_init(struct intel_dp *intel_dp)  {
>       struct drm_i915_private *i915 = dp_to_i915(intel_dp); @@ -6493,6
> +6518,10 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>       if (fixed_mode)
>               downclock_mode = intel_dp_drrs_init(intel_connector,
> fixed_mode);
> 
> +     /* multiply the mode clock and horizontal timings for MSO */
> +     intel_edp_mso_mode_fixup(intel_connector, fixed_mode);
> +     intel_edp_mso_mode_fixup(intel_connector, downclock_mode);
> +
>       /* fallback to VBT if available for eDP */
>       if (!fixed_mode)
>               fixed_mode = intel_panel_vbt_fixed_mode(intel_connector);
> --
> 2.20.1
> 
> _______________________________________________
> Intel-gfx mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to