All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915/cnl: Respect VBT max dp rate.
@ 2018-01-31 21:20 Rodrigo Vivi
  2018-01-31 22:14 ` ✓ Fi.CI.BAT: success for " Patchwork
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Rodrigo Vivi @ 2018-01-31 21:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Rodrigo Vivi

Since commit 'c4fb60b9aba9 ("drm/i915/bios: add DP max link
rate to VBT child device struct")' we have the new entry
defined for max dp rate that is in use for CNL.

Let's start using it for all VBT 216+ and
also organize the cnl adjusted rates in terms of rate
and not array size.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h   |  1 +
 drivers/gpu/drm/i915/intel_bios.c |  3 +++
 drivers/gpu/drm/i915/intel_dp.c   | 37 +++++++++++++++++++++++++++++--------
 3 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index c676269ed843..66dea5c9b10e 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1282,6 +1282,7 @@ struct ddi_vbt_port_info {
 
 	uint8_t dp_boost_level;
 	uint8_t hdmi_boost_level;
+	uint8_t dp_max_link_rate;
 };
 
 enum psr_lines_to_wait {
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index cf3f8f1ba6f7..c885daf4cc8d 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1230,6 +1230,9 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
 		info->alternate_aux_channel = aux_channel;
 
 		sanitize_aux_ch(dev_priv, port);
+
+		if (bdb_version >= 216 && child->dp_max_link_rate)
+			info->dp_max_link_rate = child->dp_max_link_rate;
 	}
 
 	if (bdb_version >= 158) {
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 03d86ff9b805..1e34d7954355 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -220,7 +220,7 @@ intel_dp_downstream_max_dotclock(struct intel_dp *intel_dp)
 	return max_dotclk;
 }
 
-static int cnl_adjusted_max_rate(struct intel_dp *intel_dp, int size)
+static int cnl_adjusted_max_rate(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
 	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
@@ -230,17 +230,33 @@ static int cnl_adjusted_max_rate(struct intel_dp *intel_dp, int size)
 
 	/* Low voltage SKUs are limited to max of 5.4G */
 	if (voltage == VOLTAGE_INFO_0_85V)
-		return size - 2;
+		return 540000;
 
 	/* For this SKU 8.1G is supported in all ports */
 	if (IS_CNL_WITH_PORT_F(dev_priv))
-		return size;
+		return 810000;
 
 	/* For other SKUs, max rate on ports A and B is 5.4G */
 	if (port == PORT_A || port == PORT_D)
-		return size - 2;
+		return 540000;
 
-	return size;
+	return 810000;
+}
+
+static int intel_dp_adjusted_max_rate(struct intel_dp *intel_dp)
+{
+	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
+	const struct ddi_vbt_port_info *info =
+		&dev_priv->vbt.ddi_port_info[dig_port->base.port];
+
+	if (info->dp_max_link_rate)
+		return info->dp_max_link_rate;
+
+	if (IS_CANNONLAKE(dev_priv))
+		return cnl_adjusted_max_rate(intel_dp);
+
+	return INT_MAX; /* No adjusted limit */
 }
 
 static void
@@ -249,7 +265,8 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
 	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
 	const int *source_rates;
-	int size;
+	int i, size;
+	int max_rate = intel_dp_adjusted_max_rate(intel_dp);
 
 	/* This should only be done once */
 	WARN_ON(intel_dp->source_rates || intel_dp->num_source_rates);
@@ -259,7 +276,7 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
 		size = ARRAY_SIZE(bxt_rates);
 	} else if (IS_CANNONLAKE(dev_priv)) {
 		source_rates = cnl_rates;
-		size = cnl_adjusted_max_rate(intel_dp, ARRAY_SIZE(cnl_rates));
+		size = ARRAY_SIZE(cnl_rates);
 	} else if (IS_GEN9_BC(dev_priv)) {
 		source_rates = skl_rates;
 		size = ARRAY_SIZE(skl_rates);
@@ -272,8 +289,12 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
 		size = ARRAY_SIZE(default_rates) - 1;
 	}
 
+	for (i = 0; i < size; i++)
+		if (source_rates[i] > max_rate)
+			break;
+
+	intel_dp->num_source_rates = i;
 	intel_dp->source_rates = source_rates;
-	intel_dp->num_source_rates = size;
 }
 
 static int intersect_rates(const int *source_rates, int source_len,
-- 
2.13.6

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* ✓ Fi.CI.BAT: success for drm/i915/cnl: Respect VBT max dp rate.
  2018-01-31 21:20 [PATCH] drm/i915/cnl: Respect VBT max dp rate Rodrigo Vivi
@ 2018-01-31 22:14 ` Patchwork
  2018-01-31 23:51 ` ✓ Fi.CI.IGT: " Patchwork
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2018-01-31 22:14 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/cnl: Respect VBT max dp rate.
URL   : https://patchwork.freedesktop.org/series/37441/
State : success

== Summary ==

Series 37441v1 drm/i915/cnl: Respect VBT max dp rate.
https://patchwork.freedesktop.org/api/1.0/series/37441/revisions/1/mbox/

Test debugfs_test:
        Subgroup read_all_entries:
                dmesg-warn -> DMESG-FAIL (fi-elk-e7500) fdo#103989
Test kms_chamelium:
        Subgroup common-hpd-after-suspend:
                dmesg-warn -> PASS       (fi-skl-6700k2) fdo#104108
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-b:
                incomplete -> PASS       (fi-snb-2520m) fdo#103713

fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989
fdo#104108 https://bugs.freedesktop.org/show_bug.cgi?id=104108
fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713

fi-bdw-5557u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:418s
fi-bdw-gvtdvm    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:425s
fi-blb-e6850     total:288  pass:223  dwarn:1   dfail:0   fail:0   skip:64  time:372s
fi-bsw-n3050     total:288  pass:242  dwarn:0   dfail:0   fail:0   skip:46  time:488s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:282s
fi-bxt-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:481s
fi-bxt-j4205     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:486s
fi-byt-j1900     total:288  pass:253  dwarn:0   dfail:0   fail:0   skip:35  time:471s
fi-byt-n2820     total:288  pass:249  dwarn:0   dfail:0   fail:0   skip:39  time:463s
fi-cfl-s2        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:566s
fi-elk-e7500     total:224  pass:168  dwarn:9   dfail:1   fail:0   skip:45 
fi-gdg-551       total:288  pass:179  dwarn:0   dfail:0   fail:1   skip:108 time:298s
fi-glk-1         total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:512s
fi-hsw-4770      total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:391s
fi-hsw-4770r     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:403s
fi-ilk-650       total:288  pass:228  dwarn:0   dfail:0   fail:0   skip:60  time:413s
fi-ivb-3520m     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:452s
fi-ivb-3770      total:288  pass:255  dwarn:0   dfail:0   fail:0   skip:33  time:421s
fi-kbl-7500u     total:288  pass:263  dwarn:1   dfail:0   fail:0   skip:24  time:455s
fi-kbl-7560u     total:288  pass:269  dwarn:0   dfail:0   fail:0   skip:19  time:502s
fi-kbl-7567u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:456s
fi-kbl-r         total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:499s
fi-pnv-d510      total:288  pass:222  dwarn:1   dfail:0   fail:0   skip:65  time:582s
fi-skl-6260u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:432s
fi-skl-6600u     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:511s
fi-skl-6700hq    total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:528s
fi-skl-6700k2    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:487s
fi-skl-6770hq    total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:483s
fi-skl-guc       total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:416s
fi-skl-gvtdvm    total:288  pass:265  dwarn:0   dfail:0   fail:0   skip:23  time:431s
fi-snb-2520m     total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:550s
fi-snb-2600      total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:402s
Blacklisted hosts:
fi-glk-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:465s

ae93f9b9acf3e9cdbb2be1b68a97c3cc6db66fad drm-tip: 2018y-01m-31d-16h-31m-38s UTC integration manifest
bd80bbf3d0d9 drm/i915/cnl: Respect VBT max dp rate.

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7844/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* ✓ Fi.CI.IGT: success for drm/i915/cnl: Respect VBT max dp rate.
  2018-01-31 21:20 [PATCH] drm/i915/cnl: Respect VBT max dp rate Rodrigo Vivi
  2018-01-31 22:14 ` ✓ Fi.CI.BAT: success for " Patchwork
