[Intel-gfx] [PATCH v3 8/9] drm/i915/edp: modify fixed and downclock modes for MSO
Shankar, Uma
uma.shankar at intel.com
Mon Feb 22 09:21:47 UTC 2021
> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces at lists.freedesktop.org> On Behalf Of Jani Nikula
> Sent: Thursday, February 11, 2021 8:22 PM
> To: intel-gfx at lists.freedesktop.org
> Cc: Nikula, Jani <jani.nikula at intel.com>; Varide, Nischal <nischal.varide at intel.com>
> 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 <uma.shankar at intel.com>
> v2: Rename intel_dp_mso_mode_fixup -> intel_edp_mso_mode_fixup
>
> Cc: Nischal Varide <nischal.varide at intel.com>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
> ---
> 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
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list