intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
@ 2014-08-19 21:21 clinton.a.taylor
  2014-08-26  8:10 ` Daniel Vetter
  2014-09-01 13:19 ` [Intel-gfx] " Ville Syrjälä
  0 siblings, 2 replies; 13+ messages in thread
From: clinton.a.taylor @ 2014-08-19 21:21 UTC (permalink / raw)
  To: Intel-gfx

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

Pixel replicated modes should be 720 horizontal pixel and pixel
replicated by the HW across the HDMI cable at 2X pixel clock. Current
horizontal resolution of 1440 does not allow pixel duplication to
occur and scaling artifacts occur on the TV. HDMI certification
7-26 currently fails for all pixel replicated modes. This change fizes
the HDMI certification issues with 480i/576i.

V2: Removed interlace flag from VICs 44 and 45. Will be submitted in
another patch. Various other formatting fixes.

V3: 576i@200 htotal fixed. Check min and max pixel clocks.

Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
---
 drivers/gpu/drm/drm_edid.c        |   96 ++++++++++++++++++-------------------
 drivers/gpu/drm/i915/intel_hdmi.c |   15 ++++--
 2 files changed, 60 insertions(+), 51 deletions(-)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index f905c63..dc25999 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -632,27 +632,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
 			DRM_MODE_FLAG_INTERLACE),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 6 - 1440x480i@60Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 6 - 720(1440)x480i@60Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 7 - 1440x480i@60Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 7 - 720(1440)x480i@60Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 8 - 1440x240@60Hz */
-	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 240, 244, 247, 262, 0,
+	/* 8 - 720(1440)x240@60Hz */
+	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 240, 244, 247, 262, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 9 - 1440x240@60Hz */
-	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 240, 244, 247, 262, 0,
+	/* 9 - 720(1440)x240@60Hz */
+	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 240, 244, 247, 262, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -714,27 +714,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
 			DRM_MODE_FLAG_INTERLACE),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 21 - 1440x576i@50Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 21 - 720(1440)x576i@50Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 22 - 1440x576i@50Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 22 - 720(1440)x576i@50Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 23 - 1440x288@50Hz */
-	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 288, 290, 293, 312, 0,
+	/* 23 - 720(1440)x288@50Hz */
+	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 288, 290, 293, 312, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 24 - 1440x288@50Hz */
-	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 288, 290, 293, 312, 0,
+	/* 24 - 720(1440)x288@50Hz */
+	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 288, 290, 293, 312, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -837,15 +837,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   796, 864, 0, 576, 581, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 44 - 1440x576i@100Hz */
-	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 44 - 720(1440)x576i@100Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 45 - 1440x576i@100Hz */
-	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 45 - 720(1440)x576i@100Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -870,15 +870,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   798, 858, 0, 480, 489, 495, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 50 - 1440x480i@120Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 50 - 720(1440)x480i@120Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 51 - 1440x480i@120Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 51 - 720(1440)x480i@120Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -892,15 +892,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   796, 864, 0, 576, 581, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 54 - 1440x576i@200Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 54 - 720(1440)x576i@200Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 55 - 1440x576i@200Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 55 - 720(1440)x576i@200Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -914,15 +914,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   798, 858, 0, 480, 489, 495, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 58 - 1440x480i@240 */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 58 - 720(1440)x480i@240 */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 59 - 1440x480i@240 */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 59 - 720(1440)x480i@240 */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 9169786..9695768 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -864,10 +864,15 @@ static enum drm_mode_status
 intel_hdmi_mode_valid(struct drm_connector *connector,
 		      struct drm_display_mode *mode)
 {
-	if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
-					       true))
+	int clock = mode->clock;
+
+	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
+		clock *= 2;
+
+	if (clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
+					 true))
 		return MODE_CLOCK_HIGH;
-	if (mode->clock < 20000)
+	if (clock < 20000)
 		return MODE_CLOCK_LOW;
 
 	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
@@ -921,6 +926,10 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
 			intel_hdmi->color_range = 0;
 	}
 
+	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
+		pipe_config->pixel_multiplier = 2;
+	}
+
 	if (intel_hdmi->color_range)
 		pipe_config->limited_color_range = true;
 
-- 
1.7.9.5

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