@ 2018-01-31 23:51 ` Patchwork
  2018-02-01  2:53 ` [PATCH] " Pandiyan, Dhinakaran
  2018-02-01 11:10 ` Jani Nikula
  3 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2018-01-31 23:51 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/cnl: Respect VBT max dp rate.
URL   : https://patchwork.freedesktop.org/series/37441/
State : success

== Summary ==

Test kms_sysfs_edid_timing:
                warn       -> PASS       (shard-apl) fdo#100047
Test kms_flip:
        Subgroup modeset-vs-vblank-race-interruptible:
                pass       -> FAIL       (shard-snb) fdo#103060 +1
        Subgroup basic-plain-flip:
                skip       -> PASS       (shard-apl)
        Subgroup wf_vblank-ts-check-interruptible:
                fail       -> PASS       (shard-apl) fdo#100368
Test gem_eio:
        Subgroup in-flight-suspend:
                pass       -> FAIL       (shard-hsw) fdo#104676 +1
Test kms_frontbuffer_tracking:
        Subgroup fbc-1p-primscrn-shrfb-pgflip-blt:
                fail       -> PASS       (shard-apl) fdo#101623 +2
        Subgroup fbc-1p-primscrn-spr-indfb-draw-render:
                skip       -> PASS       (shard-apl) fdo#103167 +1
        Subgroup fbc-rgb101010-draw-mmap-gtt:
                skip       -> PASS       (shard-apl)
Test kms_plane_multiple:
        Subgroup atomic-pipe-b-tiling-yf:
                fail       -> PASS       (shard-apl)
        Subgroup legacy-pipe-a-tiling-x:
                skip       -> PASS       (shard-apl)
Test perf:
        Subgroup enable-disable:
                pass       -> FAIL       (shard-apl) fdo#103715
        Subgroup oa-exponents:
                fail       -> PASS       (shard-apl) fdo#102254
Test kms_vblank:
        Subgroup pipe-c-ts-continuation-suspend:
                dmesg-warn -> PASS       (shard-apl)
        Subgroup pipe-a-query-busy:
                skip       -> PASS       (shard-apl)
        Subgroup pipe-b-accuracy-idle:
                skip       -> PASS       (shard-apl)
        Subgroup pipe-c-wait-forked-busy:
                skip       -> PASS       (shard-apl)
        Subgroup crtc-id:
                skip       -> PASS       (shard-apl)
Test kms_draw_crc:
        Subgroup draw-method-xrgb8888-render-untiled:
                skip       -> PASS       (shard-apl)
        Subgroup draw-method-xrgb2101010-render-xtiled:
                skip       -> PASS       (shard-apl)
Test kms_color:
        Subgroup pipe-a-ctm-0-75:
                skip       -> PASS       (shard-apl)
Test kms_cursor_crc:
        Subgroup cursor-256x256-rapid-movement:
                skip       -> PASS       (shard-apl) fdo#103326
        Subgroup cursor-256x256-dpms:
                skip       -> PASS       (shard-apl)
        Subgroup cursor-128x42-random:
                skip       -> PASS       (shard-apl)
Test kms_pipe_crc_basic:
        Subgroup nonblocking-crc-pipe-c-frame-sequence:
                skip       -> PASS       (shard-apl) fdo#103481
        Subgroup read-crc-pipe-c:
                skip       -> PASS       (shard-apl) fdo#103191
        Subgroup read-crc-pipe-a:
                skip       -> PASS       (shard-apl)
Test kms_busy:
        Subgroup extended-modeset-hang-newfb-with-reset-render-c:
                skip       -> PASS       (shard-apl)
        Subgroup extended-modeset-hang-oldfb-with-reset-render-c:
                skip       -> PASS       (shard-apl) fdo#103336
Test kms_plane_scaling:
        Subgroup pipe-c-plane-scaling:
                skip       -> PASS       (shard-apl)
Test kms_rotation_crc:
        Subgroup primary-rotation-90-y-tiled:
                skip       -> PASS       (shard-apl)
Test kms_cursor_legacy:
        Subgroup basic-flip-after-cursor-varying-size:
                skip       -> PASS       (shard-apl) fdo#102670
        Subgroup cursora-vs-flipa-atomic:
                skip       -> PASS       (shard-apl)
Test kms_chv_cursor_fail:
        Subgroup pipe-a-128x128-bottom-edge:
                skip       -> PASS       (shard-apl)
Test kms_rmfb:
        Subgroup rmfb-ioctl:
                skip       -> PASS       (shard-apl)
Test kms_ccs:
        Subgroup pipe-b-bad-pixel-format:
                skip       -> PASS       (shard-apl)

fdo#100047 https://bugs.freedesktop.org/show_bug.cgi?id=100047
fdo#103060 https://bugs.freedesktop.org/show_bug.cgi?id=103060
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
fdo#104676 https://bugs.freedesktop.org/show_bug.cgi?id=104676
fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#103715 https://bugs.freedesktop.org/show_bug.cgi?id=103715
fdo#102254 https://bugs.freedesktop.org/show_bug.cgi?id=102254
fdo#103326 https://bugs.freedesktop.org/show_bug.cgi?id=103326
fdo#103481 https://bugs.freedesktop.org/show_bug.cgi?id=103481
fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
fdo#103336 https://bugs.freedesktop.org/show_bug.cgi?id=103336
fdo#102670 https://bugs.freedesktop.org/show_bug.cgi?id=102670

shard-apl        total:2838 pass:1750 dwarn:1   dfail:0   fail:23  skip:1064 time:12621s
shard-hsw        total:2838 pass:1733 dwarn:1   dfail:0   fail:13  skip:1090 time:12012s
shard-snb        total:2838 pass:1329 dwarn:1   dfail:0   fail:11  skip:1497 time:6564s
Blacklisted hosts:
shard-kbl        total:2838 pass:1806 dwarn:66  dfail:0   fail:22  skip:944 time:9653s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7844/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/i915/cnl: Respect VBT max dp rate.
  2018-01-31 21:20 [PATCH] drm/i915/cnl: Respect VBT max dp rate Rodrigo Vivi
  2018-01-31 22:14 ` ✓ Fi.CI.BAT: success for " Patchwork
  2018-01-31 23:51 ` ✓ Fi.CI.IGT: " Patchwork
@ 2018-02-01  2:53 ` Pandiyan, Dhinakaran
  2018-02-01  5:22   ` Rodrigo Vivi
  2018-02-01 11:10 ` Jani Nikula
  3 siblings, 1 reply; 7+ messages in thread
