All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915: Clean up HDMI deep color handling a bit
@ 2019-08-22 18:05 Ville Syrjala
  2019-08-23 11:20 ` ✓ Fi.CI.BAT: success for " Patchwork
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Ville Syrjala @ 2019-08-22 18:05 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reogranize the HDMI deep color state computation to just
loop over possible bpc values. Avoids having to maintain
so many variants of the clock etc.

The current code also looks confused w.r.t. port_clock vs.
bw_constrained. It would happily update port_clock for
deep color but then not actually enable deep color due to
bw_constrained being set. The new logic handles that case
correctly.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_hdmi.c | 82 ++++++++++-------------
 1 file changed, 37 insertions(+), 45 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index e02f0faecf02..ed1a7afc1ffd 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2262,8 +2262,7 @@ static bool hdmi_deep_color_possible(const struct intel_crtc_state *crtc_state,
 static bool
 intel_hdmi_ycbcr420_config(struct drm_connector *connector,
 			   struct intel_crtc_state *config,
-			   int *clock_12bpc, int *clock_10bpc,
-			   int *clock_8bpc)
+			   int *clock)
 {
 	struct intel_crtc *intel_crtc = to_intel_crtc(config->base.crtc);
 
@@ -2273,10 +2272,7 @@ intel_hdmi_ycbcr420_config(struct drm_connector *connector,
 	}
 
 	/* YCBCR420 TMDS rate requirement is half the pixel clock */
-	config->port_clock /= 2;
-	*clock_12bpc /= 2;
-	*clock_10bpc /= 2;
-	*clock_8bpc /= 2;
+	*clock /= 2;
 	config->output_format = INTEL_OUTPUT_FORMAT_YCBCR420;
 
 	/* YCBCR 420 output conversion needs a scaler */
@@ -2302,10 +2298,7 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
 	struct drm_scdc *scdc = &connector->display_info.hdmi.scdc;
 	struct intel_digital_connector_state *intel_conn_state =
 		to_intel_digital_connector_state(conn_state);
-	int clock_8bpc = pipe_config->base.adjusted_mode.crtc_clock;
-	int clock_10bpc = clock_8bpc * 5 / 4;
-	int clock_12bpc = clock_8bpc * 3 / 2;
-	int desired_bpp;
+	int bpc, clock = pipe_config->base.adjusted_mode.crtc_clock;
 	bool force_dvi = intel_conn_state->force_audio == HDMI_AUDIO_OFF_DVI;
 
 	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
@@ -2330,15 +2323,11 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
 
 	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
 		pipe_config->pixel_multiplier = 2;
-		clock_8bpc *= 2;
-		clock_10bpc *= 2;
-		clock_12bpc *= 2;
+		clock *= 2;
 	}
 
 	if (drm_mode_is_420_only(&connector->display_info, adjusted_mode)) {
-		if (!intel_hdmi_ycbcr420_config(connector, pipe_config,
-						&clock_12bpc, &clock_10bpc,
-						&clock_8bpc)) {
+		if (!intel_hdmi_ycbcr420_config(connector, pipe_config, &clock)) {
 			DRM_ERROR("Can't support YCBCR420 output\n");
 			return -EINVAL;
 		}
@@ -2355,41 +2344,44 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
 				intel_conn_state->force_audio == HDMI_AUDIO_ON;
 	}
 
-	/*
-	 * Note that g4x/vlv don't support 12bpc hdmi outputs. We also need
-	 * to check that the higher clock still fits within limits.
-	 */
-	if (hdmi_deep_color_possible(pipe_config, 12) &&
-	    hdmi_port_clock_valid(intel_hdmi, clock_12bpc,
-				  true, force_dvi) == MODE_OK) {
-		DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
-		desired_bpp = 12*3;
-
-		/* Need to adjust the port link by 1.5x for 12bpc. */
-		pipe_config->port_clock = clock_12bpc;
-	} else if (hdmi_deep_color_possible(pipe_config, 10) &&
-		   hdmi_port_clock_valid(intel_hdmi, clock_10bpc,
-					 true, force_dvi) == MODE_OK) {
-		DRM_DEBUG_KMS("picking bpc to 10 for HDMI output\n");
-		desired_bpp = 10 * 3;
-
-		/* Need to adjust the port link by 1.25x for 10bpc. */
-		pipe_config->port_clock = clock_10bpc;
-	} else {
-		DRM_DEBUG_KMS("picking bpc to 8 for HDMI output\n");
-		desired_bpp = 8*3;
+	/* for 8bpc */
+	pipe_config->port_clock = clock;
 
-		pipe_config->port_clock = clock_8bpc;
-	}
+	for (bpc = 12; bpc > 8; bpc -= 2) {
+		int port_clock;
+
+		if (!hdmi_deep_color_possible(pipe_config, bpc))
+			continue;
+
+		/*
+		 * Need to adjust the port link by:
+		 *  1.5x for 12bpc
+		 *  1.25x for 10bpc
+		 */
+		port_clock = clock * bpc / 8;
+
+		if (hdmi_port_clock_valid(intel_hdmi, port_clock,
+					  true, force_dvi) != MODE_OK)
+			continue;
 
-	if (!pipe_config->bw_constrained) {
-		DRM_DEBUG_KMS("forcing pipe bpp to %i for HDMI\n", desired_bpp);
-		pipe_config->pipe_bpp = desired_bpp;
+		pipe_config->port_clock = port_clock;
+		break;
 	}
 
+	/*
+	 * pipe_bpp could already be below 8bpc due to
+	 * FDI bandwidth constraints. We shouldn't bump it
+	 * back up to 8bpc in that case.
+	 */
+	if (pipe_config->pipe_bpp > bpc * 3)
+		pipe_config->pipe_bpp = bpc * 3;
+	DRM_DEBUG_KMS("picking %dbpc for HDMI output (pipe bpp: %d)\n",
+		      bpc, pipe_config->pipe_bpp);
+
 	if (hdmi_port_clock_valid(intel_hdmi, pipe_config->port_clock,
 				  false, force_dvi) != MODE_OK) {
-		DRM_DEBUG_KMS("unsupported HDMI clock, rejecting mode\n");
+		DRM_DEBUG_KMS("unsupported HDMI clock (%d kHz), rejecting mode\n",
+			      pipe_config->port_clock);
 		return -EINVAL;
 	}
 
-- 
2.21.0

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

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

* ✓ Fi.CI.BAT: success for drm/i915: Clean up HDMI deep color handling a bit
  2019-08-22 18:05 [PATCH] drm/i915: Clean up HDMI deep color handling a bit Ville Syrjala
@ 2019-08-23 11:20 ` Patchwork
  2019-08-24  5:51 ` ✓ Fi.CI.IGT: " Patchwork
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2019-08-23 11:20 UTC (permalink / raw)
  To: Ville Syrjala; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Clean up HDMI deep color handling a bit
URL   : https://patchwork.freedesktop.org/series/65685/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6775 -> Patchwork_14157
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/

Known issues
------------

  Here are the changes found in Patchwork_14157 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_create@basic-files:
    - fi-bxt-dsi:         [PASS][1] -> [INCOMPLETE][2] ([fdo#103927])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/fi-bxt-dsi/igt@gem_ctx_create@basic-files.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/fi-bxt-dsi/igt@gem_ctx_create@basic-files.html

  * igt@kms_chamelium@dp-edid-read:
    - fi-kbl-7500u:       [PASS][3] -> [WARN][4] ([fdo#109483])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/fi-kbl-7500u/igt@kms_chamelium@dp-edid-read.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/fi-kbl-7500u/igt@kms_chamelium@dp-edid-read.html

  
#### Possible fixes ####

  * igt@gem_basic@bad-close:
    - fi-icl-u3:          [DMESG-WARN][5] ([fdo#107724]) -> [PASS][6] +1 similar issue
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/fi-icl-u3/igt@gem_basic@bad-close.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/fi-icl-u3/igt@gem_basic@bad-close.html

  * igt@kms_chamelium@dp-crc-fast:
    - fi-kbl-7500u:       [FAIL][7] ([fdo#109635 ]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html

  * igt@kms_frontbuffer_tracking@basic:
    - fi-icl-u3:          [FAIL][9] ([fdo#103167]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/fi-icl-u3/igt@kms_frontbuffer_tracking@basic.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/fi-icl-u3/igt@kms_frontbuffer_tracking@basic.html
    - {fi-icl-u4}:        [FAIL][11] ([fdo#103167]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/fi-icl-u4/igt@kms_frontbuffer_tracking@basic.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/fi-icl-u4/igt@kms_frontbuffer_tracking@basic.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724
  [fdo#109483]: https://bugs.freedesktop.org/show_bug.cgi?id=109483
  [fdo#109635 ]: https://bugs.freedesktop.org/show_bug.cgi?id=109635 


Participating hosts (54 -> 44)
------------------------------

  Missing    (10): fi-ilk-m540 fi-tgl-u fi-hsw-4200u fi-skl-6770hq fi-byt-squawks fi-bsw-cyan fi-icl-y fi-skl-lmem fi-byt-clapper fi-bdw-samus 


Build changes
-------------

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6775 -> Patchwork_14157

  CI-20190529: 20190529
  CI_DRM_6775: 525ec65b2d3a225e71cd64c37b096cdb377f1101 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5148: 50390dd7adaccae21cafa85b866c17606cec94c3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14157: d4c1c82c133d153fe865b65793938acbef0a08ed @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

d4c1c82c133d drm/i915: Clean up HDMI deep color handling a bit

== Logs ==

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

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

* ✓ Fi.CI.IGT: success for drm/i915: Clean up HDMI deep color handling a bit
  2019-08-22 18:05 [PATCH] drm/i915: Clean up HDMI deep color handling a bit Ville Syrjala
  2019-08-23 11:20 ` ✓ Fi.CI.BAT: success for " Patchwork