* Re: [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
  2014-08-19 21:21 [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes clinton.a.taylor
@ 2014-08-26  8:10 ` Daniel Vetter
  2014-08-26  8:11   ` Daniel Vetter
  2014-09-01 13:19 ` [Intel-gfx] " Ville Syrjälä
  1 sibling, 1 reply; 13+ messages in thread
From: Daniel Vetter @ 2014-08-26  8:10 UTC (permalink / raw)
  To: clinton.a.taylor; +Cc: Intel-gfx

On Tue, Aug 19, 2014 at 02:21:21PM -0700, clinton.a.taylor@intel.com wrote:
> From: Clint Taylor <clinton.a.taylor@intel.com>
> 
> Pixel replicated modes should be 720 horizontal pixel and pixel
> replicated by the HW across the HDMI cable at 2X pixel clock. Current
> horizontal resolution of 1440 does not allow pixel duplication to
> occur and scaling artifacts occur on the TV. HDMI certification
> 7-26 currently fails for all pixel replicated modes. This change fizes
> the HDMI certification issues with 480i/576i.
> 
> V2: Removed interlace flag from VICs 44 and 45. Will be submitted in
> another patch. Various other formatting fixes.
> 
> V3: 576i@200 htotal fixed. Check min and max pixel clocks.
> 
> Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
> ---
>  drivers/gpu/drm/drm_edid.c        |   96 ++++++++++++++++++-------------------
>  drivers/gpu/drm/i915/intel_hdmi.c |   15 ++++--

Still plea to split out the i915 change.

Thanks, Daniel

>  2 files changed, 60 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index f905c63..dc25999 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -632,27 +632,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
>  			DRM_MODE_FLAG_INTERLACE),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 6 - 1440x480i@60Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 6 - 720(1440)x480i@60Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 7 - 1440x480i@60Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 7 - 720(1440)x480i@60Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 8 - 1440x240@60Hz */
> -	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 240, 244, 247, 262, 0,
> +	/* 8 - 720(1440)x240@60Hz */
> +	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 240, 244, 247, 262, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 9 - 1440x240@60Hz */
> -	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 240, 244, 247, 262, 0,
> +	/* 9 - 720(1440)x240@60Hz */
> +	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 240, 244, 247, 262, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -714,27 +714,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
>  			DRM_MODE_FLAG_INTERLACE),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 21 - 1440x576i@50Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 21 - 720(1440)x576i@50Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 22 - 1440x576i@50Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 22 - 720(1440)x576i@50Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 23 - 1440x288@50Hz */
> -	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 288, 290, 293, 312, 0,
> +	/* 23 - 720(1440)x288@50Hz */
> +	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 288, 290, 293, 312, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 24 - 1440x288@50Hz */
> -	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 288, 290, 293, 312, 0,
> +	/* 24 - 720(1440)x288@50Hz */
> +	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 288, 290, 293, 312, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -837,15 +837,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   796, 864, 0, 576, 581, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 44 - 1440x576i@100Hz */
> -	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 44 - 720(1440)x576i@100Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 45 - 1440x576i@100Hz */
> -	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 45 - 720(1440)x576i@100Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -870,15 +870,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   798, 858, 0, 480, 489, 495, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 50 - 1440x480i@120Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 50 - 720(1440)x480i@120Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 51 - 1440x480i@120Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 51 - 720(1440)x480i@120Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -892,15 +892,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   796, 864, 0, 576, 581, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 54 - 1440x576i@200Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 54 - 720(1440)x576i@200Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 55 - 1440x576i@200Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 55 - 720(1440)x576i@200Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -914,15 +914,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   798, 858, 0, 480, 489, 495, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 58 - 1440x480i@240 */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 58 - 720(1440)x480i@240 */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 59 - 1440x480i@240 */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 59 - 720(1440)x480i@240 */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 9169786..9695768 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -864,10 +864,15 @@ static enum drm_mode_status
>  intel_hdmi_mode_valid(struct drm_connector *connector,
>  		      struct drm_display_mode *mode)
>  {
> -	if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
> -					       true))
> +	int clock = mode->clock;
> +
> +	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
> +		clock *= 2;
> +
> +	if (clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
> +					 true))
>  		return MODE_CLOCK_HIGH;
> -	if (mode->clock < 20000)
> +	if (clock < 20000)
>  		return MODE_CLOCK_LOW;
>  
>  	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> @@ -921,6 +926,10 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
>  			intel_hdmi->color_range = 0;
>  	}
>  
> +	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
> +		pipe_config->pixel_multiplier = 2;
> +	}
> +
>  	if (intel_hdmi->color_range)
>  		pipe_config->limited_color_range = true;
>  
> -- 
> 1.7.9.5
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

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

* Re: [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
  2014-08-26  8:10 ` Daniel Vetter
@ 2014-08-26  8:11   ` Daniel Vetter
  2014-09-01 13:12     ` Ville Syrjälä
  0 siblings, 1 reply; 13+ messages in thread
From: Daniel Vetter @ 2014-08-26  8:11 UTC (permalink / raw)
  To: clinton.a.taylor; +Cc: Intel-gfx

On Tue, Aug 26, 2014 at 10:10:09AM +0200, Daniel Vetter wrote:
> On Tue, Aug 19, 2014 at 02:21:21PM -0700, clinton.a.taylor@intel.com wrote:
> > From: Clint Taylor <clinton.a.taylor@intel.com>
> > 
> > Pixel replicated modes should be 720 horizontal pixel and pixel
> > replicated by the HW across the HDMI cable at 2X pixel clock. Current
> > horizontal resolution of 1440 does not allow pixel duplication to
> > occur and scaling artifacts occur on the TV. HDMI certification
> > 7-26 currently fails for all pixel replicated modes. This change fizes
> > the HDMI certification issues with 480i/576i.
> > 
> > V2: Removed interlace flag from VICs 44 and 45. Will be submitted in
> > another patch. Various other formatting fixes.
> > 
> > V3: 576i@200 htotal fixed. Check min and max pixel clocks.
> > 
> > Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
> > ---
> >  drivers/gpu/drm/drm_edid.c        |   96 ++++++++++++++++++-------------------
> >  drivers/gpu/drm/i915/intel_hdmi.c |   15 ++++--
> 
> Still plea to split out the i915 change.

Also it's good practice to add all the people who commented on earlier
versions of this patch to the in-patch Cc: list. So Ville should be here
for this one.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

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

* Re: [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
  2014-08-26  8:11   ` Daniel Vetter
@ 2014-09-01 13:12     ` Ville Syrjälä
  2014-09-01 13:17       ` Ville Syrjälä
  0 siblings, 1 reply; 13+ messages in thread
From: Ville Syrjälä @ 2014-09-01 13:12 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: Intel-gfx

On Tue, Aug 26, 2014 at 10:11:07AM +0200, Daniel Vetter wrote:
> On Tue, Aug 26, 2014 at 10:10:09AM +0200, Daniel Vetter wrote:
> > On Tue, Aug 19, 2014 at 02:21:21PM -0700, clinton.a.taylor@intel.com wrote:
> > > From: Clint Taylor <clinton.a.taylor@intel.com>
> > > 
> > > Pixel replicated modes should be 720 horizontal pixel and pixel
> > > replicated by the HW across the HDMI cable at 2X pixel clock. Current
> > > horizontal resolution of 1440 does not allow pixel duplication to
> > > occur and scaling artifacts occur on the TV. HDMI certification
> > > 7-26 currently fails for all pixel replicated modes. This change fizes
> > > the HDMI certification issues with 480i/576i.
> > > 
> > > V2: Removed interlace flag from VICs 44 and 45. Will be submitted in
> > > another patch. Various other formatting fixes.
> > > 
> > > V3: 576i@200 htotal fixed. Check min and max pixel clocks.
> > > 
> > > Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
> > > ---
> > >  drivers/gpu/drm/drm_edid.c        |   96 ++++++++++++++++++-------------------
> > >  drivers/gpu/drm/i915/intel_hdmi.c |   15 ++++--
> > 
> > Still plea to split out the i915 change.
> 
> Also it's good practice to add all the people who commented on earlier
> versions of this patch to the in-patch Cc: list. So Ville should be here
> for this one.

Also I've totally lost track of these now. Please use --in-reply-to
when sending revised patches.

-- 
Ville Syrjälä
Intel OTC

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

* Re: [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
  2014-09-01 13:12     ` Ville Syrjälä
@ 2014-09-01 13:17       ` Ville Syrjälä
       [not found]         ` <5408AAF6.2070300@intel.com>
  0 siblings, 1 reply; 13+ messages in thread
From: Ville Syrjälä @ 2014-09-01 13:17 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: Intel-gfx

On Mon, Sep 01, 2014 at 04:12:27PM +0300, Ville Syrjälä wrote:
> On Tue, Aug 26, 2014 at 10:11:07AM +0200, Daniel Vetter wrote:
> > On Tue, Aug 26, 2014 at 10:10:09AM +0200, Daniel Vetter wrote:
> > > On Tue, Aug 19, 2014 at 02:21:21PM -0700, clinton.a.taylor@intel.com wrote:
> > > > From: Clint Taylor <clinton.a.taylor@intel.com>
> > > > 
> > > > Pixel replicated modes should be 720 horizontal pixel and pixel
> > > > replicated by the HW across the HDMI cable at 2X pixel clock. Current
> > > > horizontal resolution of 1440 does not allow pixel duplication to
> > > > occur and scaling artifacts occur on the TV. HDMI certification
> > > > 7-26 currently fails for all pixel replicated modes. This change fizes
> > > > the HDMI certification issues with 480i/576i.
> > > > 
> > > > V2: Removed interlace flag from VICs 44 and 45. Will be submitted in
> > > > another patch. Various other formatting fixes.
> > > > 
> > > > V3: 576i@200 htotal fixed. Check min and max pixel clocks.
> > > > 
> > > > Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
> > > > ---
> > > >  drivers/gpu/drm/drm_edid.c        |   96 ++++++++++++++++++-------------------
> > > >  drivers/gpu/drm/i915/intel_hdmi.c |   15 ++++--
> > > 
> > > Still plea to split out the i915 change.
> > 
> > Also it's good practice to add all the people who commented on earlier
> > versions of this patch to the in-patch Cc: list. So Ville should be here
> > for this one.
> 
> Also I've totally lost track of these now. Please use --in-reply-to
> when sending revised patches.

Oh and please use --to --cc etc. also instead of sending the same patch
separately to multiple lists.

-- 
Ville Syrjälä
Intel OTC

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

* Re: [Intel-gfx] [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
  2014-08-19 21:21 [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes clinton.a.taylor
  2014-08-26  8:10 ` Daniel Vetter
@ 2014-09-01 13:19 ` Ville Syrjälä
  1 sibling, 0 replies; 13+ messages in thread
From: Ville Syrjälä @ 2014-09-01 13:19 UTC (permalink / raw)
  To: clinton.a.taylor; +Cc: Intel-gfx, dri-devel

On Tue, Aug 19, 2014 at 02:21:21PM -0700, clinton.a.taylor@intel.com wrote:
> From: Clint Taylor <clinton.a.taylor@intel.com>
> 
> Pixel replicated modes should be 720 horizontal pixel and pixel
> replicated by the HW across the HDMI cable at 2X pixel clock. Current
> horizontal resolution of 1440 does not allow pixel duplication to
> occur and scaling artifacts occur on the TV. HDMI certification
> 7-26 currently fails for all pixel replicated modes. This change fizes
> the HDMI certification issues with 480i/576i.
> 
> V2: Removed interlace flag from VICs 44 and 45. Will be submitted in
> another patch. Various other formatting fixes.
> 
> V3: 576i@200 htotal fixed. Check min and max pixel clocks.
> 
> Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>

Assuming you split it up like Daniel wanted you can slap
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
onto both parts.

> ---
>  drivers/gpu/drm/drm_edid.c        |   96 ++++++++++++++++++-------------------
>  drivers/gpu/drm/i915/intel_hdmi.c |   15 ++++--
>  2 files changed, 60 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index f905c63..dc25999 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -632,27 +632,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
>  			DRM_MODE_FLAG_INTERLACE),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 6 - 1440x480i@60Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 6 - 720(1440)x480i@60Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 7 - 1440x480i@60Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 7 - 720(1440)x480i@60Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 8 - 1440x240@60Hz */
> -	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 240, 244, 247, 262, 0,
> +	/* 8 - 720(1440)x240@60Hz */
> +	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 240, 244, 247, 262, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 9 - 1440x240@60Hz */
> -	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 240, 244, 247, 262, 0,
> +	/* 9 - 720(1440)x240@60Hz */
> +	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 240, 244, 247, 262, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -714,27 +714,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
>  			DRM_MODE_FLAG_INTERLACE),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 21 - 1440x576i@50Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 21 - 720(1440)x576i@50Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 22 - 1440x576i@50Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 22 - 720(1440)x576i@50Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 23 - 1440x288@50Hz */
> -	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 288, 290, 293, 312, 0,
> +	/* 23 - 720(1440)x288@50Hz */
> +	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 288, 290, 293, 312, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 24 - 1440x288@50Hz */
> -	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 288, 290, 293, 312, 0,
> +	/* 24 - 720(1440)x288@50Hz */
> +	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 288, 290, 293, 312, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -837,15 +837,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   796, 864, 0, 576, 581, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 44 - 1440x576i@100Hz */
> -	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 44 - 720(1440)x576i@100Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 45 - 1440x576i@100Hz */
> -	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 45 - 720(1440)x576i@100Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -870,15 +870,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   798, 858, 0, 480, 489, 495, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 50 - 1440x480i@120Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 50 - 720(1440)x480i@120Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 51 - 1440x480i@120Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 51 - 720(1440)x480i@120Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -892,15 +892,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   796, 864, 0, 576, 581, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 54 - 1440x576i@200Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 54 - 720(1440)x576i@200Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 55 - 1440x576i@200Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 55 - 720(1440)x576i@200Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -914,15 +914,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   798, 858, 0, 480, 489, 495, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 58 - 1440x480i@240 */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 58 - 720(1440)x480i@240 */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 59 - 1440x480i@240 */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 59 - 720(1440)x480i@240 */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 9169786..9695768 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -864,10 +864,15 @@ static enum drm_mode_status
>  intel_hdmi_mode_valid(struct drm_connector *connector,
>  		      struct drm_display_mode *mode)
>  {
> -	if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
> -					       true))
> +	int clock = mode->clock;
> +
> +	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
> +		clock *= 2;
> +
> +	if (clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
> +					 true))
>  		return MODE_CLOCK_HIGH;
> -	if (mode->clock < 20000)
> +	if (clock < 20000)
>  		return MODE_CLOCK_LOW;
>  
>  	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> @@ -921,6 +926,10 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
>  			intel_hdmi->color_range = 0;
>  	}
>  
> +	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
> +		pipe_config->pixel_multiplier = 2;
> +	}
> +
>  	if (intel_hdmi->color_range)
>  		pipe_config->limited_color_range = true;
>  
> -- 
> 1.7.9.5
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel OTC

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