From: Pandiyan, Dhinakaran @ 2018-02-01  2:53 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: Nikula, Jani, intel-gfx




On Wed, 2018-01-31 at 13:20 -0800, Rodrigo Vivi wrote:
> Since commit 'c4fb60b9aba9 ("drm/i915/bios: add DP max link
> rate to VBT child device struct")' we have the new entry
> defined for max dp rate that is in use for CNL.
> 
> Let's start using it for all VBT 216+ and
> also organize the cnl adjusted rates in terms of rate
> and not array size.
> 
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h   |  1 +
>  drivers/gpu/drm/i915/intel_bios.c |  3 +++
>  drivers/gpu/drm/i915/intel_dp.c   | 37 +++++++++++++++++++++++++++++--------
>  3 files changed, 33 insertions(+), 8 deletions(-)

<snip>

> +static int intel_dp_adjusted_max_rate(struct intel_dp *intel_dp)
> +{
> +	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> +	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
> +	const struct ddi_vbt_port_info *info =
> +		&dev_priv->vbt.ddi_port_info[dig_port->base.port];
> +
> +	if (info->dp_max_link_rate)
> +		return info->dp_max_link_rate;

What if this value is higher than cnl_adjusted_max_rate() ?

-DK


> +
> +	if (IS_CANNONLAKE(dev_priv))
> +		return cnl_adjusted_max_rate(intel_dp);
> +
> +	return INT_MAX; /* No adjusted limit */
>  }
>  

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/i915/cnl: Respect VBT max dp rate.
  2018-02-01  2:53 ` [PATCH] " Pandiyan, Dhinakaran
@ 2018-02-01  5:22   ` Rodrigo Vivi
  2018-02-01  6:10     ` Pandiyan, Dhinakaran
  0 siblings, 1 reply; 7+ messages in thread
From: Rodrigo Vivi @ 2018-02-01  5:22 UTC (permalink / raw)
  To: Pandiyan, Dhinakaran; +Cc: Nikula, Jani, intel-gfx

On Thu, Feb 01, 2018 at 02:53:20AM +0000, Pandiyan, Dhinakaran wrote:
> 
> 
> 
> On Wed, 2018-01-31 at 13:20 -0800, Rodrigo Vivi wrote:
> > Since commit 'c4fb60b9aba9 ("drm/i915/bios: add DP max link
> > rate to VBT child device struct")' we have the new entry
> > defined for max dp rate that is in use for CNL.
> > 
> > Let's start using it for all VBT 216+ and
> > also organize the cnl adjusted rates in terms of rate
> > and not array size.
> > 
> > Cc: Jani Nikula <jani.nikula@intel.com>
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_drv.h   |  1 +
> >  drivers/gpu/drm/i915/intel_bios.c |  3 +++
> >  drivers/gpu/drm/i915/intel_dp.c   | 37 +++++++++++++++++++++++++++++--------
> >  3 files changed, 33 insertions(+), 8 deletions(-)
> 
> <snip>
> 
> > +static int intel_dp_adjusted_max_rate(struct intel_dp *intel_dp)
> > +{
> > +	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> > +	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
> > +	const struct ddi_vbt_port_info *info =
> > +		&dev_priv->vbt.ddi_port_info[dig_port->base.port];
> > +
> > +	if (info->dp_max_link_rate)
> > +		return info->dp_max_link_rate;
> 
> What if this value is higher than cnl_adjusted_max_rate() ?

Then VBT knows something about that SKU that we don't?! *shrug*

My understanding is that the purpose of that new VBT field is
 to workaround bugs they know for certain combination and limit
 the max rate even more.

bugs like the one I had in a part here:

https://bugs.freedesktop.org/show_bug.cgi?id=103963

in this case flicker was gone by limiting the max rate.

But yeap, maybe vbt is bugged, so are you suggesting min(vbt, bspec) ?

> 
> -DK
> 
> 
> > +
> > +	if (IS_CANNONLAKE(dev_priv))
> > +		return cnl_adjusted_max_rate(intel_dp);
> > +
> > +	return INT_MAX; /* No adjusted limit */
> >  }
> >  
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/i915/cnl: Respect VBT max dp rate.
  2018-02-01  5:22   ` Rodrigo Vivi
