[Intel-gfx] [PATCH v2 05/23] drm/i915/dp: Validate modes using max Output BPP and slice count when DSC supported

Srivatsa, Anusha anusha.srivatsa at intel.com
Fri Aug 17 19:20:02 UTC 2018



>-----Original Message-----
>From: Navare, Manasi D
>Sent: Tuesday, July 31, 2018 2:07 PM
>To: intel-gfx at lists.freedesktop.org
>Cc: Navare, Manasi D <manasi.d.navare at intel.com>; Singh, Gaurav K
><gaurav.k.singh at intel.com>; Jani Nikula <jani.nikula at linux.intel.com>; Ville
>Syrjala <ville.syrjala at linux.intel.com>; Srivatsa, Anusha
><anusha.srivatsa at intel.com>
>Subject: [PATCH v2 05/23] drm/i915/dp: Validate modes using max Output BPP
>and slice count when DSC supported
>
>When DSC is supported we need to validate the modes based on the maximum
>supported compressed BPP and maximum supported slice count.
>This allows us to allow the modes with pixel clock greater than the available link
>BW as long as it meets the compressed BPP and slice count requirements.
>
>v3:
>* Use the macro for dsc sink support (Jani N)
>v2:
>* Properly comment why we are right shifting the bpp value (Anusha)
>
>Cc: Gaurav K Singh <gaurav.k.singh at intel.com>
>Cc: Jani Nikula <jani.nikula at linux.intel.com>
>Cc: Ville Syrjala <ville.syrjala at linux.intel.com>
>Cc: Anusha Srivatsa <anusha.srivatsa at intel.com>
>Signed-off-by: Manasi Navare <manasi.d.navare at intel.com>
Reviewed-by: Anusha Srivatsa<anusha.srivatsa at intel.com>
>---
> drivers/gpu/drm/i915/intel_dp.c | 27 ++++++++++++++++++++++++++-
> 1 file changed, 26 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
>index ec2af43..8459d74 100644
>--- a/drivers/gpu/drm/i915/intel_dp.c
>+++ b/drivers/gpu/drm/i915/intel_dp.c
>@@ -612,9 +612,12 @@ intel_dp_mode_valid(struct drm_connector *connector,
> 	struct intel_dp *intel_dp = intel_attached_dp(connector);
> 	struct intel_connector *intel_connector =
>to_intel_connector(connector);
> 	struct drm_display_mode *fixed_mode = intel_connector-
>>panel.fixed_mode;
>+	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> 	int target_clock = mode->clock;
> 	int max_rate, mode_rate, max_lanes, max_link_clock;
> 	int max_dotclk;
>+	uint16_t dsc_max_output_bpp = 0;
>+	uint8_t dsc_slice_count = 0;
>
> 	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> 		return MODE_NO_DBLESCAN;
>@@ -637,7 +640,29 @@ intel_dp_mode_valid(struct drm_connector *connector,
> 	max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
> 	mode_rate = intel_dp_link_required(target_clock, 18);
>
>-	if (mode_rate > max_rate || target_clock > max_dotclk)
>+	/*
>+	 * Output bpp is stored in 6.4 format so right shift by 4 to get the
>+	 * integer value since we support only integer values of bpp.
>+	 */
>+	if ((INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) &&
>+	    drm_dp_sink_supports_dsc(intel_dp->dsc_dpcd)) {
>+		if (intel_dp_is_edp(intel_dp)) {
>+			dsc_max_output_bpp =
>drm_edp_dsc_sink_output_bpp(intel_dp->dsc_dpcd) >> 4;
>+			dsc_slice_count =
>drm_dp_dsc_sink_max_slice_count(intel_dp->dsc_dpcd,
>+									  true);
>+		} else {
>+			dsc_max_output_bpp =
>intel_dp_dsc_get_output_bpp(max_link_clock,
>+
>max_lanes,
>+
>target_clock,
>+									 mode-
>>hdisplay) >> 4;
>+			dsc_slice_count =
>intel_dp_dsc_get_slice_count(intel_dp,
>+
>target_clock,
>+								       mode-
>>hdisplay);
>+		}
>+	}
>+
>+	if ((mode_rate > max_rate && !(dsc_max_output_bpp &&
>dsc_slice_count)) ||
>+	    target_clock > max_dotclk)
> 		return MODE_CLOCK_HIGH;
> 	if (mode->clock < 10000)
>--
>2.7.4



More information about the Intel-gfx mailing list