* Re: [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
       [not found]         ` <5408AAF6.2070300@intel.com>
@ 2014-09-04 18:31           ` Daniel Vetter
  2014-09-05  7:03             ` Jani Nikula
  2014-09-05  8:08             ` Ville Syrjälä
  0 siblings, 2 replies; 13+ messages in thread
From: Daniel Vetter @ 2014-09-04 18:31 UTC (permalink / raw)
  To: Clint Taylor, intel-gfx

Readding intel-gfx since this is interesting for everyone.

On Thu, Sep 4, 2014 at 8:09 PM, Clint Taylor <clinton.a.taylor@intel.com> wrote:
> I will attempt to improve my patch submissions process. I also need to start
> annotating version in the subject field as well.
>
> When using --in_reply_to=  do I just use the Message-ID: from the original
> patch message header or do I use the Message-ID: from the reply asking for
> the change?

Usually I reply to the previous patch version to avoid threads nesting
too badly, but other people reply to the last review comment. It
doesn't really matter.

More important is to Cc: all the people (in the commit message to make
sure it doesn't get lost, git send-email then takes care of
everything) who commented on that patch so that they'll see your
updated version.

> Sorry for the newbie questions, I'm coming over from the embedded world.

Not at all, this just means our documentation isn't good enough yet.

Cheers, Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

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

* Re: [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
  2014-09-04 18:31           ` Daniel Vetter
@ 2014-09-05  7:03             ` Jani Nikula
  2014-09-05  8:08             ` Ville Syrjälä
  1 sibling, 0 replies; 13+ messages in thread
From: Jani Nikula @ 2014-09-05  7:03 UTC (permalink / raw)
  To: Daniel Vetter, Clint Taylor, intel-gfx

On Thu, 04 Sep 2014, Daniel Vetter <daniel@ffwll.ch> wrote:
> More important is to Cc: all the people (in the commit message to make
> sure it doesn't get lost, git send-email then takes care of
> everything) who commented on that patch so that they'll see your
> updated version.

git send-email taking care of everything is subject to
sendemail.suppresscc and other configuration values. With the git
defaults, you need to be careful not to accidentally Cc people,
typically when sending a patch privately/internally.

BR,
Jani.


-- 
Jani Nikula, Intel Open Source Technology Center

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

* Re: [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
  2014-09-04 18:31           ` Daniel Vetter
  2014-09-05  7:03             ` Jani Nikula
@ 2014-09-05  8:08             ` Ville Syrjälä
  1 sibling, 0 replies; 13+ messages in thread
From: Ville Syrjälä @ 2014-09-05  8:08 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: intel-gfx

On Thu, Sep 04, 2014 at 08:31:07PM +0200, Daniel Vetter wrote:
> Readding intel-gfx since this is interesting for everyone.
> 
> On Thu, Sep 4, 2014 at 8:09 PM, Clint Taylor <clinton.a.taylor@intel.com> wrote:
> > I will attempt to improve my patch submissions process. I also need to start
> > annotating version in the subject field as well.
> >
> > When using --in_reply_to=  do I just use the Message-ID: from the original
> > patch message header or do I use the Message-ID: from the reply asking for
> > the change?
> 
> Usually I reply to the previous patch version to avoid threads nesting
> too badly, but other people reply to the last review comment. It
> doesn't really matter.

I tend to do the latter, but I must admit the threads sometimes get
rather messy, so I think I'll change my ways. The changelog in the
patch should anyway keep the story together.

-- 
Ville Syrjälä
Intel OTC

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

* [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
@ 2014-08-18 21:02 clinton.a.taylor
  0 siblings, 0 replies; 13+ messages in thread
From: clinton.a.taylor @ 2014-08-18 21:02 UTC (permalink / raw)
  To: Intel-gfx

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

Pixel replicated modes should be 720 horizontal pixel and pixel
replicated by the HW across the HDMI cable at 2X pixel clock. Current
horizontal resolution of 1440 does not allow pixel duplication to
occur and scaling artifacts occur on the TV. HDMI certification
7-26 currently fails for all pixel replicated modes. This change fizes
the HDMI certification issues with 480i/576i.

V2: Removed interlace flag from VICs 44 and 45. Will be submitted in
another patch. Various other formatting fixes.

Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
---
 drivers/gpu/drm/drm_edid.c        |   96 ++++++++++++++++++-------------------
 drivers/gpu/drm/i915/intel_hdmi.c |   10 +++-
 2 files changed, 57 insertions(+), 49 deletions(-)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index f905c63..412c525 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -632,27 +632,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
 			DRM_MODE_FLAG_INTERLACE),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 6 - 1440x480i@60Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 6 - 720(1440)x480i@60Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 7 - 1440x480i@60Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 7 - 720(1440)x480i@60Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 8 - 1440x240@60Hz */
-	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 240, 244, 247, 262, 0,
+	/* 8 - 720(1440)x240@60Hz */
+	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 240, 244, 247, 262, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 9 - 1440x240@60Hz */
-	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 240, 244, 247, 262, 0,
+	/* 9 - 720(1440)x240@60Hz */
+	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 240, 244, 247, 262, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -714,27 +714,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
 			DRM_MODE_FLAG_INTERLACE),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 21 - 1440x576i@50Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 21 - 720(1440)x576i@50Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 22 - 1440x576i@50Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 22 - 720(1440)x576i@50Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 23 - 1440x288@50Hz */
-	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 288, 290, 293, 312, 0,
+	/* 23 - 720(1440)x288@50Hz */
+	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 288, 290, 293, 312, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 24 - 1440x288@50Hz */
-	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 288, 290, 293, 312, 0,
+	/* 24 - 720(1440)x288@50Hz */
+	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 288, 290, 293, 312, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -837,15 +837,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   796, 864, 0, 576, 581, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 44 - 1440x576i@100Hz */
-	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 44 - 720(1440)x576i@100Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 45 - 1440x576i@100Hz */
-	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 45 - 720(1440)x576i@100Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -870,15 +870,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   798, 858, 0, 480, 489, 495, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 50 - 1440x480i@120Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 50 - 720(1440)x480i@120Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 51 - 1440x480i@120Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 51 - 720(1440)x480i@120Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -892,15 +892,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   796, 864, 0, 576, 581, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 54 - 1440x576i@200Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 54 - 720(1440)x576i@200Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 55 - 1440x576i@200Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 55 - 720(1440)x576i@200Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
+		   795, 865, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -914,15 +914,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   798, 858, 0, 480, 489, 495, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 58 - 1440x480i@240 */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 58 - 720(1440)x480i@240 */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 59 - 1440x480i@240 */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 59 - 720(1440)x480i@240 */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 9169786..04d321b 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -867,7 +867,11 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
 	if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
 					       true))
 		return MODE_CLOCK_HIGH;