@ 2018-02-01  6:10     ` Pandiyan, Dhinakaran
  0 siblings, 0 replies; 7+ messages in thread
From: Pandiyan, Dhinakaran @ 2018-02-01  6:10 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: Nikula, Jani, intel-gfx

On Wed, 2018-01-31 at 21:22 -0800, Rodrigo Vivi wrote:
> On Thu, Feb 01, 2018 at 02:53:20AM +0000, Pandiyan, Dhinakaran wrote:
> > 
> > 
> > 
> > On Wed, 2018-01-31 at 13:20 -0800, Rodrigo Vivi wrote:
> > > Since commit 'c4fb60b9aba9 ("drm/i915/bios: add DP max link
> > > rate to VBT child device struct")' we have the new entry
> > > defined for max dp rate that is in use for CNL.
> > > 
> > > Let's start using it for all VBT 216+ and
> > > also organize the cnl adjusted rates in terms of rate
> > > and not array size.
> > > 
> > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/i915_drv.h   |  1 +
> > >  drivers/gpu/drm/i915/intel_bios.c |  3 +++
> > >  drivers/gpu/drm/i915/intel_dp.c   | 37 +++++++++++++++++++++++++++++--------
> > >  3 files changed, 33 insertions(+), 8 deletions(-)
> > 
> > <snip>
> > 
> > > +static int intel_dp_adjusted_max_rate(struct intel_dp *intel_dp)
> > > +{
> > > +	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> > > +	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
> > > +	const struct ddi_vbt_port_info *info =
> > > +		&dev_priv->vbt.ddi_port_info[dig_port->base.port];
> > > +
> > > +	if (info->dp_max_link_rate)
> > > +		return info->dp_max_link_rate;
> > 
> > What if this value is higher than cnl_adjusted_max_rate() ?
> 
> Then VBT knows something about that SKU that we don't?! *shrug*
> 

I have very little idea of how reliable VBT's are on SDP's or if they
are always updated with the correct values. Having those fall back
checks based on SKU and ports, which we know are definite HW limits, I
feel is safer. However, I'll leave this to you as my knowledge is fairly
limited.

> My understanding is that the purpose of that new VBT field is
>  to workaround bugs they know for certain combination and limit
>  the max rate even more.
> 
> bugs like the one I had in a part here:
> 
> https://bugs.freedesktop.org/show_bug.cgi?id=103963
> 
> in this case flicker was gone by limiting the max rate.
> 
> But yeap, maybe vbt is bugged, so are you suggesting min(vbt, bspec) ?

Yes.

> 
> > 
> > -DK
> > 
> > 
> > > +
> > > +	if (IS_CANNONLAKE(dev_priv))
> > > +		return cnl_adjusted_max_rate(intel_dp);
> > > +
> > > +	return INT_MAX; /* No adjusted limit */
> > >  }
> > >  
> > 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/i915/cnl: Respect VBT max dp rate.
  2018-01-31 21:20 [PATCH] drm/i915/cnl: Respect VBT max dp rate Rodrigo Vivi
                   ` (2 preceding siblings ...)
  2018-02-01  2:53 ` [PATCH] " Pandiyan, Dhinakaran
@ 2018-02-01 11:10 ` Jani Nikula
  3 siblings, 0 replies; 7+ messages in thread
