All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915: Detect USB-C specific dongles before reducing M and N
@ 2017-05-10 21:32 clinton.a.taylor
  2017-05-10 21:55 ` ✗ Fi.CI.BAT: failure for " Patchwork
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: clinton.a.taylor @ 2017-05-10 21:32 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Dhinakaran Pandiyan

From: Clint Taylor <clinton.a.taylor@intel.com>

The Analogix 7737 DP to HDMI converter requires reduced N and M values when
to operate correctly at HBR2. Detect this IC by its OUI value of 0x0022B9.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>

Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h      |  3 ++-
 drivers/gpu/drm/i915/intel_display.c | 22 ++++++++++++++--------
 drivers/gpu/drm/i915/intel_dp.c      | 22 ++++++++++++++++++++--
 drivers/gpu/drm/i915/intel_dp_mst.c  |  3 ++-
 drivers/gpu/drm/i915/intel_drv.h     |  1 +
 5 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 74dffbe..492e47e 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -563,7 +563,8 @@ struct intel_link_m_n {
 
 void intel_link_compute_m_n(int bpp, int nlanes,
 			    int pixel_clock, int link_clock,
-			    struct intel_link_m_n *m_n);
+			    struct intel_link_m_n *m_n,
+				bool reduce_m_n);
 
 /* Interface history:
  *
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 7bcc604..8920a99 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6104,7 +6104,7 @@ static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc,
 	pipe_config->fdi_lanes = lane;
 
 	intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock,
-			       link_bw, &pipe_config->fdi_m_n);
+			       link_bw, &pipe_config->fdi_m_n, false);
 
 	ret = ironlake_check_fdi_lanes(dev, intel_crtc->pipe, pipe_config);
 	if (ret == -EINVAL && pipe_config->pipe_bpp > 6*3) {
@@ -6280,7 +6280,8 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
 }
 
 static void compute_m_n(unsigned int m, unsigned int n,
-			uint32_t *ret_m, uint32_t *ret_n)
+			uint32_t *ret_m, uint32_t *ret_n,
+			   bool reduce_m_n)
 {
 	/*
 	 * Reduce M/N as much as possible without loss in precision. Several DP
@@ -6288,9 +6289,11 @@ static void compute_m_n(unsigned int m, unsigned int n,
 	 * values. The passed in values are more likely to have the least
 	 * significant bits zero than M after rounding below, so do this first.
 	 */
-	while ((m & 1) == 0 && (n & 1) == 0) {
-		m >>= 1;
-		n >>= 1;
+	if (reduce_m_n) {
+		while ((m & 1) == 0 && (n & 1) == 0) {
+			m >>= 1;
+			n >>= 1;
+		}
 	}
 
 	*ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
@@ -6301,16 +6304,19 @@ static void compute_m_n(unsigned int m, unsigned int n,
 void
 intel_link_compute_m_n(int bits_per_pixel, int nlanes,
 		       int pixel_clock, int link_clock,
-		       struct intel_link_m_n *m_n)
+		       struct intel_link_m_n *m_n,
+			  bool reduce_m_n)
 {
 	m_n->tu = 64;
 
 	compute_m_n(bits_per_pixel * pixel_clock,
 		    link_clock * nlanes * 8,
-		    &m_n->gmch_m, &m_n->gmch_n);
+		    &m_n->gmch_m, &m_n->gmch_n,
+		    reduce_m_n);
 
 	compute_m_n(pixel_clock, link_clock,
-		    &m_n->link_m, &m_n->link_n);
+		    &m_n->link_m, &m_n->link_n,
+		    reduce_m_n);
 }
 
 static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 4a6feb6..f4c0582 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1548,6 +1548,20 @@ static void intel_dp_print_rates(struct intel_dp *intel_dp)
 	DRM_DEBUG_KMS("common rates: %s\n", str);
 }
 
+bool __intel_reduced_m_n(struct intel_dp *intel_dp)
+{
+	struct intel_dp_desc *desc = &intel_dp->desc;
+	bool ret = false;
+
+	/* Analogix 7737 needs reduced N and M at HBR2 link rates */
+	if (desc->oui[0] == 0x00 &&
+	    desc->oui[1] == 0x22 &&
+	    desc->oui[2] == 0xb9)
+		ret = true;
+
+	return ret;
+}
+
 bool
 __intel_dp_read_desc(struct intel_dp *intel_dp, struct intel_dp_desc *desc)
 {
@@ -1568,6 +1582,8 @@ bool intel_dp_read_desc(struct intel_dp *intel_dp)
 	if (!__intel_dp_read_desc(intel_dp, desc))
 		return false;
 
+	intel_dp->reduce_m_n = __intel_reduced_m_n(intel_dp);
+
 	dev_id_len = strnlen(desc->device_id, sizeof(desc->device_id));
 	DRM_DEBUG_KMS("DP %s: OUI %*phD%s dev-ID %*pE HW-rev %d.%d SW-rev %d.%d\n",
 		      drm_dp_is_branch(intel_dp->dpcd) ? "branch" : "sink",
@@ -1790,7 +1806,8 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
 	intel_link_compute_m_n(bpp, lane_count,
 			       adjusted_mode->crtc_clock,
 			       pipe_config->port_clock,
-			       &pipe_config->dp_m_n);
+			       &pipe_config->dp_m_n,
+				intel_dp->reduce_m_n);
 
 	if (intel_connector->panel.downclock_mode != NULL &&
 		dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) {
@@ -1798,7 +1815,8 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
 			intel_link_compute_m_n(bpp, lane_count,
 				intel_connector->panel.downclock_mode->clock,
 				pipe_config->port_clock,
-				&pipe_config->dp_m2_n2);
+				&pipe_config->dp_m2_n2,
+				intel_dp->reduce_m_n);
 	}
 
 	/*
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 68c788e..81fd8dc 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -79,7 +79,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
 	intel_link_compute_m_n(bpp, lane_count,
 			       adjusted_mode->crtc_clock,
 			       pipe_config->port_clock,
-			       &pipe_config->dp_m_n);
+			       &pipe_config->dp_m_n,
+				intel_dp->reduce_m_n);
 
 	pipe_config->dp_m_n.tu = slots;
 
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index e8de2f67..50e5077 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1057,6 +1057,7 @@ struct intel_dp {
 
 	/* Displayport compliance testing */
 	struct intel_dp_compliance compliance;
+	bool reduce_m_n;
 };
 
 struct intel_lspcon {
-- 
1.9.1

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

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

* ✗ Fi.CI.BAT: failure for drm/i915: Detect USB-C specific dongles before reducing M and N
  2017-05-10 21:32 [PATCH] drm/i915: Detect USB-C specific dongles before reducing M and N clinton.a.taylor
@ 2017-05-10 21:55 ` Patchwork
  2017-05-11  5:41   ` Saarinen, Jani
  2017-05-10 22:55 ` [PATCH] " Pandiyan, Dhinakaran
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Patchwork @ 2017-05-10 21:55 UTC (permalink / raw)
  To: clinton.a.taylor; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Detect USB-C specific dongles before reducing M and N