-	if (mode->clock < 20000)
+	if (mode->flags & DRM_MODE_FLAG_DBLCLK) {
+		if (mode->clock * 2 < 20000)
+			return MODE_CLOCK_LOW;
+	}
+	else if (mode->clock < 20000)
 		return MODE_CLOCK_LOW;
 
 	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
@@ -921,6 +925,10 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
 			intel_hdmi->color_range = 0;
 	}
 
+	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
+		pipe_config->pixel_multiplier = 2;
+	}
+
 	if (intel_hdmi->color_range)
 		pipe_config->limited_color_range = true;
 
-- 
1.7.9.5

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

* Re: [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
  2014-08-14 18:48 ` Ville Syrjälä
@ 2014-08-18 17:29   ` Clint Taylor
  0 siblings, 0 replies; 13+ messages in thread
From: Clint Taylor @ 2014-08-18 17:29 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: Intel-gfx

On 08/14/2014 11:48 AM, Ville Syrjälä wrote:
> On Thu, Aug 14, 2014 at 11:09:25AM -0700, clinton.a.taylor@intel.com wrote:
>> From: Clint Taylor <clinton.a.taylor@intel.com>
>>
>> Pixel replicated modes should be 720 horizontal pixel and pixel
>> replicated by the HW across the HDMI cable at 2X pixel clock. Current
>> horizontal resolution of 1440 does not allow pixel duplication to
>> occur and scaling artifacts occur on the TV. HDMI certification
>> 7-26 currently fails for all pixel replicated modes. This change fizes
>> the HDMI certification issues with 480i/576i.
>>
>> Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
>> ---
>>   drivers/gpu/drm/drm_edid.c        |  100 ++++++++++++++++++-------------------
>>   drivers/gpu/drm/i915/intel_hdmi.c |   14 +++++-
>>   2 files changed, 63 insertions(+), 51 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
>> index f905c63..c7a26a7 100644
>> --- a/drivers/gpu/drm/drm_edid.c
>> +++ b/drivers/gpu/drm/drm_edid.c
>> @@ -632,27 +632,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
>>   		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE),
>>   	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> -	/* 6 - 1440x480i@60Hz */
>> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
>> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
>> +	/* 6 - 720(1440)x480i@60Hz */
>> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
>> +		   801, 858, 0, 480, 488, 494, 525, 0,
>
> As stated before I think I would have preferred explicit /2 here, but
> if you prefer to have it this way I can live with it.