From: Jani Nikula @ 2018-02-01 11:10 UTC (permalink / raw)
  To: intel-gfx; +Cc: Rodrigo Vivi

On Wed, 31 Jan 2018, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> Since commit 'c4fb60b9aba9 ("drm/i915/bios: add DP max link
> rate to VBT child device struct")' we have the new entry
> defined for max dp rate that is in use for CNL.
>
> Let's start using it for all VBT 216+ and
> also organize the cnl adjusted rates in terms of rate
> and not array size.

Rodrigo, I took the liberty of rewriting this into three patches [1]. I
hope you don't mind. I had some of this in mind way back when I rewrote
the source/sink rate handling.

Some notes inline below. I've taken them into account in my series.

BR,
Jani.


[1] http://patchwork.freedesktop.org/patch/msgid/40f37f08cad33234cd86337d39e823ac6e55805f.1517482774.git.jani.nikula@intel.com


>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h   |  1 +
>  drivers/gpu/drm/i915/intel_bios.c |  3 +++
>  drivers/gpu/drm/i915/intel_dp.c   | 37 +++++++++++++++++++++++++++++--------
>  3 files changed, 33 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index c676269ed843..66dea5c9b10e 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1282,6 +1282,7 @@ struct ddi_vbt_port_info {
>  
>  	uint8_t dp_boost_level;
>  	uint8_t hdmi_boost_level;
> +	uint8_t dp_max_link_rate;
>  };
>  
>  enum psr_lines_to_wait {
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index cf3f8f1ba6f7..c885daf4cc8d 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -1230,6 +1230,9 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
>  		info->alternate_aux_channel = aux_channel;
>  
>  		sanitize_aux_ch(dev_priv, port);
> +
> +		if (bdb_version >= 216 && child->dp_max_link_rate)
> +			info->dp_max_link_rate = child->dp_max_link_rate;

The info is two bits in VBT and needs to be translated to rates.

>  	}
>  
>  	if (bdb_version >= 158) {
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 03d86ff9b805..1e34d7954355 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -220,7 +220,7 @@ intel_dp_downstream_max_dotclock(struct intel_dp *intel_dp)
>  	return max_dotclk;
>  }
>  
> -static int cnl_adjusted_max_rate(struct intel_dp *intel_dp, int size)
> +static int cnl_adjusted_max_rate(struct intel_dp *intel_dp)
>  {
>  	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>  	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
> @@ -230,17 +230,33 @@ static int cnl_adjusted_max_rate(struct intel_dp *intel_dp, int size)
>  
>  	/* Low voltage SKUs are limited to max of 5.4G */
>  	if (voltage == VOLTAGE_INFO_0_85V)
> -		return size - 2;
> +		return 540000;
>  
>  	/* For this SKU 8.1G is supported in all ports */
>  	if (IS_CNL_WITH_PORT_F(dev_priv))
> -		return size;
> +		return 810000;
>  
>  	/* For other SKUs, max rate on ports A and B is 5.4G */
>  	if (port == PORT_A || port == PORT_D)
> -		return size - 2;
> +		return 540000;
>  
> -	return size;
> +	return 810000;
> +}
> +
> +static int intel_dp_adjusted_max_rate(struct intel_dp *intel_dp)
> +{
> +	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> +	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
> +	const struct ddi_vbt_port_info *info =
> +		&dev_priv->vbt.ddi_port_info[dig_port->base.port];
> +
> +	if (info->dp_max_link_rate)
> +		return info->dp_max_link_rate;

The VBT value needs mapping, and 0 actually means HBR3 in VBT.

> +
> +	if (IS_CANNONLAKE(dev_priv))
> +		return cnl_adjusted_max_rate(intel_dp);

Like DK noted, I think this should be a min() of the two.

> +
> +	return INT_MAX; /* No adjusted limit */

I really want functions like this to return the actual max rate. I think
returning INT_MAX here is a bit scary.

>  }
>  
>  static void
> @@ -249,7 +265,8 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
>  	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>  	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
>  	const int *source_rates;
> -	int size;
> +	int i, size;
> +	int max_rate = intel_dp_adjusted_max_rate(intel_dp);
>  
>  	/* This should only be done once */
>  	WARN_ON(intel_dp->source_rates || intel_dp->num_source_rates);
> @@ -259,7 +276,7 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
>  		size = ARRAY_SIZE(bxt_rates);
>  	} else if (IS_CANNONLAKE(dev_priv)) {
>  		source_rates = cnl_rates;
> -		size = cnl_adjusted_max_rate(intel_dp, ARRAY_SIZE(cnl_rates));
> +		size = ARRAY_SIZE(cnl_rates);
>  	} else if (IS_GEN9_BC(dev_priv)) {
>  		source_rates = skl_rates;
>  		size = ARRAY_SIZE(skl_rates);
> @@ -272,8 +289,12 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
>  		size = ARRAY_SIZE(default_rates) - 1;
>  	}
>  
> +	for (i = 0; i < size; i++)
> +		if (source_rates[i] > max_rate)
> +			break;

We already have code to do this stuff, so I refactored and reused it.

> +
> +	intel_dp->num_source_rates = i;
>  	intel_dp->source_rates = source_rates;
> -	intel_dp->num_source_rates = size;
>  }
>  
>  static int intersect_rates(const int *source_rates, int source_len,

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-02-01 11:10 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-31 21:20 [PATCH] drm/i915/cnl: Respect VBT max dp rate Rodrigo Vivi
2018-01-31 22:14 ` ✓ Fi.CI.BAT: success for " Patchwork
2018-01-31 23:51 ` ✓ Fi.CI.IGT: " Patchwork
2018-02-01  2:53 ` [PATCH] " Pandiyan, Dhinakaran
2018-02-01  5:22   ` Rodrigo Vivi
2018-02-01  6:10     ` Pandiyan, Dhinakaran
2018-02-01 11:10 ` Jani Nikula

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.