@ 2019-08-24  5:51 ` Patchwork
  2019-08-27  9:30 ` [PATCH] " Jani Nikula
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2019-08-24  5:51 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Clean up HDMI deep color handling a bit
URL   : https://patchwork.freedesktop.org/series/65685/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6775_full -> Patchwork_14157_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Known issues
------------

  Here are the changes found in Patchwork_14157_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_shared@exec-single-timeline-bsd:
    - shard-iclb:         [PASS][1] -> [SKIP][2] ([fdo#110841])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb5/igt@gem_ctx_shared@exec-single-timeline-bsd.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb1/igt@gem_ctx_shared@exec-single-timeline-bsd.html

  * igt@gem_eio@unwedge-stress:
    - shard-snb:          [PASS][3] -> [FAIL][4] ([fdo#109661])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-snb2/igt@gem_eio@unwedge-stress.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-snb4/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_schedule@preempt-other-chain-bsd:
    - shard-iclb:         [PASS][5] -> [SKIP][6] ([fdo#111325]) +7 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb3/igt@gem_exec_schedule@preempt-other-chain-bsd.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb4/igt@gem_exec_schedule@preempt-other-chain-bsd.html

  * igt@gem_exec_schedule@preempt-queue-bsd1:
    - shard-iclb:         [PASS][7] -> [SKIP][8] ([fdo#109276]) +29 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb4/igt@gem_exec_schedule@preempt-queue-bsd1.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb5/igt@gem_exec_schedule@preempt-queue-bsd1.html

  * igt@gem_tiled_swapping@non-threaded:
    - shard-apl:          [PASS][9] -> [DMESG-WARN][10] ([fdo#108686])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl1/igt@gem_tiled_swapping@non-threaded.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-apl2/igt@gem_tiled_swapping@non-threaded.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-apl:          [PASS][11] -> [DMESG-WARN][12] ([fdo#108566]) +5 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl5/igt@i915_suspend@fence-restore-tiled2untiled.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-apl3/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@kms_cursor_crc@pipe-a-cursor-suspend:
    - shard-snb:          [PASS][13] -> [DMESG-WARN][14] ([fdo#102365])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-snb1/igt@kms_cursor_crc@pipe-a-cursor-suspend.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-snb2/igt@kms_cursor_crc@pipe-a-cursor-suspend.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-skl:          [PASS][15] -> [INCOMPLETE][16] ([fdo#104108])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl4/igt@kms_fbcon_fbt@fbc-suspend.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl3/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-skl:          [PASS][17] -> [FAIL][18] ([fdo#105363])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl9/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl7/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-hsw:          [PASS][19] -> [INCOMPLETE][20] ([fdo#103540])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-hsw6/igt@kms_flip@flip-vs-suspend.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-hsw2/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-plflip-blt:
    - shard-iclb:         [PASS][21] -> [FAIL][22] ([fdo#103167]) +8 similar issues
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-plflip-blt.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-skl:          [PASS][23] -> [FAIL][24] ([fdo#108040])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-wc.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl9/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt:
    - shard-skl:          [PASS][25] -> [FAIL][26] ([fdo#103167] / [fdo#110379])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl7/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl5/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-skl:          [PASS][27] -> [FAIL][28] ([fdo#103167])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min:
    - shard-skl:          [PASS][29] -> [FAIL][30] ([fdo#108145]) +1 similar issue
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl3/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl9/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-yf:
    - shard-skl:          [PASS][31] -> [DMESG-WARN][32] ([fdo#106885])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl8/igt@kms_plane_multiple@atomic-pipe-a-tiling-yf.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl1/igt@kms_plane_multiple@atomic-pipe-a-tiling-yf.html

  * igt@kms_psr@psr2_cursor_plane_move:
    - shard-iclb:         [PASS][33] -> [SKIP][34] ([fdo#109441]) +2 similar issues
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb2/igt@kms_psr@psr2_cursor_plane_move.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb6/igt@kms_psr@psr2_cursor_plane_move.html

  * igt@kms_setmode@basic:
    - shard-kbl:          [PASS][35] -> [FAIL][36] ([fdo#99912])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-kbl7/igt@kms_setmode@basic.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-kbl6/igt@kms_setmode@basic.html

  * igt@perf@blocking:
    - shard-skl:          [PASS][37] -> [FAIL][38] ([fdo#110728]) +1 similar issue
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl1/igt@perf@blocking.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl6/igt@perf@blocking.html

  * igt@perf_pmu@enable-race-bcs0:
    - shard-apl:          [PASS][39] -> [INCOMPLETE][40] ([fdo#103927])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl2/igt@perf_pmu@enable-race-bcs0.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-apl1/igt@perf_pmu@enable-race-bcs0.html

  
#### Possible fixes ####

  * igt@gem_exec_parallel@rcs0-contexts:
    - shard-hsw:          [FAIL][41] -> [PASS][42]
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-hsw6/igt@gem_exec_parallel@rcs0-contexts.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-hsw2/igt@gem_exec_parallel@rcs0-contexts.html

  * igt@gem_exec_schedule@fifo-bsd1:
    - shard-iclb:         [SKIP][43] ([fdo#109276]) -> [PASS][44] +9 similar issues
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb3/igt@gem_exec_schedule@fifo-bsd1.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb4/igt@gem_exec_schedule@fifo-bsd1.html

  * igt@gem_exec_schedule@in-order-bsd:
    - shard-iclb:         [SKIP][45] ([fdo#111325]) -> [PASS][46] +4 similar issues
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb1/igt@gem_exec_schedule@in-order-bsd.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb3/igt@gem_exec_schedule@in-order-bsd.html

  * igt@gem_exec_schedule@preempt-hang-render:
    - shard-iclb:         [INCOMPLETE][47] ([fdo#107713]) -> [PASS][48]
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@gem_exec_schedule@preempt-hang-render.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb5/igt@gem_exec_schedule@preempt-hang-render.html

  * igt@i915_pm_backlight@fade_with_suspend:
    - shard-skl:          [INCOMPLETE][49] ([fdo#104108]) -> [PASS][50]
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl7/igt@i915_pm_backlight@fade_with_suspend.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl5/igt@i915_pm_backlight@fade_with_suspend.html

  * igt@i915_suspend@sysfs-reader:
    - shard-apl:          [DMESG-WARN][51] ([fdo#108566]) -> [PASS][52] +3 similar issues
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl2/igt@i915_suspend@sysfs-reader.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-apl3/igt@i915_suspend@sysfs-reader.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-glk:          [FAIL][53] ([fdo#105363]) -> [PASS][54] +1 similar issue
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-glk9/igt@kms_flip@flip-vs-expired-vblank.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-glk3/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
    - shard-iclb:         [FAIL][55] ([fdo#103167]) -> [PASS][56] +5 similar issues
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb8/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb7/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_plane_alpha_blend@pipe-b-coverage-7efc:
    - shard-skl:          [FAIL][57] ([fdo#108145] / [fdo#110403]) -> [PASS][58]
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl6/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl2/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html

  * igt@kms_plane_lowres@pipe-a-tiling-x:
    - shard-iclb:         [FAIL][59] ([fdo#103166]) -> [PASS][60]
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@kms_plane_lowres@pipe-a-tiling-x.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb6/igt@kms_plane_lowres@pipe-a-tiling-x.html

  * igt@kms_psr@psr2_sprite_plane_onoff:
    - shard-iclb:         [SKIP][61] ([fdo#109441]) -> [PASS][62]
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb6/igt@kms_psr@psr2_sprite_plane_onoff.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb2/igt@kms_psr@psr2_sprite_plane_onoff.html

  * igt@kms_setmode@basic:
    - shard-apl:          [FAIL][63] ([fdo#99912]) -> [PASS][64]
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl2/igt@kms_setmode@basic.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-apl3/igt@kms_setmode@basic.html
    - shard-skl:          [FAIL][65] ([fdo#99912]) -> [PASS][66]
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl8/igt@kms_setmode@basic.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl6/igt@kms_setmode@basic.html

  
#### Warnings ####

  * igt@gem_mocs_settings@mocs-isolation-bsd2:
    - shard-iclb:         [SKIP][67] ([fdo#109276]) -> [FAIL][68] ([fdo#111330])
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb3/igt@gem_mocs_settings@mocs-isolation-bsd2.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb4/igt@gem_mocs_settings@mocs-isolation-bsd2.html

  * igt@gem_mocs_settings@mocs-settings-bsd2:
    - shard-iclb:         [FAIL][69] ([fdo#111330]) -> [SKIP][70] ([fdo#109276]) +1 similar issue
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb2/igt@gem_mocs_settings@mocs-settings-bsd2.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-iclb3/igt@gem_mocs_settings@mocs-settings-bsd2.html

  * igt@kms_frontbuffer_tracking@fbc-1p-rte:
    - shard-skl:          [FAIL][71] ([fdo#103167] / [fdo#110378]) -> [FAIL][72] ([fdo#108040])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl3/igt@kms_frontbuffer_tracking@fbc-1p-rte.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14157/shard-skl9/igt@kms_frontbuffer_tracking@fbc-1p-rte.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#102365]: https://bugs.freedesktop.org/show_bug.cgi?id=102365
  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
  [fdo#106885]: https://bugs.freedesktop.org/show_bug.cgi?id=106885
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#108040]: https://bugs.freedesktop.org/show_bug.cgi?id=108040
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#108686]: https://bugs.freedesktop.org/show_bug.cgi?id=108686
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#109661]: https://bugs.freedesktop.org/show_bug.cgi?id=109661
  [fdo#110378]: https://bugs.freedesktop.org/show_bug.cgi?id=110378
  [fdo#110379]: https://bugs.freedesktop.org/show_bug.cgi?id=110379
  [fdo#110403]: https://bugs.freedesktop.org/show_bug.cgi?id=110403
  [fdo#110728]: https://bugs.freedesktop.org/show_bug.cgi?id=110728
  [fdo#110841]: https://bugs.freedesktop.org/show_bug.cgi?id=110841
  [fdo#111325]: https://bugs.freedesktop.org/show_bug.cgi?id=111325
  [fdo#111330]: https://bugs.freedesktop.org/show_bug.cgi?id=111330
  [fdo#111473 ]: https://bugs.freedesktop.org/show_bug.cgi?id=111473 
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts


Build changes
-------------

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6775 -> Patchwork_14157

  CI-20190529: 20190529
  CI_DRM_6775: 525ec65b2d3a225e71cd64c37b096cdb377f1101 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5148: 50390dd7adaccae21cafa85b866c17606cec94c3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14157: d4c1c82c133d153fe865b65793938acbef0a08ed @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

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

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

* Re: [PATCH] drm/i915: Clean up HDMI deep color handling a bit
  2019-08-22 18:05 [PATCH] drm/i915: Clean up HDMI deep color handling a bit Ville Syrjala
  2019-08-23 11:20 ` ✓ Fi.CI.BAT: success for " Patchwork
  2019-08-24  5:51 ` ✓ Fi.CI.IGT: " Patchwork
@ 2019-08-27  9:30 ` Jani Nikula
  2019-08-28 17:38   ` Ville Syrjälä
  2019-08-28 18:34 ` [PATCH v2] " Ville Syrjala
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 9+ messages in thread
From: Jani Nikula @ 2019-08-27  9:30 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Thu, 22 Aug 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Reogranize the HDMI deep color state computation to just
> loop over possible bpc values. Avoids having to maintain
> so many variants of the clock etc.
>
> The current code also looks confused w.r.t. port_clock vs.
> bw_constrained. It would happily update port_clock for
> deep color but then not actually enable deep color due to
> bw_constrained being set. The new logic handles that case
> correctly.

Care to elaborate on that please?

Some nitpicking below.

>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_hdmi.c | 82 ++++++++++-------------
>  1 file changed, 37 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index e02f0faecf02..ed1a7afc1ffd 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -2262,8 +2262,7 @@ static bool hdmi_deep_color_possible(const struct intel_crtc_state *crtc_state,
>  static bool
>  intel_hdmi_ycbcr420_config(struct drm_connector *connector,
>  			   struct intel_crtc_state *config,
> -			   int *clock_12bpc, int *clock_10bpc,
> -			   int *clock_8bpc)
> +			   int *clock)
>  {
>  	struct intel_crtc *intel_crtc = to_intel_crtc(config->base.crtc);
>  
> @@ -2273,10 +2272,7 @@ intel_hdmi_ycbcr420_config(struct drm_connector *connector,
>  	}
>  
>  	/* YCBCR420 TMDS rate requirement is half the pixel clock */
> -	config->port_clock /= 2;
> -	*clock_12bpc /= 2;
> -	*clock_10bpc /= 2;
> -	*clock_8bpc /= 2;
> +	*clock /= 2;
>  	config->output_format = INTEL_OUTPUT_FORMAT_YCBCR420;
>  
>  	/* YCBCR 420 output conversion needs a scaler */
> @@ -2302,10 +2298,7 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
>  	struct drm_scdc *scdc = &connector->display_info.hdmi.scdc;
>  	struct intel_digital_connector_state *intel_conn_state =
>  		to_intel_digital_connector_state(conn_state);
> -	int clock_8bpc = pipe_config->base.adjusted_mode.crtc_clock;
> -	int clock_10bpc = clock_8bpc * 5 / 4;
> -	int clock_12bpc = clock_8bpc * 3 / 2;
> -	int desired_bpp;
> +	int bpc, clock = pipe_config->base.adjusted_mode.crtc_clock;
>  	bool force_dvi = intel_conn_state->force_audio == HDMI_AUDIO_OFF_DVI;
>  
>  	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
> @@ -2330,15 +2323,11 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
>  
>  	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
>  		pipe_config->pixel_multiplier = 2;
> -		clock_8bpc *= 2;
> -		clock_10bpc *= 2;
> -		clock_12bpc *= 2;
> +		clock *= 2;
>  	}
>  
>  	if (drm_mode_is_420_only(&connector->display_info, adjusted_mode)) {
> -		if (!intel_hdmi_ycbcr420_config(connector, pipe_config,
> -						&clock_12bpc, &clock_10bpc,
> -						&clock_8bpc)) {
> +		if (!intel_hdmi_ycbcr420_config(connector, pipe_config, &clock)) {
>  			DRM_ERROR("Can't support YCBCR420 output\n");
>  			return -EINVAL;
>  		}
> @@ -2355,41 +2344,44 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
>  				intel_conn_state->force_audio == HDMI_AUDIO_ON;
>  	}
>  
> -	/*
> -	 * Note that g4x/vlv don't support 12bpc hdmi outputs. We also need
> -	 * to check that the higher clock still fits within limits.
> -	 */
> -	if (hdmi_deep_color_possible(pipe_config, 12) &&
> -	    hdmi_port_clock_valid(intel_hdmi, clock_12bpc,
> -				  true, force_dvi) == MODE_OK) {
> -		DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
> -		desired_bpp = 12*3;
> -
> -		/* Need to adjust the port link by 1.5x for 12bpc. */
> -		pipe_config->port_clock = clock_12bpc;
> -	} else if (hdmi_deep_color_possible(pipe_config, 10) &&
> -		   hdmi_port_clock_valid(intel_hdmi, clock_10bpc,
> -					 true, force_dvi) == MODE_OK) {
> -		DRM_DEBUG_KMS("picking bpc to 10 for HDMI output\n");
> -		desired_bpp = 10 * 3;
> -
> -		/* Need to adjust the port link by 1.25x for 10bpc. */
> -		pipe_config->port_clock = clock_10bpc;
> -	} else {
> -		DRM_DEBUG_KMS("picking bpc to 8 for HDMI output\n");
> -		desired_bpp = 8*3;
> +	/* for 8bpc */
> +	pipe_config->port_clock = clock;
>  
> -		pipe_config->port_clock = clock_8bpc;
> -	}
> +	for (bpc = 12; bpc > 8; bpc -= 2) {

So I generally don't like loops like this. You enter the loop with 12
and 10, don't enter with 8 but assume in later code that's what you got
if not 12 or 10. And, of course, you need to initialize
pipe_config->port_clock beforehand for that case too.

Perhaps abstracting the loop to a function would help.

Now, I think this is still an improvement on the status quo, so up to
you whether to do that now or later.

> +		int port_clock;
> +
> +		if (!hdmi_deep_color_possible(pipe_config, bpc))
> +			continue;
> +
> +		/*
> +		 * Need to adjust the port link by:
> +		 *  1.5x for 12bpc
> +		 *  1.25x for 10bpc
> +		 */
> +		port_clock = clock * bpc / 8;
> +
> +		if (hdmi_port_clock_valid(intel_hdmi, port_clock,
> +					  true, force_dvi) != MODE_OK)
> +			continue;
>  
> -	if (!pipe_config->bw_constrained) {
> -		DRM_DEBUG_KMS("forcing pipe bpp to %i for HDMI\n", desired_bpp);
> -		pipe_config->pipe_bpp = desired_bpp;
> +		pipe_config->port_clock = port_clock;
> +		break;
>  	}
>  
> +	/*
> +	 * pipe_bpp could already be below 8bpc due to
> +	 * FDI bandwidth constraints. We shouldn't bump it
> +	 * back up to 8bpc in that case.
> +	 */
> +	if (pipe_config->pipe_bpp > bpc * 3)
> +		pipe_config->pipe_bpp = bpc * 3;
> +	DRM_DEBUG_KMS("picking %dbpc for HDMI output (pipe bpp: %d)\n",
                                 ^

Put a space there?

Regardless of the nitpicks,

Reviewed-by: Jani Nikula <jani.nikula@intel.com>



> +		      bpc, pipe_config->pipe_bpp);
> +
>  	if (hdmi_port_clock_valid(intel_hdmi, pipe_config->port_clock,
>  				  false, force_dvi) != MODE_OK) {
> -		DRM_DEBUG_KMS("unsupported HDMI clock, rejecting mode\n");
> +		DRM_DEBUG_KMS("unsupported HDMI clock (%d kHz), rejecting mode\n",
> +			      pipe_config->port_clock);
>  		return -EINVAL;
>  	}

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

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

* Re: [PATCH] drm/i915: Clean up HDMI deep color handling a bit
  2019-08-27  9:30 ` [PATCH] " Jani Nikula
@ 2019-08-28 17:38   ` Ville Syrjälä
  0 siblings, 0 replies; 9+ messages in thread
From: Ville Syrjälä @ 2019-08-28 17:38 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

On Tue, Aug 27, 2019 at 12:30:52PM +0300, Jani Nikula wrote:
> On Thu, 22 Aug 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Reogranize the HDMI deep color state computation to just
> > loop over possible bpc values. Avoids having to maintain
> > so many variants of the clock etc.
> >
> > The current code also looks confused w.r.t. port_clock vs.
> > bw_constrained. It would happily update port_clock for
> > deep color but then not actually enable deep color due to
> > bw_constrained being set. The new logic handles that case
> > correctly.
> 
> Care to elaborate on that please?

Actually I guess it can't happen because:
- bw_constrained is for fdi only atm and no 10bpc hdmi on those
- we can never come here with pipe_bpp==12 + bw_constrained==true anyway

But looks like before commit 3fad10dbb688 ("drm/i915/icl: Fix setting
10 bit deep color mode") this could have been a problem because we could
have legitimately come here with:

pipe_bpp=10*3
bw_constrained=true
deep_color_possible(12) -> true
 -> port_clock = clock * 12 / 8;
if (!bw_constained)
	pipe_bpp = 12*3;

Ie. we'd have come out with with pipe_bpp=10*3 +
port_clock set up for 12 bpc.

> 
> Some nitpicking below.
> 
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_hdmi.c | 82 ++++++++++-------------
> >  1 file changed, 37 insertions(+), 45 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > index e02f0faecf02..ed1a7afc1ffd 100644
> > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > @@ -2262,8 +2262,7 @@ static bool hdmi_deep_color_possible(const struct intel_crtc_state *crtc_state,
> >  static bool
> >  intel_hdmi_ycbcr420_config(struct drm_connector *connector,
> >  			   struct intel_crtc_state *config,
> > -			   int *clock_12bpc, int *clock_10bpc,
> > -			   int *clock_8bpc)
> > +			   int *clock)
> >  {
> >  	struct intel_crtc *intel_crtc = to_intel_crtc(config->base.crtc);
> >  
> > @@ -2273,10 +2272,7 @@ intel_hdmi_ycbcr420_config(struct drm_connector *connector,
> >  	}
> >  
> >  	/* YCBCR420 TMDS rate requirement is half the pixel clock */
> > -	config->port_clock /= 2;
> > -	*clock_12bpc /= 2;
> > -	*clock_10bpc /= 2;
> > -	*clock_8bpc /= 2;
> > +	*clock /= 2;
> >  	config->output_format = INTEL_OUTPUT_FORMAT_YCBCR420;
> >  
> >  	/* YCBCR 420 output conversion needs a scaler */
> > @@ -2302,10 +2298,7 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
> >  	struct drm_scdc *scdc = &connector->display_info.hdmi.scdc;
> >  	struct intel_digital_connector_state *intel_conn_state =
> >  		to_intel_digital_connector_state(conn_state);
> > -	int clock_8bpc = pipe_config->base.adjusted_mode.crtc_clock;
> > -	int clock_10bpc = clock_8bpc * 5 / 4;
> > -	int clock_12bpc = clock_8bpc * 3 / 2;
> > -	int desired_bpp;
> > +	int bpc, clock = pipe_config->base.adjusted_mode.crtc_clock;
> >  	bool force_dvi = intel_conn_state->force_audio == HDMI_AUDIO_OFF_DVI;
> >  
> >  	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
> > @@ -2330,15 +2323,11 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
> >  
> >  	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
> >  		pipe_config->pixel_multiplier = 2;
> > -		clock_8bpc *= 2;
> > -		clock_10bpc *= 2;
> > -		clock_12bpc *= 2;
> > +		clock *= 2;
> >  	}
> >  
> >  	if (drm_mode_is_420_only(&connector->display_info, adjusted_mode)) {
> > -		if (!intel_hdmi_ycbcr420_config(connector, pipe_config,
> > -						&clock_12bpc, &clock_10bpc,
> > -						&clock_8bpc)) {
> > +		if (!intel_hdmi_ycbcr420_config(connector, pipe_config, &clock)) {
> >  			DRM_ERROR("Can't support YCBCR420 output\n");
> >  			return -EINVAL;
> >  		}
> > @@ -2355,41 +2344,44 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
> >  				intel_conn_state->force_audio == HDMI_AUDIO_ON;
> >  	}
> >  
> > -	/*
> > -	 * Note that g4x/vlv don't support 12bpc hdmi outputs. We also need
> > -	 * to check that the higher clock still fits within limits.
> > -	 */
> > -	if (hdmi_deep_color_possible(pipe_config, 12) &&
> > -	    hdmi_port_clock_valid(intel_hdmi, clock_12bpc,
> > -				  true, force_dvi) == MODE_OK) {
> > -		DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
> > -		desired_bpp = 12*3;
> > -
> > -		/* Need to adjust the port link by 1.5x for 12bpc. */
> > -		pipe_config->port_clock = clock_12bpc;
> > -	} else if (hdmi_deep_color_possible(pipe_config, 10) &&
> > -		   hdmi_port_clock_valid(intel_hdmi, clock_10bpc,
> > -					 true, force_dvi) == MODE_OK) {
> > -		DRM_DEBUG_KMS("picking bpc to 10 for HDMI output\n");
> > -		desired_bpp = 10 * 3;
> > -
> > -		/* Need to adjust the port link by 1.25x for 10bpc. */
> > -		pipe_config->port_clock = clock_10bpc;
> > -	} else {
> > -		DRM_DEBUG_KMS("picking bpc to 8 for HDMI output\n");
> > -		desired_bpp = 8*3;
> > +	/* for 8bpc */
> > +	pipe_config->port_clock = clock;
> >  
> > -		pipe_config->port_clock = clock_8bpc;
> > -	}
> > +	for (bpc = 12; bpc > 8; bpc -= 2) {
> 
> So I generally don't like loops like this. You enter the loop with 12
> and 10, don't enter with 8 but assume in later code that's what you got
> if not 12 or 10. And, of course, you need to initialize
> pipe_config->port_clock beforehand for that case too.
> 
> Perhaps abstracting the loop to a function would help.

Hmm. I guess. Though maybe I should split even more junk into a few
new functions...

> 
> Now, I think this is still an improvement on the status quo, so up to
> you whether to do that now or later.
> 
> > +		int port_clock;
> > +
> > +		if (!hdmi_deep_color_possible(pipe_config, bpc))
> > +			continue;
> > +
> > +		/*
> > +		 * Need to adjust the port link by:
> > +		 *  1.5x for 12bpc
> > +		 *  1.25x for 10bpc
> > +		 */
> > +		port_clock = clock * bpc / 8;
> > +
> > +		if (hdmi_port_clock_valid(intel_hdmi, port_clock,
> > +					  true, force_dvi) != MODE_OK)
> > +			continue;
> >  
> > -	if (!pipe_config->bw_constrained) {
> > -		DRM_DEBUG_KMS("forcing pipe bpp to %i for HDMI\n", desired_bpp);
> > -		pipe_config->pipe_bpp = desired_bpp;
> > +		pipe_config->port_clock = port_clock;
> > +		break;
> >  	}
> >  
> > +	/*
> > +	 * pipe_bpp could already be below 8bpc due to
> > +	 * FDI bandwidth constraints. We shouldn't bump it
> > +	 * back up to 8bpc in that case.
> > +	 */
> > +	if (pipe_config->pipe_bpp > bpc * 3)
> > +		pipe_config->pipe_bpp = bpc * 3;
> > +	DRM_DEBUG_KMS("picking %dbpc for HDMI output (pipe bpp: %d)\n",
>                                  ^
> 
> Put a space there?

Maybe. The comments in the code are w/o the space, but I guess we could
stick it in there anyway.

> 
> Regardless of the nitpicks,
> 
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> 
> 
> 
> > +		      bpc, pipe_config->pipe_bpp);
> > +
> >  	if (hdmi_port_clock_valid(intel_hdmi, pipe_config->port_clock,
> >  				  false, force_dvi) != MODE_OK) {
> > -		DRM_DEBUG_KMS("unsupported HDMI clock, rejecting mode\n");
> > +		DRM_DEBUG_KMS("unsupported HDMI clock (%d kHz), rejecting mode\n",
> > +			      pipe_config->port_clock);
> >  		return -EINVAL;
> >  	}
> 
> -- 
> Jani Nikula, Intel Open Source Graphics Center

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

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

* [PATCH v2] drm/i915: Clean up HDMI deep color handling a bit
  2019-08-22 18:05 [PATCH] drm/i915: Clean up HDMI deep color handling a bit Ville Syrjala
                   ` (2 preceding siblings ...)
  2019-08-27  9:30 ` [PATCH] " Jani Nikula
@ 2019-08-28 18:34 ` Ville Syrjala
  2019-09-02  7:39   ` Jani Nikula
  2019-08-29 10:30 ` ✓ Fi.CI.BAT: success for drm/i915: Clean up HDMI deep color handling a bit (rev2) Patchwork
  2019-08-29 20:16 ` ✓ Fi.CI.IGT: " Patchwork
  5 siblings, 1 reply; 9+ messages in thread
From: Ville Syrjala @ 2019-08-28 18:34 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reogranize the HDMI deep color state computation to just
loop over possible bpc values. Avoids having to maintain
so many variants of the clock etc.

The current code also looks confused w.r.t. port_clock vs.
bw_constrained. It would happily update port_clock for
deep color but then not actually enable deep color due to
bw_constrained being set. The new logic handles that case
correctly.

v2: Pull stuff into separate funcs (Jani)

Reviewed-by: Jani Nikula <jani.nikula@intel.com> #v1
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_hdmi.c | 134 +++++++++++++---------
 1 file changed, 77 insertions(+), 57 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 0f5a0c618e46..02c5c3811a56 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2261,9 +2261,7 @@ static bool hdmi_deep_color_possible(const struct intel_crtc_state *crtc_state,
 
 static bool
 intel_hdmi_ycbcr420_config(struct drm_connector *connector,
-			   struct intel_crtc_state *config,
-			   int *clock_12bpc, int *clock_10bpc,
-			   int *clock_8bpc)
+			   struct intel_crtc_state *config)
 {
 	struct intel_crtc *intel_crtc = to_intel_crtc(config->base.crtc);
 
@@ -2272,11 +2270,6 @@ intel_hdmi_ycbcr420_config(struct drm_connector *connector,
 		return false;
 	}
 
-	/* YCBCR420 TMDS rate requirement is half the pixel clock */
-	config->port_clock /= 2;
-	*clock_12bpc /= 2;
-	*clock_10bpc /= 2;
-	*clock_8bpc /= 2;
 	config->output_format = INTEL_OUTPUT_FORMAT_YCBCR420;
 
 	/* YCBCR 420 output conversion needs a scaler */
@@ -2291,6 +2284,76 @@ intel_hdmi_ycbcr420_config(struct drm_connector *connector,
 	return true;
 }
 
+static int intel_hdmi_port_clock(int clock, int bpc)
+{
+	/*
+	 * Need to adjust the port link by:
+	 *  1.5x for 12bpc
+	 *  1.25x for 10bpc
+	 */
+	return clock * bpc / 8;
+}
+
+static int intel_hdmi_compute_bpc(struct intel_encoder *encoder,
+				  struct intel_crtc_state *crtc_state,
+				  int clock, bool force_dvi)
+{
+	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
+	int bpc;
+
+	for (bpc = 12; bpc >= 10; bpc -= 2) {
+		if (hdmi_deep_color_possible(crtc_state, bpc) &&
+		    hdmi_port_clock_valid(intel_hdmi,
+					  intel_hdmi_port_clock(clock, bpc),
+					  true, force_dvi) == MODE_OK)
+			return bpc;
+	}
+
+	return 8;
+}
+
+static int intel_hdmi_compute_clock(struct intel_encoder *encoder,
+				    struct intel_crtc_state *crtc_state,
+				    bool force_dvi)
+{
+	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
+	const struct drm_display_mode *adjusted_mode =
+		&crtc_state->base.adjusted_mode;
+	int bpc, clock = adjusted_mode->crtc_clock;
+
+	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)
+		clock *= 2;
+
+	/* YCBCR420 TMDS rate requirement is half the pixel clock */
+	if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420)
+		clock /= 2;
+
+	bpc = intel_hdmi_compute_bpc(encoder, crtc_state,
+				     clock, force_dvi);
+
+	crtc_state->port_clock = intel_hdmi_port_clock(clock, bpc);
+
+	/*
+	 * pipe_bpp could already be below 8bpc due to
+	 * FDI bandwidth constraints. We shouldn't bump it
+	 * back up to 8bpc in that case.
+	 */
+	if (crtc_state->pipe_bpp > bpc * 3)
+		crtc_state->pipe_bpp = bpc * 3;
+
+	DRM_DEBUG_KMS("picking %d bpc for HDMI output (pipe bpp: %d)\n",
+		      bpc, crtc_state->pipe_bpp);
+
+	if (hdmi_port_clock_valid(intel_hdmi, crtc_state->port_clock,
+				  false, force_dvi) != MODE_OK) {
+		DRM_DEBUG_KMS("unsupported HDMI clock (%d kHz), rejecting mode\n",
+			      crtc_state->port_clock);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 int intel_hdmi_compute_config(struct intel_encoder *encoder,
 			      struct intel_crtc_state *pipe_config,
 			      struct drm_connector_state *conn_state)
@@ -2302,11 +2365,8 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
 	struct drm_scdc *scdc = &connector->display_info.hdmi.scdc;
 	struct intel_digital_connector_state *intel_conn_state =
 		to_intel_digital_connector_state(conn_state);
-	int clock_8bpc = pipe_config->base.adjusted_mode.crtc_clock;
-	int clock_10bpc = clock_8bpc * 5 / 4;
-	int clock_12bpc = clock_8bpc * 3 / 2;
-	int desired_bpp;
 	bool force_dvi = intel_conn_state->force_audio == HDMI_AUDIO_OFF_DVI;
+	int ret;
 
 	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
 		return -EINVAL;
@@ -2328,17 +2388,11 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
 			intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
 	}
 
-	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
+	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)
 		pipe_config->pixel_multiplier = 2;
-		clock_8bpc *= 2;
-		clock_10bpc *= 2;
-		clock_12bpc *= 2;
-	}
 
 	if (drm_mode_is_420_only(&connector->display_info, adjusted_mode)) {
-		if (!intel_hdmi_ycbcr420_config(connector, pipe_config,
-						&clock_12bpc, &clock_10bpc,
-						&clock_8bpc)) {
+		if (!intel_hdmi_ycbcr420_config(connector, pipe_config)) {
 			DRM_ERROR("Can't support YCBCR420 output\n");
 			return -EINVAL;
 		}
@@ -2355,43 +2409,9 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
 				intel_conn_state->force_audio == HDMI_AUDIO_ON;
 	}
 
-	/*
-	 * Note that g4x/vlv don't support 12bpc hdmi outputs. We also need
-	 * to check that the higher clock still fits within limits.
-	 */
-	if (hdmi_deep_color_possible(pipe_config, 12) &&
-	    hdmi_port_clock_valid(intel_hdmi, clock_12bpc,
-				  true, force_dvi) == MODE_OK) {
-		DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
-		desired_bpp = 12*3;
-
-		/* Need to adjust the port link by 1.5x for 12bpc. */
-		pipe_config->port_clock = clock_12bpc;
-	} else if (hdmi_deep_color_possible(pipe_config, 10) &&
-		   hdmi_port_clock_valid(intel_hdmi, clock_10bpc,
-					 true, force_dvi) == MODE_OK) {
-		DRM_DEBUG_KMS("picking bpc to 10 for HDMI output\n");
-		desired_bpp = 10 * 3;
-
-		/* Need to adjust the port link by 1.25x for 10bpc. */
-		pipe_config->port_clock = clock_10bpc;
-	} else {
-		DRM_DEBUG_KMS("picking bpc to 8 for HDMI output\n");
-		desired_bpp = 8*3;
-
-		pipe_config->port_clock = clock_8bpc;
-	}
-
-	if (!pipe_config->bw_constrained) {
-		DRM_DEBUG_KMS("forcing pipe bpp to %i for HDMI\n", desired_bpp);
-		pipe_config->pipe_bpp = desired_bpp;
-	}
-
-	if (hdmi_port_clock_valid(intel_hdmi, pipe_config->port_clock,
-				  false, force_dvi) != MODE_OK) {
-		DRM_DEBUG_KMS("unsupported HDMI clock, rejecting mode\n");
-		return -EINVAL;
-	}
+	ret = intel_hdmi_compute_clock(encoder, pipe_config, force_dvi);
+	if (ret)
+		return ret;
 
 	/* Set user selected PAR to incoming mode's member */
 	adjusted_mode->picture_aspect_ratio = conn_state->picture_aspect_ratio;
-- 
2.21.0

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

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

* ✓ Fi.CI.BAT: success for drm/i915: Clean up HDMI deep color handling a bit (rev2)
  2019-08-22 18:05 [PATCH] drm/i915: Clean up HDMI deep color handling a bit Ville Syrjala
                   ` (3 preceding siblings ...)
  2019-08-28 18:34 ` [PATCH v2] " Ville Syrjala
@ 2019-08-29 10:30 ` Patchwork
  2019-08-29 20:16 ` ✓ Fi.CI.IGT: " Patchwork
  5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2019-08-29 10:30 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Clean up HDMI deep color handling a bit (rev2)
URL   : https://patchwork.freedesktop.org/series/65685/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6798 -> Patchwork_14216
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/

Known issues
------------

  Here are the changes found in Patchwork_14216 that come from known issues:

### IGT changes ###

#### Possible fixes ####

  * igt@gem_exec_suspend@basic-s3:
    - fi-blb-e6850:       [INCOMPLETE][1] ([fdo#107718]) -> [PASS][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/fi-blb-e6850/igt@gem_exec_suspend@basic-s3.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/fi-blb-e6850/igt@gem_exec_suspend@basic-s3.html

  * igt@i915_selftest@live_gem_contexts:
    - fi-cfl-guc:         [INCOMPLETE][3] ([fdo#111514]) -> [PASS][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/fi-cfl-guc/igt@i915_selftest@live_gem_contexts.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/fi-cfl-guc/igt@i915_selftest@live_gem_contexts.html
    - fi-skl-iommu:       [INCOMPLETE][5] -> [PASS][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/fi-skl-iommu/igt@i915_selftest@live_gem_contexts.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/fi-skl-iommu/igt@i915_selftest@live_gem_contexts.html

  
#### Warnings ####

  * igt@kms_chamelium@hdmi-hpd-fast:
    - fi-kbl-7500u:       [FAIL][7] ([fdo#111096]) -> [FAIL][8] ([fdo#111407])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html

  
  [fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
  [fdo#111096]: https://bugs.freedesktop.org/show_bug.cgi?id=111096
  [fdo#111407]: https://bugs.freedesktop.org/show_bug.cgi?id=111407
  [fdo#111514]: https://bugs.freedesktop.org/show_bug.cgi?id=111514


Participating hosts (52 -> 45)
------------------------------

  Missing    (7): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-icl-y fi-byt-clapper fi-bdw-samus 


Build changes
-------------

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6798 -> Patchwork_14216

  CI-20190529: 20190529
  CI_DRM_6798: 9c51d473851d23f32a0667e3f2b8ed5bda27bf42 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5152: f9d17c54c6946eb6391fce88687f9b071be9446b @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14216: 0c3d981e53a228b01aac1b2ac0e87f6dd914a3ef @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

0c3d981e53a2 drm/i915: Clean up HDMI deep color handling a bit

== Logs ==

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

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

* ✓ Fi.CI.IGT: success for drm/i915: Clean up HDMI deep color handling a bit (rev2)
  2019-08-22 18:05 [PATCH] drm/i915: Clean up HDMI deep color handling a bit Ville Syrjala
                   ` (4 preceding siblings ...)
  2019-08-29 10:30 ` ✓ Fi.CI.BAT: success for drm/i915: Clean up HDMI deep color handling a bit (rev2) Patchwork
@ 2019-08-29 20:16 ` Patchwork
  5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2019-08-29 20:16 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Clean up HDMI deep color handling a bit (rev2)
URL   : https://patchwork.freedesktop.org/series/65685/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6798_full -> Patchwork_14216_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Known issues
------------

  Here are the changes found in Patchwork_14216_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_schedule@fifo-bsd1:
    - shard-iclb:         [PASS][1] -> [SKIP][2] ([fdo#109276]) +6 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb1/igt@gem_exec_schedule@fifo-bsd1.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb5/igt@gem_exec_schedule@fifo-bsd1.html

  * igt@gem_exec_schedule@out-order-bsd2:
    - shard-iclb:         ([PASS][3], [PASS][4]) -> [SKIP][5] ([fdo#109276]) +5 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb2/igt@gem_exec_schedule@out-order-bsd2.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb1/igt@gem_exec_schedule@out-order-bsd2.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb6/igt@gem_exec_schedule@out-order-bsd2.html

  * igt@gem_exec_schedule@promotion-bsd:
    - shard-iclb:         [PASS][6] -> [SKIP][7] ([fdo#111325])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb7/igt@gem_exec_schedule@promotion-bsd.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb2/igt@gem_exec_schedule@promotion-bsd.html

  * igt@gem_exec_schedule@reorder-wide-bsd:
    - shard-iclb:         ([PASS][8], [PASS][9]) -> [SKIP][10] ([fdo#111325]) +6 similar issues
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb5/igt@gem_exec_schedule@reorder-wide-bsd.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb6/igt@gem_exec_schedule@reorder-wide-bsd.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb2/igt@gem_exec_schedule@reorder-wide-bsd.html

  * igt@gem_exec_suspend@basic-s3:
    - shard-skl:          [PASS][11] -> [INCOMPLETE][12] ([fdo#104108])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-skl10/igt@gem_exec_suspend@basic-s3.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-skl10/igt@gem_exec_suspend@basic-s3.html

  * igt@gem_softpin@noreloc-s3:
    - shard-apl:          ([PASS][13], [PASS][14]) -> [DMESG-WARN][15] ([fdo#108566]) +2 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl3/igt@gem_softpin@noreloc-s3.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl2/igt@gem_softpin@noreloc-s3.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-apl1/igt@gem_softpin@noreloc-s3.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-hsw:          ([PASS][16], [PASS][17]) -> [INCOMPLETE][18] ([fdo#103540])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-hsw1/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-hsw5/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-hsw4/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-kbl:          ([PASS][19], [PASS][20]) -> [DMESG-WARN][21] ([fdo#108566]) +1 similar issue
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-kbl6/igt@kms_flip@flip-vs-suspend-interruptible.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-kbl7/igt@kms_flip@flip-vs-suspend-interruptible.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-kbl6/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite:
    - shard-iclb:         ([PASS][22], [PASS][23]) -> [FAIL][24] ([fdo#103167]) +2 similar issues
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes:
    - shard-apl:          [PASS][25] -> [DMESG-WARN][26] ([fdo#108566]) +2 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl6/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-apl5/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes.html

  * igt@kms_psr@psr2_primary_mmap_cpu:
    - shard-iclb:         [PASS][27] -> [SKIP][28] ([fdo#109441])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb2/igt@kms_psr@psr2_primary_mmap_cpu.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb6/igt@kms_psr@psr2_primary_mmap_cpu.html

  * igt@kms_setmode@basic:
    - shard-apl:          ([PASS][29], [PASS][30]) -> [FAIL][31] ([fdo#99912])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl4/igt@kms_setmode@basic.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl5/igt@kms_setmode@basic.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-apl3/igt@kms_setmode@basic.html

  * igt@kms_vblank@pipe-b-query-idle-hang:
    - shard-apl:          ([PASS][32], [PASS][33]) -> [INCOMPLETE][34] ([fdo#103927])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl4/igt@kms_vblank@pipe-b-query-idle-hang.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl6/igt@kms_vblank@pipe-b-query-idle-hang.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-apl6/igt@kms_vblank@pipe-b-query-idle-hang.html

  * igt@perf@blocking:
    - shard-skl:          [PASS][35] -> [FAIL][36] ([fdo#110728]) +1 similar issue
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-skl5/igt@perf@blocking.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-skl3/igt@perf@blocking.html

  
#### Possible fixes ####

  * igt@gem_exec_schedule@in-order-bsd:
    - shard-iclb:         ([SKIP][37], [PASS][38]) ([fdo#111325]) -> [PASS][39] +8 similar issues
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb1/igt@gem_exec_schedule@in-order-bsd.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb6/igt@gem_exec_schedule@in-order-bsd.html
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb3/igt@gem_exec_schedule@in-order-bsd.html

  * igt@gem_exec_schedule@preempt-queue-bsd1:
    - shard-iclb:         ([SKIP][40], [PASS][41]) ([fdo#109276]) -> [PASS][42] +10 similar issues
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb3/igt@gem_exec_schedule@preempt-queue-bsd1.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb4/igt@gem_exec_schedule@preempt-queue-bsd1.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb1/igt@gem_exec_schedule@preempt-queue-bsd1.html

  * igt@gem_exec_schedule@preempt-queue-chain-bsd2:
    - shard-iclb:         [SKIP][43] ([fdo#109276]) -> [PASS][44] +2 similar issues
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb7/igt@gem_exec_schedule@preempt-queue-chain-bsd2.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb2/igt@gem_exec_schedule@preempt-queue-chain-bsd2.html

  * igt@gem_softpin@noreloc-s3:
    - shard-kbl:          ([DMESG-WARN][45], [PASS][46]) ([fdo#108566]) -> [PASS][47] +1 similar issue
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-kbl6/igt@gem_softpin@noreloc-s3.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-kbl3/igt@gem_softpin@noreloc-s3.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-kbl1/igt@gem_softpin@noreloc-s3.html

  * igt@gem_tiled_swapping@non-threaded:
    - shard-kbl:          ([DMESG-WARN][48], [PASS][49]) ([fdo#108686]) -> [PASS][50]
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-kbl1/igt@gem_tiled_swapping@non-threaded.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-kbl3/igt@gem_tiled_swapping@non-threaded.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-kbl4/igt@gem_tiled_swapping@non-threaded.html

  * igt@i915_pm_rc6_residency@rc6-accuracy:
    - shard-kbl:          ([PASS][51], [SKIP][52]) ([fdo#109271]) -> [PASS][53]
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-kbl3/igt@i915_pm_rc6_residency@rc6-accuracy.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-kbl1/igt@i915_pm_rc6_residency@rc6-accuracy.html
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-kbl2/igt@i915_pm_rc6_residency@rc6-accuracy.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-apl:          ([DMESG-WARN][54], [DMESG-WARN][55]) ([fdo#108566]) -> [PASS][56] +3 similar issues
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl1/igt@i915_suspend@fence-restore-tiled2untiled.html
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl8/igt@i915_suspend@fence-restore-tiled2untiled.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-apl8/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@kms_atomic_transition@plane-all-transition-fencing:
    - shard-iclb:         ([INCOMPLETE][57], [PASS][58]) ([fdo#107713]) -> [PASS][59]
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb7/igt@kms_atomic_transition@plane-all-transition-fencing.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb3/igt@kms_atomic_transition@plane-all-transition-fencing.html
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb5/igt@kms_atomic_transition@plane-all-transition-fencing.html

  * igt@kms_cursor_crc@pipe-c-cursor-suspend:
    - shard-apl:          [DMESG-WARN][60] ([fdo#108566]) -> [PASS][61]
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl7/igt@kms_cursor_crc@pipe-c-cursor-suspend.html
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-apl5/igt@kms_cursor_crc@pipe-c-cursor-suspend.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic:
    - shard-hsw:          ([FAIL][62], [PASS][63]) ([fdo#105767]) -> [PASS][64]
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-hsw8/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-hsw5/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-hsw2/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html

  * igt@kms_cursor_legacy@cursor-vs-flip-toggle:
    - shard-hsw:          ([PASS][65], [FAIL][66]) ([fdo#103355]) -> [PASS][67]
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-hsw5/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-hsw6/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-hsw4/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-glk:          ([FAIL][68], [PASS][69]) ([fdo#105363]) -> [PASS][70]
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-glk4/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-glk1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-glk1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite:
    - shard-iclb:         ([FAIL][71], [PASS][72]) ([fdo#103167]) -> [PASS][73] +8 similar issues
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb2/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb5/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb8/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - shard-apl:          ([DMESG-WARN][74], [PASS][75]) ([fdo#108566]) -> [PASS][76] +2 similar issues
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl1/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl5/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-apl4/igt@kms_frontbuffer_tracking@fbc-suspend.html

  * igt@kms_frontbuffer_tracking@fbc-tilingchange:
    - shard-apl:          ([PASS][77], [INCOMPLETE][78]) ([fdo#103927]) -> [PASS][79] +2 similar issues
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl5/igt@kms_frontbuffer_tracking@fbc-tilingchange.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-apl7/igt@kms_frontbuffer_tracking@fbc-tilingchange.html
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-apl4/igt@kms_frontbuffer_tracking@fbc-tilingchange.html

  * igt@kms_plane_alpha_blend@pipe-b-coverage-7efc:
    - shard-skl:          ([FAIL][80], [PASS][81]) ([fdo#108145] / [fdo#110403]) -> [PASS][82]
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-skl1/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-skl4/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-skl7/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html

  * igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
    - shard-skl:          ([FAIL][83], [FAIL][84]) ([fdo#108145] / [fdo#110403]) -> [PASS][85]
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-skl7/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-skl2/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-skl6/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html

  * igt@kms_psr@no_drrs:
    - shard-iclb:         ([PASS][86], [FAIL][87]) ([fdo#108341]) -> [PASS][88]
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb6/igt@kms_psr@no_drrs.html
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb1/igt@kms_psr@no_drrs.html
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb3/igt@kms_psr@no_drrs.html

  * igt@kms_psr@psr2_sprite_blt:
    - shard-iclb:         ([SKIP][89], [SKIP][90]) ([fdo#109441]) -> [PASS][91] +1 similar issue
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb6/igt@kms_psr@psr2_sprite_blt.html
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb5/igt@kms_psr@psr2_sprite_blt.html
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html

  * igt@kms_setmode@basic:
    - shard-skl:          ([FAIL][92], [FAIL][93]) ([fdo#99912]) -> [PASS][94]
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-skl7/igt@kms_setmode@basic.html
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-skl9/igt@kms_setmode@basic.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-skl2/igt@kms_setmode@basic.html

  * igt@prime_busy@hang-bsd2:
    - shard-iclb:         ([SKIP][95], [SKIP][96]) ([fdo#109276]) -> [PASS][97] +12 similar issues
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb3/igt@prime_busy@hang-bsd2.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb5/igt@prime_busy@hang-bsd2.html
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb1/igt@prime_busy@hang-bsd2.html

  
#### Warnings ####

  * igt@gem_ctx_isolation@vcs1-nonpriv:
    - shard-iclb:         [FAIL][98] ([fdo#111329]) -> [SKIP][99] ([fdo#109276])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb1/igt@gem_ctx_isolation@vcs1-nonpriv.html
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb5/igt@gem_ctx_isolation@vcs1-nonpriv.html

  * igt@gem_ctx_shared@exec-single-timeline-bsd:
    - shard-iclb:         ([PASS][100], [SKIP][101]) ([fdo#110841]) -> [SKIP][102] ([fdo#110841])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb3/igt@gem_ctx_shared@exec-single-timeline-bsd.html
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb4/igt@gem_ctx_shared@exec-single-timeline-bsd.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb1/igt@gem_ctx_shared@exec-single-timeline-bsd.html

  * igt@gem_exec_schedule@preempt-queue-contexts-chain-bsd:
    - shard-iclb:         ([SKIP][103], [PASS][104]) ([fdo#111325]) -> [SKIP][105] ([fdo#111325]) +1 similar issue
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb4/igt@gem_exec_schedule@preempt-queue-contexts-chain-bsd.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb8/igt@gem_exec_schedule@preempt-queue-contexts-chain-bsd.html
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb4/igt@gem_exec_schedule@preempt-queue-contexts-chain-bsd.html

  * igt@gem_mocs_settings@mocs-isolation-bsd2:
    - shard-iclb:         ([SKIP][106], [SKIP][107]) ([fdo#109276]) -> [FAIL][108] ([fdo#111330])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb3/igt@gem_mocs_settings@mocs-isolation-bsd2.html
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb7/igt@gem_mocs_settings@mocs-isolation-bsd2.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb1/igt@gem_mocs_settings@mocs-isolation-bsd2.html

  * igt@gem_mocs_settings@mocs-rc6-bsd2:
    - shard-iclb:         ([FAIL][109], [FAIL][110]) ([fdo#111330]) -> [SKIP][111] ([fdo#109276])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb2/igt@gem_mocs_settings@mocs-rc6-bsd2.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb1/igt@gem_mocs_settings@mocs-rc6-bsd2.html
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb6/igt@gem_mocs_settings@mocs-rc6-bsd2.html

  * igt@gem_mocs_settings@mocs-reset-bsd2:
    - shard-iclb:         ([SKIP][112], [FAIL][113]) ([fdo#109276] / [fdo#111330]) -> [SKIP][114] ([fdo#109276])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb5/igt@gem_mocs_settings@mocs-reset-bsd2.html
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb2/igt@gem_mocs_settings@mocs-reset-bsd2.html
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14216/shard-iclb8/igt@gem_mocs_settings@mocs-reset-bsd2.html

  * igt@gem_mocs_settings@mocs-settings-bsd2:
    - shard-iclb:         ([SKIP][115], [FAIL][116]) ([fdo#109276] / [fdo#111330]) -> [FAIL][117] ([fdo#111330])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb3/igt@gem_mocs_settings@mocs-settings-bsd2.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6798/shard-iclb4/igt@gem_mocs_

== Logs ==

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

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

* Re: [PATCH v2] drm/i915: Clean up HDMI deep color handling a bit
  2019-08-28 18:34 ` [PATCH v2] " Ville Syrjala
@ 2019-09-02  7:39   ` Jani Nikula
  0 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2019-09-02  7:39 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 28 Aug 2019, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Reogranize the HDMI deep color state computation to just
> loop over possible bpc values. Avoids having to maintain
> so many variants of the clock etc.
>
> The current code also looks confused w.r.t. port_clock vs.
> bw_constrained. It would happily update port_clock for
> deep color but then not actually enable deep color due to
> bw_constrained being set. The new logic handles that case
> correctly.
>
> v2: Pull stuff into separate funcs (Jani)
>
> Reviewed-by: Jani Nikula <jani.nikula@intel.com> #v1

Also v2, I think this is neater.

BR,
Jani.

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_hdmi.c | 134 +++++++++++++---------
>  1 file changed, 77 insertions(+), 57 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index 0f5a0c618e46..02c5c3811a56 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -2261,9 +2261,7 @@ static bool hdmi_deep_color_possible(const struct intel_crtc_state *crtc_state,
>  
>  static bool
>  intel_hdmi_ycbcr420_config(struct drm_connector *connector,
> -			   struct intel_crtc_state *config,
> -			   int *clock_12bpc, int *clock_10bpc,
> -			   int *clock_8bpc)
> +			   struct intel_crtc_state *config)
>  {
>  	struct intel_crtc *intel_crtc = to_intel_crtc(config->base.crtc);
>  
> @@ -2272,11 +2270,6 @@ intel_hdmi_ycbcr420_config(struct drm_connector *connector,
>  		return false;
>  	}
>  
> -	/* YCBCR420 TMDS rate requirement is half the pixel clock */
> -	config->port_clock /= 2;
> -	*clock_12bpc /= 2;
> -	*clock_10bpc /= 2;
> -	*clock_8bpc /= 2;
>  	config->output_format = INTEL_OUTPUT_FORMAT_YCBCR420;
>  
>  	/* YCBCR 420 output conversion needs a scaler */
> @@ -2291,6 +2284,76 @@ intel_hdmi_ycbcr420_config(struct drm_connector *connector,
>  	return true;
>  }
>  
> +static int intel_hdmi_port_clock(int clock, int bpc)
> +{
> +	/*
> +	 * Need to adjust the port link by:
> +	 *  1.5x for 12bpc
> +	 *  1.25x for 10bpc
> +	 */
> +	return clock * bpc / 8;
> +}
> +
> +static int intel_hdmi_compute_bpc(struct intel_encoder *encoder,
> +				  struct intel_crtc_state *crtc_state,
> +				  int clock, bool force_dvi)
> +{
> +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
> +	int bpc;
> +
> +	for (bpc = 12; bpc >= 10; bpc -= 2) {
> +		if (hdmi_deep_color_possible(crtc_state, bpc) &&
> +		    hdmi_port_clock_valid(intel_hdmi,
> +					  intel_hdmi_port_clock(clock, bpc),
> +					  true, force_dvi) == MODE_OK)
> +			return bpc;
> +	}
> +
> +	return 8;
> +}
> +
> +static int intel_hdmi_compute_clock(struct intel_encoder *encoder,
> +				    struct intel_crtc_state *crtc_state,
> +				    bool force_dvi)
> +{
> +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
> +	const struct drm_display_mode *adjusted_mode =
> +		&crtc_state->base.adjusted_mode;
> +	int bpc, clock = adjusted_mode->crtc_clock;
> +
> +	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)
> +		clock *= 2;
> +
> +	/* YCBCR420 TMDS rate requirement is half the pixel clock */
> +	if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420)
> +		clock /= 2;
> +
> +	bpc = intel_hdmi_compute_bpc(encoder, crtc_state,
> +				     clock, force_dvi);
> +
> +	crtc_state->port_clock = intel_hdmi_port_clock(clock, bpc);
> +
> +	/*
> +	 * pipe_bpp could already be below 8bpc due to
> +	 * FDI bandwidth constraints. We shouldn't bump it
> +	 * back up to 8bpc in that case.
> +	 */
> +	if (crtc_state->pipe_bpp > bpc * 3)
> +		crtc_state->pipe_bpp = bpc * 3;
> +
> +	DRM_DEBUG_KMS("picking %d bpc for HDMI output (pipe bpp: %d)\n",
> +		      bpc, crtc_state->pipe_bpp);
> +
> +	if (hdmi_port_clock_valid(intel_hdmi, crtc_state->port_clock,
> +				  false, force_dvi) != MODE_OK) {
> +		DRM_DEBUG_KMS("unsupported HDMI clock (%d kHz), rejecting mode\n",
> +			      crtc_state->port_clock);
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}
> +
>  int intel_hdmi_compute_config(struct intel_encoder *encoder,
>  			      struct intel_crtc_state *pipe_config,
>  			      struct drm_connector_state *conn_state)
> @@ -2302,11 +2365,8 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
>  	struct drm_scdc *scdc = &connector->display_info.hdmi.scdc;
>  	struct intel_digital_connector_state *intel_conn_state =
>  		to_intel_digital_connector_state(conn_state);
> -	int clock_8bpc = pipe_config->base.adjusted_mode.crtc_clock;
> -	int clock_10bpc = clock_8bpc * 5 / 4;
> -	int clock_12bpc = clock_8bpc * 3 / 2;
> -	int desired_bpp;
>  	bool force_dvi = intel_conn_state->force_audio == HDMI_AUDIO_OFF_DVI;
> +	int ret;
>  
>  	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
>  		return -EINVAL;
> @@ -2328,17 +2388,11 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
>  			intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED;
>  	}
>  
> -	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
> +	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)
>  		pipe_config->pixel_multiplier = 2;
> -		clock_8bpc *= 2;
> -		clock_10bpc *= 2;
> -		clock_12bpc *= 2;
> -	}
>  
>  	if (drm_mode_is_420_only(&connector->display_info, adjusted_mode)) {
> -		if (!intel_hdmi_ycbcr420_config(connector, pipe_config,
> -						&clock_12bpc, &clock_10bpc,
> -						&clock_8bpc)) {
> +		if (!intel_hdmi_ycbcr420_config(connector, pipe_config)) {
>  			DRM_ERROR("Can't support YCBCR420 output\n");
>  			return -EINVAL;
>  		}
> @@ -2355,43 +2409,9 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
>  				intel_conn_state->force_audio == HDMI_AUDIO_ON;
>  	}
>  
> -	/*
> -	 * Note that g4x/vlv don't support 12bpc hdmi outputs. We also need
> -	 * to check that the higher clock still fits within limits.
> -	 */
> -	if (hdmi_deep_color_possible(pipe_config, 12) &&
> -	    hdmi_port_clock_valid(intel_hdmi, clock_12bpc,
> -				  true, force_dvi) == MODE_OK) {
> -		DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
> -		desired_bpp = 12*3;
> -
> -		/* Need to adjust the port link by 1.5x for 12bpc. */
> -		pipe_config->port_clock = clock_12bpc;
> -	} else if (hdmi_deep_color_possible(pipe_config, 10) &&
> -		   hdmi_port_clock_valid(intel_hdmi, clock_10bpc,
> -					 true, force_dvi) == MODE_OK) {
> -		DRM_DEBUG_KMS("picking bpc to 10 for HDMI output\n");
> -		desired_bpp = 10 * 3;
> -
> -		/* Need to adjust the port link by 1.25x for 10bpc. */
> -		pipe_config->port_clock = clock_10bpc;
> -	} else {
> -		DRM_DEBUG_KMS("picking bpc to 8 for HDMI output\n");
> -		desired_bpp = 8*3;
> -
> -		pipe_config->port_clock = clock_8bpc;
> -	}
> -
> -	if (!pipe_config->bw_constrained) {
> -		DRM_DEBUG_KMS("forcing pipe bpp to %i for HDMI\n", desired_bpp);
> -		pipe_config->pipe_bpp = desired_bpp;
> -	}
> -
> -	if (hdmi_port_clock_valid(intel_hdmi, pipe_config->port_clock,
> -				  false, force_dvi) != MODE_OK) {
> -		DRM_DEBUG_KMS("unsupported HDMI clock, rejecting mode\n");
> -		return -EINVAL;
> -	}
> +	ret = intel_hdmi_compute_clock(encoder, pipe_config, force_dvi);
> +	if (ret)
> +		return ret;
>  
>  	/* Set user selected PAR to incoming mode's member */
>  	adjusted_mode->picture_aspect_ratio = conn_state->picture_aspect_ratio;

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

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

end of thread, other threads:[~2019-09-02  7:38 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-22 18:05 [PATCH] drm/i915: Clean up HDMI deep color handling a bit Ville Syrjala
2019-08-23 11:20 ` ✓ Fi.CI.BAT: success for " Patchwork
2019-08-24  5:51 ` ✓ Fi.CI.IGT: " Patchwork
2019-08-27  9:30 ` [PATCH] " Jani Nikula
2019-08-28 17:38   ` Ville Syrjälä
2019-08-28 18:34 ` [PATCH v2] " Ville Syrjala
2019-09-02  7:39   ` Jani Nikula
2019-08-29 10:30 ` ✓ Fi.CI.BAT: success for drm/i915: Clean up HDMI deep color handling a bit (rev2) Patchwork
2019-08-29 20:16 ` ✓ Fi.CI.IGT: " Patchwork

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