Sorry, I missed the other patches comments. The CEA-861-E specification 
actually has the pixel doubled values in (Table 3) the detailed sync 
information data, so it does make sense to have the doubled values in 
the table with /2. I prefer the actual values myself, but I am willing 
to use either method.

>
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
>> -	/* 7 - 1440x480i@60Hz */
>> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
>> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
>> +	/* 7 - 720(1440)x480i@60Hz */
>> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
>> +		   801, 858, 0, 480, 488, 494, 525, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> -	/* 8 - 1440x240@60Hz */
>> -	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
>> -		   1602, 1716, 0, 240, 244, 247, 262, 0,
>> +	/* 8 - 720(1440)x240@60Hz */
>> +	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
>> +		   801, 858, 0, 240, 244, 247, 262, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
>> -	/* 9 - 1440x240@60Hz */
>> -	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
>> -		   1602, 1716, 0, 240, 244, 247, 262, 0,
>> +	/* 9 - 720(1440)x240@60Hz */
>> +	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
>> +		   801, 858, 0, 240, 244, 247, 262, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> @@ -714,27 +714,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
>>   		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE),
>>   	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> -	/* 21 - 1440x576i@50Hz */
>> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
>> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
>> +	/* 21 - 720(1440)x576i@50Hz */
>> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
>> +		   795, 864, 0, 576, 580, 586, 625, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
>> -	/* 22 - 1440x576i@50Hz */
>> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
>> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
>> +	/* 22 - 720(1440)x576i@50Hz */
>> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
>> +		   795, 864, 0, 576, 580, 586, 625, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> -	/* 23 - 1440x288@50Hz */
>> -	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
>> -		   1590, 1728, 0, 288, 290, 293, 312, 0,
>> +	/* 23 - 720(1440)x288@50Hz */
>> +	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
>> +		   795, 864, 0, 288, 290, 293, 312, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
>> -	/* 24 - 1440x288@50Hz */
>> -	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
>> -		   1590, 1728, 0, 288, 290, 293, 312, 0,
>> +	/* 24 - 720(1440)x288@50Hz */
>> +	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
>> +		   795, 864, 0, 288, 290, 293, 312, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> @@ -837,17 +837,17 @@ static const struct drm_display_mode edid_cea_modes[] = {
>>   		   796, 864, 0, 576, 581, 586, 625, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>>   	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> -	/* 44 - 1440x576i@100Hz */
>> -	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
>> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
>> +	/* 44 - 720(1440)x576i@100Hz */
>> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
>> +		   795, 864, 0, 576, 580, 586, 625, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>> -			DRM_MODE_FLAG_DBLCLK),
>> +			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>
> /me actually reads through the patch this time...
>
> So seems we were missing the interlace flag sometimes. Fixing these
> should really be a separate patch.