URL   : https://patchwork.freedesktop.org/series/24254/
State : failure

== Summary ==

Series 24254v1 drm/i915: Detect USB-C specific dongles before reducing M and N
https://patchwork.freedesktop.org/api/1.0/series/24254/revisions/1/mbox/

Test gem_busy:
        Subgroup basic-hang-default:
                pass       -> DMESG-WARN (fi-elk-e7500) fdo#100942 +1
Test gem_close_race:
        Subgroup basic-process:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-threads:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_cpu_reloc:
        Subgroup basic:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_cs_tlb:
        Subgroup basic-default:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_exec_basic:
        Subgroup basic-bsd:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-render:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup gtt-bsd:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup gtt-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup gtt-render:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup readonly-bsd:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup readonly-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup readonly-render:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_exec_create:
        Subgroup basic:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_exec_fence:
        Subgroup basic-busy-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-wait-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-await-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup nb-await-default:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_exec_flush:
        Subgroup basic-batch-kernel-default-uc:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-batch-kernel-default-wb:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-uc-pro-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-uc-prw-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-uc-ro-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-uc-rw-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-uc-set-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-wb-pro-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-wb-prw-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-wb-ro-before-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-wb-ro-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-wb-rw-before-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-wb-rw-default:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-wb-set-default:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_exec_gttfill:
        Subgroup basic:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_exec_nop:
        Subgroup basic-parallel:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-series:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_exec_parallel:
        Subgroup basic:
                pass       -> SKIP       (fi-elk-e7500)
Test gem_exec_reloc:
        Subgroup basic-cpu:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-gtt:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-cpu-gtt:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-gtt-cpu:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-cpu-read:
                pass       -> SKIP       (fi-elk-e7500)
        Subgroup basic-gtt-read:
WARNING: Long output truncated

4149c7b22164d81960dae0987f497725117b68e6 drm-tip: 2017y-05m-10d-18h-09m-15s UTC integration manifest
024dd61 drm/i915: Detect USB-C specific dongles before reducing M and N

== Logs ==

For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_4664/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH] drm/i915: Detect USB-C specific dongles before reducing M and N
  2017-05-10 21:32 [PATCH] drm/i915: Detect USB-C specific dongles before reducing M and N clinton.a.taylor
  2017-05-10 21:55 ` ✗ Fi.CI.BAT: failure for " Patchwork
@ 2017-05-10 22:55 ` Pandiyan, Dhinakaran
  2017-05-11  6:06 ` ✗ Fi.CI.BAT: failure for " Patchwork
  2017-05-11 10:03 ` [PATCH] " Jani Nikula
  3 siblings, 0 replies; 8+ messages in thread
From: Pandiyan, Dhinakaran @ 2017-05-10 22:55 UTC (permalink / raw)
  To: Taylor, Clinton A; +Cc: Nikula, Jani, intel-gfx

On Wed, 2017-05-10 at 14:32 -0700, clinton.a.taylor@intel.com wrote:
> From: Clint Taylor <clinton.a.taylor@intel.com>
> 
> The Analogix 7737 DP to HDMI converter requires reduced N and M values when
> to operate correctly at HBR2. Detect this IC by its OUI value of 0x0022B9.
> 

I like this approach because it does not change the link m/n values for
sinks that were working before "drm/i915/dp: reduce link M/N parameters"
and works around the dongle issue too. 

The other option is to add a quirk for the sink in
(https://bugs.freedesktop.org/show_bug.cgi?id=100755) instead of this
patch.


Assuming we go with this approach, I have added some review comments.

We need the patch to refer to 
1) "commit 9a86cda drm/i915/dp: reduce link M/N parameters"
2) https://bugs.freedesktop.org/show_bug.cgi?id=93578
3) https://bugs.freedesktop.org/show_bug.cgi?id=100755

Fixes and Bugzilla tags perhaps.

> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> 
> Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h      |  3 ++-
>  drivers/gpu/drm/i915/intel_display.c | 22 ++++++++++++++--------
>  drivers/gpu/drm/i915/intel_dp.c      | 22 ++++++++++++++++++++--
>  drivers/gpu/drm/i915/intel_dp_mst.c  |  3 ++-
>  drivers/gpu/drm/i915/intel_drv.h     |  1 +
>  5 files changed, 39 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 74dffbe..492e47e 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -563,7 +563,8 @@ struct intel_link_m_n {
>  
>  void intel_link_compute_m_n(int bpp, int nlanes,
>  			    int pixel_clock, int link_clock,
> -			    struct intel_link_m_n *m_n);
> +			    struct intel_link_m_n *m_n,
> +				bool reduce_m_n);
>  
>  /* Interface history:
>   *
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 7bcc604..8920a99 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -6104,7 +6104,7 @@ static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc,
>  	pipe_config->fdi_lanes = lane;
>  
>  	intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock,
> -			       link_bw, &pipe_config->fdi_m_n);
> +			       link_bw, &pipe_config->fdi_m_n, false);
>  
>  	ret = ironlake_check_fdi_lanes(dev, intel_crtc->pipe, pipe_config);
>  	if (ret == -EINVAL && pipe_config->pipe_bpp > 6*3) {
> @@ -6280,7 +6280,8 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
>  }
>  
>  static void compute_m_n(unsigned int m, unsigned int n,
> -			uint32_t *ret_m, uint32_t *ret_n)
> +			uint32_t *ret_m, uint32_t *ret_n,
> +			   bool reduce_m_n)
>  {
>  	/*
>  	 * Reduce M/N as much as possible without loss in precision. Several DP
> @@ -6288,9 +6289,11 @@ static void compute_m_n(unsigned int m, unsigned int n,
>  	 * values. The passed in values are more likely to have the least
>  	 * significant bits zero than M after rounding below, so do this first.
>  	 */
> -	while ((m & 1) == 0 && (n & 1) == 0) {
> -		m >>= 1;
> -		n >>= 1;
> +	if (reduce_m_n) {
> +		while ((m & 1) == 0 && (n & 1) == 0) {

Can't we get away with reducing just 1 bit here?

> +			m >>= 1;
> +			n >>= 1;
> +		}
>  	}
>  
>  	*ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
> @@ -6301,16 +6304,19 @@ static void compute_m_n(unsigned int m, unsigned int n,
>  void
>  intel_link_compute_m_n(int bits_per_pixel, int nlanes,
>  		       int pixel_clock, int link_clock,
> -		       struct intel_link_m_n *m_n)
> +		       struct intel_link_m_n *m_n,
> +			  bool reduce_m_n)
>  {
>  	m_n->tu = 64;
>  
>  	compute_m_n(bits_per_pixel * pixel_clock,
>  		    link_clock * nlanes * 8,
> -		    &m_n->gmch_m, &m_n->gmch_n);
> +		    &m_n->gmch_m, &m_n->gmch_n,
> +		    reduce_m_n);
>  
>  	compute_m_n(pixel_clock, link_clock,
> -		    &m_n->link_m, &m_n->link_n);
> +		    &m_n->link_m, &m_n->link_n,
> +		    reduce_m_n);
>  }
>  
>  static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 4a6feb6..f4c0582 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1548,6 +1548,20 @@ static void intel_dp_print_rates(struct intel_dp *intel_dp)
>  	DRM_DEBUG_KMS("common rates: %s\n", str);
>  }
>  
> +bool __intel_reduced_m_n(struct intel_dp *intel_dp)

dp_branch_needs_reduced_m_n() ? The naming fits the question-like format
for bool returning functions.

