[Intel-gfx] [PATCH] drm/i915: Check require bandwidth did not exceed LSPCON limitation

Lee, Shawn C shawn.c.lee at intel.com
Wed Feb 5 09:29:00 UTC 2020


On Wed, 05 Feb 2020, Lee Shawn C <shawn.c.lee at intel.com> wrote:
>While mode setting, driver would calculate mode rate based on resolution and bpp. And choose the best bpp that did not exceed DP bandwidtd.
>
>But LSPCON had more restriction due to it convert DP to HDMI.
>Driver should respect HDMI's bandwidth limitation if LSPCON was active. This change would ignore the bpp when its required output bandwidth already over HDMI 2.0 or 1.4 spec.
>
>Cc: Imre Deak <imre.deak at intel.com>
>Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
>Cc: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
>Cc: Jani Nikula <jani.nikula at linux.intel.com>
>Cc: Cooper Chiou <cooper.chiou at intel.com>
>Cc: Sam McNally <sammc at google.com>
>Signed-off-by: Lee Shawn C <shawn.c.lee at intel.com>
>---
> drivers/gpu/drm/i915/display/intel_dp.c     | 18 ++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_lspcon.c | 10 ++++++++++  drivers/gpu/drm/i915/display/intel_lspcon.h |  1 +
> 3 files changed, 29 insertions(+)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
>index 2057f63e32f0..64969ae1c285 100644
>--- a/drivers/gpu/drm/i915/display/intel_dp.c
>+++ b/drivers/gpu/drm/i915/display/intel_dp.c
>@@ -1992,6 +1992,9 @@ intel_dp_compute_link_config_wide(struct intel_dp *intel_dp,
> 				  const struct link_config_limits *limits)  {
> 	struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode;
>+	struct intel_connector *connector = intel_dp->attached_connector;
>+	const struct drm_display_info *info = &connector->base.display_info;
>+	struct intel_lspcon *lspcon = dp_to_lspcon(intel_dp);
> 	int bpp, clock, lane_count;
> 	int mode_rate, link_clock, link_avail;
> 
>@@ -2001,6 +2004,21 @@ intel_dp_compute_link_config_wide(struct intel_dp *intel_dp,
> 		mode_rate = intel_dp_link_required(adjusted_mode->crtc_clock,
> 						   output_bpp);
> 
>+		/*
>+		 * Bypass this mode if require bandwidth over downstream
>+		 * limitation or HDMI spec when LSPCON active.
>+		 */
>+		if (lspcon->active) {
>+			int max_clock_rate = lspcon_max_rate(lspcon);
>+
>+			if (info->max_tmds_clock)
>+				max_clock_rate = min(max_clock_rate,
>+						     info->max_tmds_clock);
>+
>+			if (mode_rate > max_clock_rate)
>+				continue;
>+		}
>+
> 		for (clock = limits->min_clock; clock <= limits->max_clock; clock++) {
> 			for (lane_count = limits->min_lane_count;
> 			     lane_count <= limits->max_lane_count; diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.c b/drivers/gpu/drm/i915/display/intel_lspcon.c
>index d807c5648c87..3b0438356a88 100644
>--- a/drivers/gpu/drm/i915/display/intel_lspcon.c
>+++ b/drivers/gpu/drm/i915/display/intel_lspcon.c
>@@ -518,6 +518,16 @@ void lspcon_set_infoframes(struct intel_encoder *encoder,
> 				  buf, ret);
> }
> 
>+int lspcon_max_rate(struct intel_lspcon *lspcon) {
>+	enum drm_lspcon_mode current_mode = lspcon_get_current_mode(lspcon);
>+
>+	if (current_mode == DRM_LSPCON_MODE_LS)
>+		return DIV_ROUND_UP(340000 * 24, 8);
>+
>+	return DIV_ROUND_UP(600000 * 24, 8);
>+}
>+
> u32 lspcon_infoframes_enabled(struct intel_encoder *encoder,
> 			      const struct intel_crtc_state *pipe_config)  { diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.h b/drivers/gpu/drm/i915/display/intel_lspcon.h
>index 37cfddf8a9c5..b584c02ab33b 100644
>--- a/drivers/gpu/drm/i915/display/intel_lspcon.h
>+++ b/drivers/gpu/drm/i915/display/intel_lspcon.h
>@@ -18,6 +18,7 @@ struct intel_lspcon;
> bool lspcon_init(struct intel_digital_port *intel_dig_port);  void lspcon_resume(struct intel_lspcon *lspcon);  void lspcon_wait_pcon_mode(struct intel_lspcon *lspcon);
>+int lspcon_max_rate(struct intel_lspcon *lspcon);
> void lspcon_write_infoframe(struct intel_encoder *encoder,
> 			    const struct intel_crtc_state *crtc_state,
> 			    unsigned int type,
>--
>2.17.1
>
>

This patch version info is not accurate.
I will submit a new one instead of this patch. Thanks!


More information about the Intel-gfx mailing list