Agreed

>
>>   	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
>> -	/* 45 - 1440x576i@100Hz */
>> -	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
>> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
>> +	/* 45 - 720(1440)x576i@100Hz */
>> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
>> +		   795, 864, 0, 576, 580, 586, 625, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>> -			DRM_MODE_FLAG_DBLCLK),
>> +			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>>   	/* 46 - 1920x1080i@120Hz */
>>   	{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
>> @@ -870,15 +870,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>>   		   798, 858, 0, 480, 489, 495, 525, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>>   	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> -	/* 50 - 1440x480i@120Hz */
>> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
>> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
>> +	/* 50 - 720(1440)x480i@120Hz */
>> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
>> +		   801, 858, 0, 480, 488, 494, 525, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
>> -	/* 51 - 1440x480i@120Hz */
>> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
>> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
>> +	/* 51 - 720(1440)x480i@120Hz */
>> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
>> +		   801, 858, 0, 480, 488, 494, 525, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> @@ -892,15 +892,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>>   		   796, 864, 0, 576, 581, 586, 625, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>>   	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> -	/* 54 - 1440x576i@200Hz */
>> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
>> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
>> +	/* 54 - 720(1440)x576i@200Hz */
>> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
>> +		   795, 864, 0, 576, 580, 586, 625, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
>> -	/* 55 - 1440x576i@200Hz */
>> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
>> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
>> +	/* 55 - 720(1440)x576i@200Hz */
>> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
>> +		   795, 865, 0, 576, 580, 586, 625, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> @@ -914,15 +914,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>>   		   798, 858, 0, 480, 489, 495, 525, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>>   	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> -	/* 58 - 1440x480i@240 */
>> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
>> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
>> +	/* 58 - 720(1440)x480i@240 */
>> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
>> +		   801, 858, 0, 480, 488, 494, 525, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
>> -	/* 59 - 1440x480i@240 */
>> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
>> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
>> +	/* 59 - 720(1440)x480i@240 */
>> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
>> +		   801, 858, 0, 480, 488, 494, 525, 0,
>>   		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>>   			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>>   	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
>> index 9169786..c6307cb 100644
>> --- a/drivers/gpu/drm/i915/intel_hdmi.c
>> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
>> @@ -867,7 +867,11 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
>>   	if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
>>   					       true))
>>   		return MODE_CLOCK_HIGH;
>> -	if (mode->clock < 20000)
>> +	if (mode->flags & DRM_MODE_FLAG_DBLCLK) {
>> +		if ((mode->clock * 2) < 20000)
>                      ^               ^
>
> Pointless parens.
Extra parens from prototype code in multiple spots will be removed.
>
>> +		return MODE_CLOCK_LOW;
>
> Indentation is messed up here.
>
>> +	}
>> +	else if (mode->clock < 20000)
>>   		return MODE_CLOCK_LOW;
>>
>>   	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
>> @@ -921,6 +925,14 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
>>   			intel_hdmi->color_range = 0;
>>   	}
>>
>> +	/* Adjust pipe timings and pixel multiplier for pixel doubled modes */
>
> I don't think this comment is really useful. Just drop it IMO.
>
>> +	if ((adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)) {
>              ^                                           ^
>
> Pointless parens.
>
>> +		drm_mode_set_crtcinfo(adjusted_mode, 0);
>
> This shouldn't be needed now that the original timings are halved.

agreed

>
>> +
>> +		/* Set 2x pixel double on pipe */
>
> Another comment that doesn't really do anything. Can be dropped too.
>
>> +		pipe_config->pixel_multiplier = 2;
>> +	}
>> +
>>   	if (intel_hdmi->color_range)
>>   		pipe_config->limited_color_range = true;
>>
>> --
>> 1.7.9.5
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>

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