> +{
> +	struct intel_dp_desc *desc = &intel_dp->desc;
> +	bool ret = false;
> +
> +	/* Analogix 7737 needs reduced N and M at HBR2 link rates */
> +	if (desc->oui[0] == 0x00 &&
> +	    desc->oui[1] == 0x22 &&
> +	    desc->oui[2] == 0xb9)
> +		ret = true;
> +
> +	return ret;
> +}
> +
>  bool
>  __intel_dp_read_desc(struct intel_dp *intel_dp, struct intel_dp_desc *desc)
>  {
> @@ -1568,6 +1582,8 @@ bool intel_dp_read_desc(struct intel_dp *intel_dp)
>  	if (!__intel_dp_read_desc(intel_dp, desc))
>  		return false;
>  
> +	intel_dp->reduce_m_n = __intel_reduced_m_n(intel_dp);


As you are setting intel_dp->reduce_m_n in the caller, why not just pass
intel_dp_desc? The function could just be an inline 

	return 	(desc->oui[0] == 0x00 &&
		 desc->oui[1] == 0x22 &&
		 desc->oui[2] == 0xb9)

How about restricting this workaround with a drm_dp_is_branch() ?


> +
>  	dev_id_len = strnlen(desc->device_id, sizeof(desc->device_id));
>  	DRM_DEBUG_KMS("DP %s: OUI %*phD%s dev-ID %*pE HW-rev %d.%d SW-rev %d.%d\n",
>  		      drm_dp_is_branch(intel_dp->dpcd) ? "branch" : "sink",
> @@ -1790,7 +1806,8 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
>  	intel_link_compute_m_n(bpp, lane_count,
>  			       adjusted_mode->crtc_clock,
>  			       pipe_config->port_clock,
> -			       &pipe_config->dp_m_n);
> +			       &pipe_config->dp_m_n,
> +				intel_dp->reduce_m_n);
>  
>  	if (intel_connector->panel.downclock_mode != NULL &&
>  		dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) {
> @@ -1798,7 +1815,8 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
>  			intel_link_compute_m_n(bpp, lane_count,
>  				intel_connector->panel.downclock_mode->clock,
>  				pipe_config->port_clock,
> -				&pipe_config->dp_m2_n2);
> +				&pipe_config->dp_m2_n2,
> +				intel_dp->reduce_m_n);
>  	}
>  
>  	/*
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 68c788e..81fd8dc 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -79,7 +79,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
>  	intel_link_compute_m_n(bpp, lane_count,
>  			       adjusted_mode->crtc_clock,
>  			       pipe_config->port_clock,
> -			       &pipe_config->dp_m_n);
> +			       &pipe_config->dp_m_n,
> +				intel_dp->reduce_m_n);
>  
>  	pipe_config->dp_m_n.tu = slots;
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index e8de2f67..50e5077 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1057,6 +1057,7 @@ struct intel_dp {
>  
>  	/* Displayport compliance testing */
>  	struct intel_dp_compliance compliance;
> +	bool reduce_m_n;
>  };
>  
>  struct intel_lspcon {

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

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

* Re: ✗ Fi.CI.BAT: failure for drm/i915: Detect USB-C specific dongles before reducing M and N
  2017-05-10 21:55 ` ✗ Fi.CI.BAT: failure for " Patchwork
@ 2017-05-11  5:41   ` Saarinen, Jani
  0 siblings, 0 replies; 8+ messages in thread
From: Saarinen, Jani @ 2017-05-11  5:41 UTC (permalink / raw)
  To: intel-gfx, Taylor, Clinton A

HI, 

> -----Original Message-----
> From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Patchwork
> Sent: Thursday, May 11, 2017 12:55 AM
> To: Taylor, Clinton A <clinton.a.taylor@intel.com>
> Cc: intel-gfx@lists.freedesktop.org
> Subject: [Intel-gfx] ✗ Fi.CI.BAT: failure for drm/i915: Detect USB-C specific
> dongles before reducing M and N
> 
> == Series Details ==
> 
> Series: drm/i915: Detect USB-C specific dongles before reducing M and N
> URL   : https://patchwork.freedesktop.org/series/24254/
> State : failure
> 
> == Summary ==
> 
> Series 24254v1 drm/i915: Detect USB-C specific dongles before reducing M
> and N
> https://patchwork.freedesktop.org/api/1.0/series/24254/revisions/1/mbox/
> 
> Test gem_busy:
>         Subgroup basic-hang-default:
>                 pass       -> DMESG-WARN (fi-elk-e7500) fdo#100942 +1
I suppose unstability of ELK causing rest to skip too. 

> Test gem_close_race:
>         Subgroup basic-process:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-threads:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_cpu_reloc:
>         Subgroup basic:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_cs_tlb:
>         Subgroup basic-default:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_exec_basic:
>         Subgroup basic-bsd:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-render:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup gtt-bsd:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup gtt-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup gtt-render:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup readonly-bsd:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup readonly-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup readonly-render:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_exec_create:
>         Subgroup basic:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_exec_fence:
>         Subgroup basic-busy-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-wait-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-await-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup nb-await-default:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_exec_flush:
>         Subgroup basic-batch-kernel-default-uc:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-batch-kernel-default-wb:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-uc-pro-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-uc-prw-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-uc-ro-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-uc-rw-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-uc-set-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-wb-pro-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-wb-prw-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-wb-ro-before-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-wb-ro-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-wb-rw-before-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-wb-rw-default:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-wb-set-default:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_exec_gttfill:
>         Subgroup basic:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_exec_nop:
>         Subgroup basic-parallel:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-series:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_exec_parallel:
>         Subgroup basic:
>                 pass       -> SKIP       (fi-elk-e7500)
> Test gem_exec_reloc:
>         Subgroup basic-cpu:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-gtt:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-cpu-gtt:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-gtt-cpu:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-cpu-read:
>                 pass       -> SKIP       (fi-elk-e7500)
>         Subgroup basic-gtt-read:
> WARNING: Long output truncated
> 
> 4149c7b22164d81960dae0987f497725117b68e6 drm-tip: 2017y-05m-10d-18h-
> 09m-15s UTC integration manifest
> 024dd61 drm/i915: Detect USB-C specific dongles before reducing M and N
> 
> == Logs ==
> 
> For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_4664/


Jani Saarinen
Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo


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

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

* ✗ Fi.CI.BAT: failure for drm/i915: Detect USB-C specific dongles before reducing M and N
  2017-05-10 21:32 [PATCH] drm/i915: Detect USB-C specific dongles before reducing M and N clinton.a.taylor
  2017-05-10 21:55 ` ✗ Fi.CI.BAT: failure for " Patchwork
  2017-05-10 22:55 ` [PATCH] " Pandiyan, Dhinakaran
@ 2017-05-11  6:06 ` Patchwork
  2017-05-11  6:16   ` Saarinen, Jani
  2017-05-11 10:03 ` [PATCH] " Jani Nikula
  3 siblings, 1 reply; 8+ messages in thread
From: Patchwork @ 2017-05-11  6:06 UTC (permalink / raw)
  To: clinton.a.taylor; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Detect USB-C specific dongles before reducing M and N
URL   : https://patchwork.freedesktop.org/series/24254/
State : failure

== Summary ==

Series 24254v1 drm/i915: Detect USB-C specific dongles before reducing M and N
https://patchwork.freedesktop.org/api/1.0/series/24254/revisions/1/mbox/

Test gem_exec_suspend:
        Subgroup basic-s4-devices:
                dmesg-warn -> PASS       (fi-kbl-7560u) fdo#100125
Test kms_flip:
        Subgroup basic-flip-vs-wf_vblank:
                pass       -> INCOMPLETE (fi-bxt-t5700)

fdo#100125 https://bugs.freedesktop.org/show_bug.cgi?id=100125

fi-bdw-5557u     total:278  pass:267  dwarn:0   dfail:0   fail:0   skip:11  time:443s
fi-bdw-gvtdvm    total:278  pass:256  dwarn:8   dfail:0   fail:0   skip:14  time:439s
fi-bsw-n3050     total:278  pass:242  dwarn:0   dfail:0   fail:0   skip:36  time:581s
fi-bxt-j4205     total:278  pass:259  dwarn:0   dfail:0   fail:0   skip:19  time:515s
fi-bxt-t5700     total:209  pass:195  dwarn:0   dfail:0   fail:0   skip:13 
fi-byt-j1900     total:278  pass:254  dwarn:0   dfail:0   fail:0   skip:24  time:492s
fi-byt-n2820     total:278  pass:250  dwarn:0   dfail:0   fail:0   skip:28  time:483s
fi-elk-e7500     total:278  pass:229  dwarn:0   dfail:0   fail:0   skip:49  time:432s
fi-hsw-4770      total:278  pass:262  dwarn:0   dfail:0   fail:0   skip:16  time:415s
fi-hsw-4770r     total:278  pass:262  dwarn:0   dfail:0   fail:0   skip:16  time:414s
fi-ilk-650       total:278  pass:228  dwarn:0   dfail:0   fail:0   skip:50  time:423s
fi-ivb-3520m     total:278  pass:260  dwarn:0   dfail:0   fail:0   skip:18  time:487s
fi-ivb-3770      total:278  pass:260  dwarn:0   dfail:0   fail:0   skip:18  time:476s
fi-kbl-7500u     total:278  pass:260  dwarn:0   dfail:0   fail:0   skip:18  time:462s
fi-kbl-7560u     total:278  pass:268  dwarn:0   dfail:0   fail:0   skip:10  time:580s
fi-skl-6260u     total:278  pass:268  dwarn:0   dfail:0   fail:0   skip:10  time:459s
fi-skl-6700hq    total:278  pass:261  dwarn:0   dfail:0   fail:0   skip:17  time:577s
fi-skl-6700k     total:278  pass:256  dwarn:4   dfail:0   fail:0   skip:18  time:471s
fi-skl-6770hq    total:278  pass:268  dwarn:0   dfail:0   fail:0   skip:10  time:503s
fi-skl-gvtdvm    total:278  pass:265  dwarn:0   dfail:0   fail:0   skip:13  time:438s
fi-snb-2520m     total:278  pass:250  dwarn:0   dfail:0   fail:0   skip:28  time:541s
fi-snb-2600      total:278  pass:249  dwarn:0   dfail:0   fail:0   skip:29  time:408s

4149c7b22164d81960dae0987f497725117b68e6 drm-tip: 2017y-05m-10d-18h-09m-15s UTC integration manifest
d1b8be1 drm/i915: Detect USB-C specific dongles before reducing M and N

== Logs ==

For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_4668/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: ✗ Fi.CI.BAT: failure for drm/i915: Detect USB-C specific dongles before reducing M and N
  2017-05-11  6:06 ` ✗ Fi.CI.BAT: failure for " Patchwork
@ 2017-05-11  6:16   ` Saarinen, Jani
  0 siblings, 0 replies; 8+ messages in thread
From: Saarinen, Jani @ 2017-05-11  6:16 UTC (permalink / raw)
  To: intel-gfx, Taylor, Clinton A

Hi, 
> -----Original Message-----
> From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Patchwork
> Sent: Thursday, May 11, 2017 9:06 AM
> To: Taylor, Clinton A <clinton.a.taylor@intel.com>
> Cc: intel-gfx@lists.freedesktop.org
> Subject: [Intel-gfx] ✗ Fi.CI.BAT: failure for drm/i915: Detect USB-C specific
> dongles before reducing M and N
> 
> == Series Details ==
> 
> Series: drm/i915: Detect USB-C specific dongles before reducing M and N
> URL   : https://patchwork.freedesktop.org/series/24254/
> State : failure
> 
> == Summary ==
> 
> Series 24254v1 drm/i915: Detect USB-C specific dongles before reducing M
> and N
> https://patchwork.freedesktop.org/api/1.0/series/24254/revisions/1/mbox/
> 
> Test gem_exec_suspend:
>         Subgroup basic-s4-devices:
>                 dmesg-warn -> PASS       (fi-kbl-7560u) fdo#100125
> Test kms_flip:
>         Subgroup basic-flip-vs-wf_vblank:
>                 pass       -> INCOMPLETE (fi-bxt-t5700)
Re-run this to see if ELK was happy now as it was. But now Joule is not. 
> 
> fdo#100125 https://bugs.freedesktop.org/show_bug.cgi?id=100125
> 
> fi-bdw-5557u     total:278  pass:267  dwarn:0   dfail:0   fail:0   skip:11  time:443s
> fi-bdw-gvtdvm    total:278  pass:256  dwarn:8   dfail:0   fail:0   skip:14  time:439s
> fi-bsw-n3050     total:278  pass:242  dwarn:0   dfail:0   fail:0   skip:36  time:581s
> fi-bxt-j4205     total:278  pass:259  dwarn:0   dfail:0   fail:0   skip:19  time:515s
> fi-bxt-t5700     total:209  pass:195  dwarn:0   dfail:0   fail:0   skip:13
> fi-byt-j1900     total:278  pass:254  dwarn:0   dfail:0   fail:0   skip:24  time:492s
> fi-byt-n2820     total:278  pass:250  dwarn:0   dfail:0   fail:0   skip:28  time:483s
> fi-elk-e7500     total:278  pass:229  dwarn:0   dfail:0   fail:0   skip:49  time:432s
> fi-hsw-4770      total:278  pass:262  dwarn:0   dfail:0   fail:0   skip:16  time:415s
> fi-hsw-4770r     total:278  pass:262  dwarn:0   dfail:0   fail:0   skip:16  time:414s
> fi-ilk-650       total:278  pass:228  dwarn:0   dfail:0   fail:0   skip:50  time:423s
> fi-ivb-3520m     total:278  pass:260  dwarn:0   dfail:0   fail:0   skip:18  time:487s
> fi-ivb-3770      total:278  pass:260  dwarn:0   dfail:0   fail:0   skip:18  time:476s
> fi-kbl-7500u     total:278  pass:260  dwarn:0   dfail:0   fail:0   skip:18  time:462s
> fi-kbl-7560u     total:278  pass:268  dwarn:0   dfail:0   fail:0   skip:10  time:580s
> fi-skl-6260u     total:278  pass:268  dwarn:0   dfail:0   fail:0   skip:10  time:459s
> fi-skl-6700hq    total:278  pass:261  dwarn:0   dfail:0   fail:0   skip:17  time:577s
> fi-skl-6700k     total:278  pass:256  dwarn:4   dfail:0   fail:0   skip:18  time:471s
> fi-skl-6770hq    total:278  pass:268  dwarn:0   dfail:0   fail:0   skip:10  time:503s
> fi-skl-gvtdvm    total:278  pass:265  dwarn:0   dfail:0   fail:0   skip:13  time:438s
> fi-snb-2520m     total:278  pass:250  dwarn:0   dfail:0   fail:0   skip:28  time:541s
> fi-snb-2600      total:278  pass:249  dwarn:0   dfail:0   fail:0   skip:29  time:408s
> 
> 4149c7b22164d81960dae0987f497725117b68e6 drm-tip: 2017y-05m-10d-18h-
> 09m-15s UTC integration manifest
> d1b8be1 drm/i915: Detect USB-C specific dongles before reducing M and N
> 
> == Logs ==
> 
> For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_4668/

Jani Saarinen
Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo



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

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

* Re: [PATCH] drm/i915: Detect USB-C specific dongles before reducing M and N
  2017-05-10 21:32 [PATCH] drm/i915: Detect USB-C specific dongles before reducing M and N clinton.a.taylor
                   ` (2 preceding siblings ...)
  2017-05-11  6:06 ` ✗ Fi.CI.BAT: failure for " Patchwork
@ 2017-05-11 10:03 ` Jani Nikula
  2017-05-11 16:21   ` Clint Taylor
  3 siblings, 1 reply; 8+ messages in thread
From: Jani Nikula @ 2017-05-11 10:03 UTC (permalink / raw)
  To: clinton.a.taylor, intel-gfx; +Cc: Dhinakaran Pandiyan

On Wed, 10 May 2017, clinton.a.taylor@intel.com wrote:
> From: Clint Taylor <clinton.a.taylor@intel.com>
>
> The Analogix 7737 DP to HDMI converter requires reduced N and M values when
> to operate correctly at HBR2. Detect this IC by its OUI value of 0x0022B9.

I'm not happy, but I also see no alternative than to go this
route. Thanks for the patch. I do think we need to start a common drm
quirk database for this stuff though. Added one, and rebased this one on
top:

https://patchwork.freedesktop.org/series/24282/

Please give it a go; I don't have a DA200.


BR,
Jani.

>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
>
> Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h      |  3 ++-
>  drivers/gpu/drm/i915/intel_display.c | 22 ++++++++++++++--------
>  drivers/gpu/drm/i915/intel_dp.c      | 22 ++++++++++++++++++++--
>  drivers/gpu/drm/i915/intel_dp_mst.c  |  3 ++-
>  drivers/gpu/drm/i915/intel_drv.h     |  1 +
>  5 files changed, 39 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 74dffbe..492e47e 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -563,7 +563,8 @@ struct intel_link_m_n {
>  
>  void intel_link_compute_m_n(int bpp, int nlanes,
>  			    int pixel_clock, int link_clock,
> -			    struct intel_link_m_n *m_n);
> +			    struct intel_link_m_n *m_n,
> +				bool reduce_m_n);
>  
>  /* Interface history:
>   *
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 7bcc604..8920a99 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -6104,7 +6104,7 @@ static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc,
>  	pipe_config->fdi_lanes = lane;
>  
>  	intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock,
> -			       link_bw, &pipe_config->fdi_m_n);
> +			       link_bw, &pipe_config->fdi_m_n, false);
>  
>  	ret = ironlake_check_fdi_lanes(dev, intel_crtc->pipe, pipe_config);
>  	if (ret == -EINVAL && pipe_config->pipe_bpp > 6*3) {
> @@ -6280,7 +6280,8 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
>  }
>  
>  static void compute_m_n(unsigned int m, unsigned int n,
> -			uint32_t *ret_m, uint32_t *ret_n)
> +			uint32_t *ret_m, uint32_t *ret_n,
> +			   bool reduce_m_n)
>  {
>  	/*
>  	 * Reduce M/N as much as possible without loss in precision. Several DP
> @@ -6288,9 +6289,11 @@ static void compute_m_n(unsigned int m, unsigned int n,
>  	 * values. The passed in values are more likely to have the least
>  	 * significant bits zero than M after rounding below, so do this first.
>  	 */
> -	while ((m & 1) == 0 && (n & 1) == 0) {
> -		m >>= 1;
> -		n >>= 1;
> +	if (reduce_m_n) {
> +		while ((m & 1) == 0 && (n & 1) == 0) {
> +			m >>= 1;
> +			n >>= 1;
> +		}
>  	}
>  
>  	*ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
> @@ -6301,16 +6304,19 @@ static void compute_m_n(unsigned int m, unsigned int n,
>  void
>  intel_link_compute_m_n(int bits_per_pixel, int nlanes,
>  		       int pixel_clock, int link_clock,
> -		       struct intel_link_m_n *m_n)
> +		       struct intel_link_m_n *m_n,
> +			  bool reduce_m_n)
>  {
>  	m_n->tu = 64;
>  
>  	compute_m_n(bits_per_pixel * pixel_clock,
>  		    link_clock * nlanes * 8,
> -		    &m_n->gmch_m, &m_n->gmch_n);
> +		    &m_n->gmch_m, &m_n->gmch_n,
> +		    reduce_m_n);
>  
>  	compute_m_n(pixel_clock, link_clock,
> -		    &m_n->link_m, &m_n->link_n);
> +		    &m_n->link_m, &m_n->link_n,
> +		    reduce_m_n);
>  }
>  
>  static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 4a6feb6..f4c0582 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1548,6 +1548,20 @@ static void intel_dp_print_rates(struct intel_dp *intel_dp)
>  	DRM_DEBUG_KMS("common rates: %s\n", str);
>  }
>  
> +bool __intel_reduced_m_n(struct intel_dp *intel_dp)
> +{
> +	struct intel_dp_desc *desc = &intel_dp->desc;
> +	bool ret = false;
> +
> +	/* Analogix 7737 needs reduced N and M at HBR2 link rates */
> +	if (desc->oui[0] == 0x00 &&
> +	    desc->oui[1] == 0x22 &&
> +	    desc->oui[2] == 0xb9)
> +		ret = true;
> +
> +	return ret;
> +}
> +
>  bool
>  __intel_dp_read_desc(struct intel_dp *intel_dp, struct intel_dp_desc *desc)
>  {
> @@ -1568,6 +1582,8 @@ bool intel_dp_read_desc(struct intel_dp *intel_dp)
>  	if (!__intel_dp_read_desc(intel_dp, desc))
>  		return false;
>  
> +	intel_dp->reduce_m_n = __intel_reduced_m_n(intel_dp);
> +
>  	dev_id_len = strnlen(desc->device_id, sizeof(desc->device_id));
>  	DRM_DEBUG_KMS("DP %s: OUI %*phD%s dev-ID %*pE HW-rev %d.%d SW-rev %d.%d\n",
>  		      drm_dp_is_branch(intel_dp->dpcd) ? "branch" : "sink",
> @@ -1790,7 +1806,8 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
>  	intel_link_compute_m_n(bpp, lane_count,
>  			       adjusted_mode->crtc_clock,
>  			       pipe_config->port_clock,
> -			       &pipe_config->dp_m_n);
> +			       &pipe_config->dp_m_n,
> +				intel_dp->reduce_m_n);
>  
>  	if (intel_connector->panel.downclock_mode != NULL &&
>  		dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) {
> @@ -1798,7 +1815,8 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
>  			intel_link_compute_m_n(bpp, lane_count,
>  				intel_connector->panel.downclock_mode->clock,
>  				pipe_config->port_clock,
> -				&pipe_config->dp_m2_n2);
> +				&pipe_config->dp_m2_n2,
> +				intel_dp->reduce_m_n);
>  	}
>  
>  	/*
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 68c788e..81fd8dc 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -79,7 +79,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
>  	intel_link_compute_m_n(bpp, lane_count,
>  			       adjusted_mode->crtc_clock,
>  			       pipe_config->port_clock,
> -			       &pipe_config->dp_m_n);
> +			       &pipe_config->dp_m_n,
> +				intel_dp->reduce_m_n);
>  
>  	pipe_config->dp_m_n.tu = slots;
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index e8de2f67..50e5077 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1057,6 +1057,7 @@ struct intel_dp {
>  
>  	/* Displayport compliance testing */
>  	struct intel_dp_compliance compliance;
> +	bool reduce_m_n;
>  };
>  
>  struct intel_lspcon {

-- 
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] 8+ messages in thread

* Re: [PATCH] drm/i915: Detect USB-C specific dongles before reducing M and N
  2017-05-11 10:03 ` [PATCH] " Jani Nikula
@ 2017-05-11 16:21   ` Clint Taylor
  0 siblings, 0 replies; 8+ messages in thread
From: Clint Taylor @ 2017-05-11 16:21 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx; +Cc: Dhinakaran Pandiyan



On 05/11/2017 03:03 AM, Jani Nikula wrote:
> On Wed, 10 May 2017, clinton.a.taylor@intel.com wrote:
>> From: Clint Taylor <clinton.a.taylor@intel.com>
>>
>> The Analogix 7737 DP to HDMI converter requires reduced N and M values when
>> to operate correctly at HBR2. Detect this IC by its OUI value of 0x0022B9.
> I'm not happy, but I also see no alternative than to go this
> route. Thanks for the patch. I do think we need to start a common drm
> quirk database for this stuff though. Added one, and rebased this one on
> top:
>
> https://patchwork.freedesktop.org/series/24282/
>
> Please give it a go; I don't have a DA200.

patches work as expected. quirks is set correctly when OUI 0x0022B9 
based DA200 and SlimPort USB-C dongles are used. All other dongles 
tested do not set quirks.

[   64.569833] [drm:intel_dp_read_desc] DP branch: OUI 00-1c-f8 dev-ID 
176GB0 HW-rev 1.0 SW-rev 7.38 quirks 0x0000

[  111.053902] [drm:intel_dp_read_desc] DP branch: OUI 00-22-b9 dev-ID 
7737 HW-rev 10.12 SW-rev 6.4 quirks 0x0001

-Clint

>
>
> BR,
> Jani.
>
>> Cc: Jani Nikula <jani.nikula@intel.com>
>> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
>>
>> Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
>> ---
>>   drivers/gpu/drm/i915/i915_drv.h      |  3 ++-
>>   drivers/gpu/drm/i915/intel_display.c | 22 ++++++++++++++--------
>>   drivers/gpu/drm/i915/intel_dp.c      | 22 ++++++++++++++++++++--
>>   drivers/gpu/drm/i915/intel_dp_mst.c  |  3 ++-
>>   drivers/gpu/drm/i915/intel_drv.h     |  1 +
>>   5 files changed, 39 insertions(+), 12 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>> index 74dffbe..492e47e 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -563,7 +563,8 @@ struct intel_link_m_n {
>>   
>>   void intel_link_compute_m_n(int bpp, int nlanes,
>>   			    int pixel_clock, int link_clock,
>> -			    struct intel_link_m_n *m_n);
>> +			    struct intel_link_m_n *m_n,
>> +				bool reduce_m_n);
>>   
>>   /* Interface history:
>>    *
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index 7bcc604..8920a99 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -6104,7 +6104,7 @@ static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc,
>>   	pipe_config->fdi_lanes = lane;
>>   
>>   	intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock,
>> -			       link_bw, &pipe_config->fdi_m_n);
>> +			       link_bw, &pipe_config->fdi_m_n, false);
>>   
>>   	ret = ironlake_check_fdi_lanes(dev, intel_crtc->pipe, pipe_config);
>>   	if (ret == -EINVAL && pipe_config->pipe_bpp > 6*3) {
>> @@ -6280,7 +6280,8 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
>>   }
>>   
>>   static void compute_m_n(unsigned int m, unsigned int n,
>> -			uint32_t *ret_m, uint32_t *ret_n)
>> +			uint32_t *ret_m, uint32_t *ret_n,
>> +			   bool reduce_m_n)
>>   {
>>   	/*
>>   	 * Reduce M/N as much as possible without loss in precision. Several DP
>> @@ -6288,9 +6289,11 @@ static void compute_m_n(unsigned int m, unsigned int n,
>>   	 * values. The passed in values are more likely to have the least
>>   	 * significant bits zero than M after rounding below, so do this first.
>>   	 */
>> -	while ((m & 1) == 0 && (n & 1) == 0) {
>> -		m >>= 1;
>> -		n >>= 1;
>> +	if (reduce_m_n) {
>> +		while ((m & 1) == 0 && (n & 1) == 0) {
>> +			m >>= 1;
>> +			n >>= 1;
>> +		}
>>   	}
>>   
>>   	*ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
>> @@ -6301,16 +6304,19 @@ static void compute_m_n(unsigned int m, unsigned int n,
>>   void
>>   intel_link_compute_m_n(int bits_per_pixel, int nlanes,
>>   		       int pixel_clock, int link_clock,
>> -		       struct intel_link_m_n *m_n)
>> +		       struct intel_link_m_n *m_n,
>> +			  bool reduce_m_n)
>>   {
>>   	m_n->tu = 64;
>>   
>>   	compute_m_n(bits_per_pixel * pixel_clock,
>>   		    link_clock * nlanes * 8,
>> -		    &m_n->gmch_m, &m_n->gmch_n);
>> +		    &m_n->gmch_m, &m_n->gmch_n,
>> +		    reduce_m_n);
>>   
>>   	compute_m_n(pixel_clock, link_clock,
>> -		    &m_n->link_m, &m_n->link_n);
>> +		    &m_n->link_m, &m_n->link_n,
>> +		    reduce_m_n);
>>   }
>>   
>>   static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
>> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
>> index 4a6feb6..f4c0582 100644
>> --- a/drivers/gpu/drm/i915/intel_dp.c
>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>> @@ -1548,6 +1548,20 @@ static void intel_dp_print_rates(struct intel_dp *intel_dp)
>>   	DRM_DEBUG_KMS("common rates: %s\n", str);
>>   }
>>   
>> +bool __intel_reduced_m_n(struct intel_dp *intel_dp)
>> +{
>> +	struct intel_dp_desc *desc = &intel_dp->desc;
>> +	bool ret = false;
>> +
>> +	/* Analogix 7737 needs reduced N and M at HBR2 link rates */
>> +	if (desc->oui[0] == 0x00 &&
>> +	    desc->oui[1] == 0x22 &&
>> +	    desc->oui[2] == 0xb9)
>> +		ret = true;
>> +
>> +	return ret;
>> +}
>> +
>>   bool
>>   __intel_dp_read_desc(struct intel_dp *intel_dp, struct intel_dp_desc *desc)
>>   {
>> @@ -1568,6 +1582,8 @@ bool intel_dp_read_desc(struct intel_dp *intel_dp)
>>   	if (!__intel_dp_read_desc(intel_dp, desc))
>>   		return false;
>>   
>> +	intel_dp->reduce_m_n = __intel_reduced_m_n(intel_dp);
>> +
>>   	dev_id_len = strnlen(desc->device_id, sizeof(desc->device_id));
>>   	DRM_DEBUG_KMS("DP %s: OUI %*phD%s dev-ID %*pE HW-rev %d.%d SW-rev %d.%d\n",
>>   		      drm_dp_is_branch(intel_dp->dpcd) ? "branch" : "sink",
>> @@ -1790,7 +1806,8 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
>>   	intel_link_compute_m_n(bpp, lane_count,
>>   			       adjusted_mode->crtc_clock,
>>   			       pipe_config->port_clock,
>> -			       &pipe_config->dp_m_n);
>> +			       &pipe_config->dp_m_n,
>> +				intel_dp->reduce_m_n);
>>   
>>   	if (intel_connector->panel.downclock_mode != NULL &&
>>   		dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) {
>> @@ -1798,7 +1815,8 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
>>   			intel_link_compute_m_n(bpp, lane_count,
>>   				intel_connector->panel.downclock_mode->clock,
>>   				pipe_config->port_clock,
>> -				&pipe_config->dp_m2_n2);
>> +				&pipe_config->dp_m2_n2,
>> +				intel_dp->reduce_m_n);
>>   	}
>>   
>>   	/*
>> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
>> index 68c788e..81fd8dc 100644
>> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
>> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
>> @@ -79,7 +79,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
>>   	intel_link_compute_m_n(bpp, lane_count,
>>   			       adjusted_mode->crtc_clock,
>>   			       pipe_config->port_clock,
>> -			       &pipe_config->dp_m_n);
>> +			       &pipe_config->dp_m_n,
>> +				intel_dp->reduce_m_n);
>>   
>>   	pipe_config->dp_m_n.tu = slots;
>>   
>> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
>> index e8de2f67..50e5077 100644
>> --- a/drivers/gpu/drm/i915/intel_drv.h
>> +++ b/drivers/gpu/drm/i915/intel_drv.h
>> @@ -1057,6 +1057,7 @@ struct intel_dp {
>>   
>>   	/* Displayport compliance testing */
>>   	struct intel_dp_compliance compliance;
>> +	bool reduce_m_n;
>>   };
>>   
>>   struct intel_lspcon {

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

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

end of thread, other threads:[~2017-05-11 16:21 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-10 21:32 [PATCH] drm/i915: Detect USB-C specific dongles before reducing M and N clinton.a.taylor
2017-05-10 21:55 ` ✗ Fi.CI.BAT: failure for " Patchwork
2017-05-11  5:41   ` Saarinen, Jani
2017-05-10 22:55 ` [PATCH] " Pandiyan, Dhinakaran
2017-05-11  6:06 ` ✗ Fi.CI.BAT: failure for " Patchwork
2017-05-11  6:16   ` Saarinen, Jani
2017-05-11 10:03 ` [PATCH] " Jani Nikula
2017-05-11 16:21   ` Clint Taylor

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.