* Re: [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
  2014-08-14 18:09 clinton.a.taylor
@ 2014-08-14 18:48 ` Ville Syrjälä
  2014-08-18 17:29   ` Clint Taylor
  0 siblings, 1 reply; 13+ messages in thread
From: Ville Syrjälä @ 2014-08-14 18:48 UTC (permalink / raw)
  To: clinton.a.taylor; +Cc: Intel-gfx

On Thu, Aug 14, 2014 at 11:09:25AM -0700, clinton.a.taylor@intel.com wrote:
> From: Clint Taylor <clinton.a.taylor@intel.com>
> 
> Pixel replicated modes should be 720 horizontal pixel and pixel
> replicated by the HW across the HDMI cable at 2X pixel clock. Current
> horizontal resolution of 1440 does not allow pixel duplication to
> occur and scaling artifacts occur on the TV. HDMI certification
> 7-26 currently fails for all pixel replicated modes. This change fizes
> the HDMI certification issues with 480i/576i.
> 
> Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
> ---
>  drivers/gpu/drm/drm_edid.c        |  100 ++++++++++++++++++-------------------
>  drivers/gpu/drm/i915/intel_hdmi.c |   14 +++++-
>  2 files changed, 63 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index f905c63..c7a26a7 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -632,27 +632,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
>  			DRM_MODE_FLAG_INTERLACE),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 6 - 1440x480i@60Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 6 - 720(1440)x480i@60Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,

As stated before I think I would have preferred explicit /2 here, but
if you prefer to have it this way I can live with it.

>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 7 - 1440x480i@60Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 7 - 720(1440)x480i@60Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 8 - 1440x240@60Hz */
> -	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 240, 244, 247, 262, 0,
> +	/* 8 - 720(1440)x240@60Hz */
> +	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 240, 244, 247, 262, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 9 - 1440x240@60Hz */
> -	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
> -		   1602, 1716, 0, 240, 244, 247, 262, 0,
> +	/* 9 - 720(1440)x240@60Hz */
> +	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
> +		   801, 858, 0, 240, 244, 247, 262, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -714,27 +714,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
>  			DRM_MODE_FLAG_INTERLACE),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 21 - 1440x576i@50Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 21 - 720(1440)x576i@50Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 22 - 1440x576i@50Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 22 - 720(1440)x576i@50Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 23 - 1440x288@50Hz */
> -	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 288, 290, 293, 312, 0,
> +	/* 23 - 720(1440)x288@50Hz */
> +	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 288, 290, 293, 312, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 24 - 1440x288@50Hz */
> -	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
> -		   1590, 1728, 0, 288, 290, 293, 312, 0,
> +	/* 24 - 720(1440)x288@50Hz */
> +	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
> +		   795, 864, 0, 288, 290, 293, 312, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -837,17 +837,17 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   796, 864, 0, 576, 581, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 44 - 1440x576i@100Hz */
> -	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 44 - 720(1440)x576i@100Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
> -			DRM_MODE_FLAG_DBLCLK),
> +			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),

/me actually reads through the patch this time...

So seems we were missing the interlace flag sometimes. Fixing these
should really be a separate patch.

>  	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 45 - 1440x576i@100Hz */
> -	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 45 - 720(1440)x576i@100Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
> -			DRM_MODE_FLAG_DBLCLK),
> +			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
>  	/* 46 - 1920x1080i@120Hz */
>  	{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
> @@ -870,15 +870,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   798, 858, 0, 480, 489, 495, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 50 - 1440x480i@120Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 50 - 720(1440)x480i@120Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 51 - 1440x480i@120Hz */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 51 - 720(1440)x480i@120Hz */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -892,15 +892,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   796, 864, 0, 576, 581, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 54 - 1440x576i@200Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 54 - 720(1440)x576i@200Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
> +		   795, 864, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 55 - 1440x576i@200Hz */
> -	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
> -		   1590, 1728, 0, 576, 580, 586, 625, 0,
> +	/* 55 - 720(1440)x576i@200Hz */
> +	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
> +		   795, 865, 0, 576, 580, 586, 625, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> @@ -914,15 +914,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
>  		   798, 858, 0, 480, 489, 495, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
>  	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> -	/* 58 - 1440x480i@240 */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 58 - 720(1440)x480i@240 */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
> -	/* 59 - 1440x480i@240 */
> -	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
> -		   1602, 1716, 0, 480, 488, 494, 525, 0,
> +	/* 59 - 720(1440)x480i@240 */
> +	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
> +		   801, 858, 0, 480, 488, 494, 525, 0,
>  		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
>  			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
>  	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 9169786..c6307cb 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -867,7 +867,11 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
>  	if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
>  					       true))
>  		return MODE_CLOCK_HIGH;
> -	if (mode->clock < 20000)
> +	if (mode->flags & DRM_MODE_FLAG_DBLCLK) {
> +		if ((mode->clock * 2) < 20000)
                    ^               ^

Pointless parens.

> +		return MODE_CLOCK_LOW;

Indentation is messed up here.

> +	}
> +	else if (mode->clock < 20000)
>  		return MODE_CLOCK_LOW;
>  
>  	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> @@ -921,6 +925,14 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
>  			intel_hdmi->color_range = 0;
>  	}
>  
> +	/* Adjust pipe timings and pixel multiplier for pixel doubled modes */

I don't think this comment is really useful. Just drop it IMO.

> +	if ((adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)) {
            ^                                           ^

Pointless parens.

> +		drm_mode_set_crtcinfo(adjusted_mode, 0);

This shouldn't be needed now that the original timings are halved.

> +
> +		/* Set 2x pixel double on pipe */

Another comment that doesn't really do anything. Can be dropped too.

> +		pipe_config->pixel_multiplier = 2;
> +	}
> +
>  	if (intel_hdmi->color_range)
>  		pipe_config->limited_color_range = true;
>  
> -- 
> 1.7.9.5
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel OTC

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

* [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes
@ 2014-08-14 18:09 clinton.a.taylor
  2014-08-14 18:48 ` Ville Syrjälä
  0 siblings, 1 reply; 13+ messages in thread
From: clinton.a.taylor @ 2014-08-14 18:09 UTC (permalink / raw)
  To: Intel-gfx

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

Pixel replicated modes should be 720 horizontal pixel and pixel
replicated by the HW across the HDMI cable at 2X pixel clock. Current
horizontal resolution of 1440 does not allow pixel duplication to
occur and scaling artifacts occur on the TV. HDMI certification
7-26 currently fails for all pixel replicated modes. This change fizes
the HDMI certification issues with 480i/576i.

Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
---
 drivers/gpu/drm/drm_edid.c        |  100 ++++++++++++++++++-------------------
 drivers/gpu/drm/i915/intel_hdmi.c |   14 +++++-
 2 files changed, 63 insertions(+), 51 deletions(-)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index f905c63..c7a26a7 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -632,27 +632,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
 			DRM_MODE_FLAG_INTERLACE),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 6 - 1440x480i@60Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 6 - 720(1440)x480i@60Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 7 - 1440x480i@60Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 7 - 720(1440)x480i@60Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 8 - 1440x240@60Hz */
-	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 240, 244, 247, 262, 0,
+	/* 8 - 720(1440)x240@60Hz */
+	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 240, 244, 247, 262, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 9 - 1440x240@60Hz */
-	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
-		   1602, 1716, 0, 240, 244, 247, 262, 0,
+	/* 9 - 720(1440)x240@60Hz */
+	{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
+		   801, 858, 0, 240, 244, 247, 262, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -714,27 +714,27 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
 			DRM_MODE_FLAG_INTERLACE),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 21 - 1440x576i@50Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 21 - 720(1440)x576i@50Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 22 - 1440x576i@50Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 22 - 720(1440)x576i@50Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 23 - 1440x288@50Hz */
-	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 288, 290, 293, 312, 0,
+	/* 23 - 720(1440)x288@50Hz */
+	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 288, 290, 293, 312, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 24 - 1440x288@50Hz */
-	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
-		   1590, 1728, 0, 288, 290, 293, 312, 0,
+	/* 24 - 720(1440)x288@50Hz */
+	{ DRM_MODE("720x288", DRM_MODE_TYPE_DRIVER, 13500, 720, 732,
+		   795, 864, 0, 288, 290, 293, 312, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -837,17 +837,17 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   796, 864, 0, 576, 581, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 44 - 1440x576i@100Hz */
-	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 44 - 720(1440)x576i@100Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
-			DRM_MODE_FLAG_DBLCLK),
+			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 45 - 1440x576i@100Hz */
-	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 45 - 720(1440)x576i@100Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
-			DRM_MODE_FLAG_DBLCLK),
+			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
 	/* 46 - 1920x1080i@120Hz */
 	{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
@@ -870,15 +870,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   798, 858, 0, 480, 489, 495, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 50 - 1440x480i@120Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 50 - 720(1440)x480i@120Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 51 - 1440x480i@120Hz */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 51 - 720(1440)x480i@120Hz */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 27000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -892,15 +892,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   796, 864, 0, 576, 581, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 54 - 1440x576i@200Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 54 - 720(1440)x576i@200Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
+		   795, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 55 - 1440x576i@200Hz */
-	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
-		   1590, 1728, 0, 576, 580, 586, 625, 0,
+	/* 55 - 720(1440)x576i@200Hz */
+	{ DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
+		   795, 865, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
@@ -914,15 +914,15 @@ static const struct drm_display_mode edid_cea_modes[] = {
 		   798, 858, 0, 480, 489, 495, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
 	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-	/* 58 - 1440x480i@240 */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 58 - 720(1440)x480i@240 */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-	/* 59 - 1440x480i@240 */
-	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
-		   1602, 1716, 0, 480, 488, 494, 525, 0,
+	/* 59 - 720(1440)x480i@240 */
+	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 54000, 720, 739,
+		   801, 858, 0, 480, 488, 494, 525, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
 	  .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 9169786..c6307cb 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -867,7 +867,11 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
 	if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector),
 					       true))
 		return MODE_CLOCK_HIGH;
-	if (mode->clock < 20000)
+	if (mode->flags & DRM_MODE_FLAG_DBLCLK) {
+		if ((mode->clock * 2) < 20000)
+		return MODE_CLOCK_LOW;
+	}
+	else if (mode->clock < 20000)
 		return MODE_CLOCK_LOW;
 
 	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
@@ -921,6 +925,14 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
 			intel_hdmi->color_range = 0;
 	}
 
+	/* Adjust pipe timings and pixel multiplier for pixel doubled modes */
+	if ((adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)) {
+		drm_mode_set_crtcinfo(adjusted_mode, 0);
+
+		/* Set 2x pixel double on pipe */
+		pipe_config->pixel_multiplier = 2;
+	}
+
 	if (intel_hdmi->color_range)
 		pipe_config->limited_color_range = true;
 
-- 
1.7.9.5

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

end of thread, other threads:[~2014-09-05  8:08 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-19 21:21 [PATCH] drm/edid: Reduce horizontal timings for pixel replicated modes clinton.a.taylor
2014-08-26  8:10 ` Daniel Vetter
2014-08-26  8:11   ` Daniel Vetter
2014-09-01 13:12     ` Ville Syrjälä
2014-09-01 13:17       ` Ville Syrjälä
     [not found]         ` <5408AAF6.2070300@intel.com>
2014-09-04 18:31           ` Daniel Vetter
2014-09-05  7:03             ` Jani Nikula
2014-09-05  8:08             ` Ville Syrjälä
2014-09-01 13:19 ` [Intel-gfx] " Ville Syrjälä
  -- strict thread matches above, loose matches on Subject: below --
2014-08-18 21:02 clinton.a.taylor
2014-08-14 18:09 clinton.a.taylor
2014-08-14 18:48 ` Ville Syrjälä
2014-08-18 17:29   ` Clint Taylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).