All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes
@ 2023-07-05 20:21 Ville Syrjala
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 01/13] drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays Ville Syrjala
                   ` (16 more replies)
  0 siblings, 17 replies; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

I have plans to switch the whole driver over to using
drm_connector_init_with_ddc(), and thus populate the
sysfs "ddc" consistently. The biggest hurdle is the 
SDVO DDC handling, so start by cleaning that up.

I also found some other issues with the SDVO code so
some additional fixes are also included.

Ville Syrjälä (13):
  drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays
  drm/i915/sdvo: Protect macro args
  drm/i915/sdvo: s/sdvo_inputs_mask/sdvo_num_inputs/
  drm/i915: Don't warn about zero N/P in *_calc_dpll_params()
  drm/i915: Fully populate crtc_state->dpll
  drm/i915/sdvo: Pick the TV dotclock from adjusted_mode
  drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range
  drm/i915/sdvo: Nuke attached_output tracking
  drm/i915/sdvo: Initialize the encoder ealier
  drm/i915/sdvo: Nuke the duplicate sdvo->port
  drm/i915/sdvo: Get rid of the per-connector i2c symlink
  drm/i915/sdvo: Rework DDC bus handling
  drm/i915/sdvo: Print out the i2c pin and slave address

 drivers/gpu/drm/i915/display/intel_dpll.c     |  54 ++-
 drivers/gpu/drm/i915/display/intel_sdvo.c     | 357 +++++++++---------
 .../gpu/drm/i915/display/intel_sdvo_regs.h    |   2 +-
 3 files changed, 219 insertions(+), 194 deletions(-)

-- 
2.39.3


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

* [Intel-gfx] [PATCH 01/13] drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  7:20   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 02/13] drm/i915/sdvo: Protect macro args Ville Syrjala
                   ` (15 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

I have at least one SDVO device (some Lenovo DVI-I ADD2 card,
based on Conexant CX25904) where GetAttachedDisplays returns
success but fails to report any attached displays unless wet
precede the command with a SetTargetOutput. Make it so.

I wasn't able to spot anything in the SDVO spec stating that
this should be necessary, but real world wins over spec.

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

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 8298a86d1334..9ac4c0b6055b 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -2135,6 +2135,10 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
 	if (!INTEL_DISPLAY_ENABLED(i915))
 		return connector_status_disconnected;
 
+	if (!intel_sdvo_set_target_output(intel_sdvo,
+					  intel_sdvo_connector->output_flag))
+		return connector_status_unknown;
+
 	if (!intel_sdvo_get_value(intel_sdvo,
 				  SDVO_CMD_GET_ATTACHED_DISPLAYS,
 				  &response, 2))
-- 
2.39.3


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

* [Intel-gfx] [PATCH 02/13] drm/i915/sdvo: Protect macro args
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 01/13] drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  7:20   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 03/13] drm/i915/sdvo: s/sdvo_inputs_mask/sdvo_num_inputs/ Ville Syrjala
                   ` (14 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

Put parens around macro argument evaluation for safety.

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

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 9ac4c0b6055b..ec94da6cb7bb 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -57,14 +57,13 @@
 #define SDVO_LVDS_MASK (SDVO_OUTPUT_LVDS0 | SDVO_OUTPUT_LVDS1)
 #define SDVO_TV_MASK   (SDVO_OUTPUT_CVBS0 | SDVO_OUTPUT_SVID0 | SDVO_OUTPUT_YPRPB0)
 
-#define SDVO_OUTPUT_MASK (SDVO_TMDS_MASK | SDVO_RGB_MASK | SDVO_LVDS_MASK |\
-			SDVO_TV_MASK)
+#define SDVO_OUTPUT_MASK (SDVO_TMDS_MASK | SDVO_RGB_MASK | SDVO_LVDS_MASK | SDVO_TV_MASK)
 
-#define IS_TV(c)	(c->output_flag & SDVO_TV_MASK)
-#define IS_TMDS(c)	(c->output_flag & SDVO_TMDS_MASK)
-#define IS_LVDS(c)	(c->output_flag & SDVO_LVDS_MASK)
-#define IS_TV_OR_LVDS(c) (c->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
-#define IS_DIGITAL(c) (c->output_flag & (SDVO_TMDS_MASK | SDVO_LVDS_MASK))
+#define IS_TV(c)		((c)->output_flag & SDVO_TV_MASK)
+#define IS_TMDS(c)		((c)->output_flag & SDVO_TMDS_MASK)
+#define IS_LVDS(c)		((c)->output_flag & SDVO_LVDS_MASK)
+#define IS_TV_OR_LVDS(c)	((c)->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
+#define IS_DIGITAL(c)		((c)->output_flag & (SDVO_TMDS_MASK | SDVO_LVDS_MASK))
 
 
 static const char * const tv_format_names[] = {
-- 
2.39.3


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

* [Intel-gfx] [PATCH 03/13] drm/i915/sdvo: s/sdvo_inputs_mask/sdvo_num_inputs/
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 01/13] drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays Ville Syrjala
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 02/13] drm/i915/sdvo: Protect macro args Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  7:24   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 04/13] drm/i915: Don't warn about zero N/P in *_calc_dpll_params() Ville Syrjala
                   ` (13 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

The SDVO inputs are reportes a simple number, not a bitmask.
Adjust the code to match reality.

Note that we don't actually support dual input SDVO devices,
and we just always use the first input.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_sdvo.c      | 9 ++++-----
 drivers/gpu/drm/i915/display/intel_sdvo_regs.h | 2 +-
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index ec94da6cb7bb..76eed11e9fed 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -1955,7 +1955,7 @@ static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct in
 		      "  device_rev_id: %d\n"
 		      "  sdvo_version_major: %d\n"
 		      "  sdvo_version_minor: %d\n"
-		      "  sdvo_inputs_mask: %d\n"
+		      "  sdvo_num_inputs: %d\n"
 		      "  smooth_scaling: %d\n"
 		      "  sharp_scaling: %d\n"
 		      "  up_scaling: %d\n"
@@ -1967,7 +1967,7 @@ static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct in
 		      caps->device_rev_id,
 		      caps->sdvo_version_major,
 		      caps->sdvo_version_minor,
-		      caps->sdvo_inputs_mask,
+		      caps->sdvo_num_inputs,
 		      caps->smooth_scaling,
 		      caps->sharp_scaling,
 		      caps->up_scaling,
@@ -3436,15 +3436,14 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
 
 	drm_dbg_kms(&dev_priv->drm, "%s device VID/DID: %02X:%02X.%02X, "
 			"clock range %dMHz - %dMHz, "
-			"input 1: %c, input 2: %c, "
+			"num inputs: %d, "
 			"output 1: %c, output 2: %c\n",
 			SDVO_NAME(intel_sdvo),
 			intel_sdvo->caps.vendor_id, intel_sdvo->caps.device_id,
 			intel_sdvo->caps.device_rev_id,
 			intel_sdvo->pixel_clock_min / 1000,
 			intel_sdvo->pixel_clock_max / 1000,
-			(intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N',
-			(intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N',
+			intel_sdvo->caps.sdvo_num_inputs,
 			/* check currently supported outputs */
 			intel_sdvo->caps.output_flags &
 			(SDVO_OUTPUT_TMDS0 | SDVO_OUTPUT_RGB0 |
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo_regs.h b/drivers/gpu/drm/i915/display/intel_sdvo_regs.h
index 74dc6c042b6e..54f099abefeb 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_sdvo_regs.h
@@ -57,7 +57,7 @@ struct intel_sdvo_caps {
 	u8 device_rev_id;
 	u8 sdvo_version_major;
 	u8 sdvo_version_minor;
-	unsigned int sdvo_inputs_mask:2;
+	unsigned int sdvo_num_inputs:2;
 	unsigned int smooth_scaling:1;
 	unsigned int sharp_scaling:1;
 	unsigned int up_scaling:1;
-- 
2.39.3


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

* [Intel-gfx] [PATCH 04/13] drm/i915: Don't warn about zero N/P in *_calc_dpll_params()
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (2 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 03/13] drm/i915/sdvo: s/sdvo_inputs_mask/sdvo_num_inputs/ Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:17   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 05/13] drm/i915: Fully populate crtc_state->dpll Ville Syrjala
                   ` (12 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

Allow *_calc_dpll_params() to be called even if the N/P dividers
are zero without warning. We'll want to call these to make sure the
derived values are fully computed, but not all users (VLV DSI in
particular) don't even enable the DPLL and thus the dividers will
be left at zero.

It could also be possible that the BIOS has misprogrammed the DPLL
(IIRC happened with some SNB machines with 4k+ displays) and thus
we'll currently generate a lot of dmesg spew. Better be silent and
just let the normal state checker/etc. deal with any driver bugs.

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

diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c b/drivers/gpu/drm/i915/display/intel_dpll.c
index 999badfe2906..71bfeea4cef2 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll.c
@@ -314,10 +314,11 @@ int pnv_calc_dpll_params(int refclk, struct dpll *clock)
 {
 	clock->m = clock->m2 + 2;
 	clock->p = clock->p1 * clock->p2;
-	if (WARN_ON(clock->n == 0 || clock->p == 0))
-		return 0;
-	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
-	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
+
+	clock->vco = clock->n == 0 ? 0 :
+		DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
+	clock->dot = clock->p == 0 ? 0 :
+		DIV_ROUND_CLOSEST(clock->vco, clock->p);
 
 	return clock->dot;
 }
@@ -331,10 +332,11 @@ int i9xx_calc_dpll_params(int refclk, struct dpll *clock)
 {
 	clock->m = i9xx_dpll_compute_m(clock);
 	clock->p = clock->p1 * clock->p2;
-	if (WARN_ON(clock->n + 2 == 0 || clock->p == 0))
-		return 0;
-	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n + 2);
-	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
+
+	clock->vco = clock->n + 2 == 0 ? 0 :
+		DIV_ROUND_CLOSEST(refclk * clock->m, clock->n + 2);
+	clock->dot = clock->p == 0 ? 0 :
+		DIV_ROUND_CLOSEST(clock->vco, clock->p);
 
 	return clock->dot;
 }
@@ -343,10 +345,11 @@ int vlv_calc_dpll_params(int refclk, struct dpll *clock)
 {
 	clock->m = clock->m1 * clock->m2;
 	clock->p = clock->p1 * clock->p2 * 5;
-	if (WARN_ON(clock->n == 0 || clock->p == 0))
-		return 0;
-	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
-	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
+
+	clock->vco = clock->n == 0 ? 0 :
+		DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
+	clock->dot = clock->p == 0 ? 0 :
+		DIV_ROUND_CLOSEST(clock->vco, clock->p);
 
 	return clock->dot;
 }
@@ -355,11 +358,11 @@ int chv_calc_dpll_params(int refclk, struct dpll *clock)
 {
 	clock->m = clock->m1 * clock->m2;
 	clock->p = clock->p1 * clock->p2 * 5;
-	if (WARN_ON(clock->n == 0 || clock->p == 0))
-		return 0;
-	clock->vco = DIV_ROUND_CLOSEST_ULL(mul_u32_u32(refclk, clock->m),
-					   clock->n << 22);
-	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
+
+	clock->vco = clock->n == 0 ? 0 :
+		DIV_ROUND_CLOSEST_ULL(mul_u32_u32(refclk, clock->m), clock->n << 22);
+	clock->dot = clock->p == 0 ? 0 :
+		DIV_ROUND_CLOSEST(clock->vco, clock->p);
 
 	return clock->dot;
 }
-- 
2.39.3


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

* [Intel-gfx] [PATCH 05/13] drm/i915: Fully populate crtc_state->dpll
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (3 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 04/13] drm/i915: Don't warn about zero N/P in *_calc_dpll_params() Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:41   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 06/13] drm/i915/sdvo: Pick the TV dotclock from adjusted_mode Ville Syrjala
                   ` (11 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

Call *_calc_dpll_params() even in cases where the encoder has
computed the DPLL params for us.

The SDVO TV output code doesn't populate crtc_state->dpll.dot
leading to the dotclock getting calculated as zero, and that
leads to all kinds of real problems. The g4x DP code also
doesn't populate the derived dividers nor .vco, which could
also create some confusion.

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

diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c b/drivers/gpu/drm/i915/display/intel_dpll.c
index 71bfeea4cef2..2255ad651486 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll.c
@@ -1182,6 +1182,8 @@ static int ilk_crtc_compute_clock(struct intel_atomic_state *state,
 				refclk, NULL, &crtc_state->dpll))
 		return -EINVAL;
 
+	i9xx_calc_dpll_params(refclk, &crtc_state->dpll);
+
 	ilk_compute_dpll(crtc_state, &crtc_state->dpll,
 			 &crtc_state->dpll);
 
@@ -1256,6 +1258,8 @@ static int chv_crtc_compute_clock(struct intel_atomic_state *state,
 				refclk, NULL, &crtc_state->dpll))
 		return -EINVAL;
 
+	chv_calc_dpll_params(refclk, &crtc_state->dpll);
+
 	chv_compute_dpll(crtc_state);
 
 	/* FIXME this is a mess */
@@ -1278,9 +1282,10 @@ static int vlv_crtc_compute_clock(struct intel_atomic_state *state,
 
 	if (!crtc_state->clock_set &&
 	    !vlv_find_best_dpll(limit, crtc_state, crtc_state->port_clock,
-				refclk, NULL, &crtc_state->dpll)) {
+				refclk, NULL, &crtc_state->dpll))
 		return -EINVAL;
-	}
+
+	vlv_calc_dpll_params(refclk, &crtc_state->dpll);
 
 	vlv_compute_dpll(crtc_state);
 
@@ -1330,6 +1335,8 @@ static int g4x_crtc_compute_clock(struct intel_atomic_state *state,
 				refclk, NULL, &crtc_state->dpll))
 		return -EINVAL;
 
+	i9xx_calc_dpll_params(refclk, &crtc_state->dpll);
+
 	i9xx_compute_dpll(crtc_state, &crtc_state->dpll,
 			  &crtc_state->dpll);
 
@@ -1368,6 +1375,8 @@ static int pnv_crtc_compute_clock(struct intel_atomic_state *state,
 				refclk, NULL, &crtc_state->dpll))
 		return -EINVAL;
 
+	pnv_calc_dpll_params(refclk, &crtc_state->dpll);
+
 	i9xx_compute_dpll(crtc_state, &crtc_state->dpll,
 			  &crtc_state->dpll);
 
@@ -1404,6 +1413,8 @@ static int i9xx_crtc_compute_clock(struct intel_atomic_state *state,
 				 refclk, NULL, &crtc_state->dpll))
 		return -EINVAL;
 
+	i9xx_calc_dpll_params(refclk, &crtc_state->dpll);
+
 	i9xx_compute_dpll(crtc_state, &crtc_state->dpll,
 			  &crtc_state->dpll);
 
@@ -1444,6 +1455,8 @@ static int i8xx_crtc_compute_clock(struct intel_atomic_state *state,
 				 refclk, NULL, &crtc_state->dpll))
 		return -EINVAL;
 
+	i9xx_calc_dpll_params(refclk, &crtc_state->dpll);
+
 	i8xx_compute_dpll(crtc_state, &crtc_state->dpll,
 			  &crtc_state->dpll);
 
-- 
2.39.3


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

* [Intel-gfx] [PATCH 06/13] drm/i915/sdvo: Pick the TV dotclock from adjusted_mode
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (4 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 05/13] drm/i915: Fully populate crtc_state->dpll Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:22   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 07/13] drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range Ville Syrjala
                   ` (10 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

port_clock is what the encoder/dpll code is supposed to calculate,
it is not the input clock. Use the dotclock as the target we're
trying to achieve instead.

TODO: the SDVO TV clocking is a mess atm and needs further work

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_sdvo.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 76eed11e9fed..75a8e5583358 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -1272,7 +1272,7 @@ intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo,
 static void i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
 {
 	struct drm_i915_private *dev_priv = to_i915(pipe_config->uapi.crtc->dev);
-	unsigned dotclock = pipe_config->port_clock;
+	unsigned int dotclock = pipe_config->hw.adjusted_mode.crtc_clock;
 	struct dpll *clock = &pipe_config->dpll;
 
 	/*
-- 
2.39.3


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

* [Intel-gfx] [PATCH 07/13] drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (5 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 06/13] drm/i915/sdvo: Pick the TV dotclock from adjusted_mode Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:22   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 08/13] drm/i915/sdvo: Nuke attached_output tracking Ville Syrjala
                   ` (9 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

Instead of warning and continuing with bogus state when the
requested dotclock isn't acceptable just print some debug
spew and fail gracefully.

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

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 75a8e5583358..fcf3a95393d9 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -1269,7 +1269,7 @@ intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo,
 	return true;
 }
 
-static void i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
+static int i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
 {
 	struct drm_i915_private *dev_priv = to_i915(pipe_config->uapi.crtc->dev);
 	unsigned int dotclock = pipe_config->hw.adjusted_mode.crtc_clock;
@@ -1292,11 +1292,14 @@ static void i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
 		clock->m1 = 12;
 		clock->m2 = 8;
 	} else {
-		drm_WARN(&dev_priv->drm, 1,
-			 "SDVO TV clock out of range: %i\n", dotclock);
+		drm_dbg_kms(&dev_priv->drm,
+			    "SDVO TV clock out of range: %i\n", dotclock);
+		return -EINVAL;
 	}
 
 	pipe_config->clock_set = true;
+
+	return 0;
 }
 
 static bool intel_has_hdmi_sink(struct intel_sdvo_connector *intel_sdvo_connector,
@@ -1414,8 +1417,13 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
 					       conn_state);
 
 	/* Clock computation needs to happen after pixel multiplier. */
-	if (IS_TV(intel_sdvo_connector))
-		i9xx_adjust_sdvo_tv_clock(pipe_config);
+	if (IS_TV(intel_sdvo_connector)) {
+		int ret;
+
+		ret = i9xx_adjust_sdvo_tv_clock(pipe_config);
+		if (ret)
+			return ret;
+	}
 
 	if (conn_state->picture_aspect_ratio)
 		adjusted_mode->picture_aspect_ratio =
-- 
2.39.3


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

* [Intel-gfx] [PATCH 08/13] drm/i915/sdvo: Nuke attached_output tracking
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (6 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 07/13] drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:24   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 09/13] drm/i915/sdvo: Initialize the encoder ealier Ville Syrjala
                   ` (8 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

Instead of operating on the output the user specified (via the
connector) the current code tends to operate on whichever outputs
it has detected as attached. That is not how the kms uapi is supposed
to work. So simply get rid of attached_outputs and instead directly
operate on the output the user has specified.

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

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index fcf3a95393d9..29762716a067 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -103,12 +103,6 @@ struct intel_sdvo {
 	/* Pixel clock limitations reported by the SDVO device, in kHz */
 	int pixel_clock_min, pixel_clock_max;
 
-	/*
-	* For multiple function SDVO device,
-	* this is for current attached outputs.
-	*/
-	u16 attached_output;
-
 	/*
 	 * Hotplug activation bits for this device
 	 */
@@ -1223,12 +1217,13 @@ static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo,
 
 static bool
 intel_sdvo_set_output_timings_from_mode(struct intel_sdvo *intel_sdvo,
+					struct intel_sdvo_connector *intel_sdvo_connector,
 					const struct drm_display_mode *mode)
 {
 	struct intel_sdvo_dtd output_dtd;
 
 	if (!intel_sdvo_set_target_output(intel_sdvo,
-					  intel_sdvo->attached_output))
+					  intel_sdvo_connector->output_flag))
 		return false;
 
 	intel_sdvo_get_dtd_from_mode(&output_dtd, mode);
@@ -1369,7 +1364,9 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
 	 * the sequence to do it. Oh well.
 	 */
 	if (IS_TV(intel_sdvo_connector)) {
-		if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, mode))
+		if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo,
+							     intel_sdvo_connector,
+							     mode))
 			return -EINVAL;
 
 		(void) intel_sdvo_get_preferred_input_mode(intel_sdvo,
@@ -1387,7 +1384,9 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
 		if (ret)
 			return ret;
 
-		if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, fixed_mode))
+		if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo,
+							     intel_sdvo_connector,
+							     fixed_mode))
 			return -EINVAL;
 
 		(void) intel_sdvo_get_preferred_input_mode(intel_sdvo,
@@ -1528,7 +1527,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
 	 * channel on the motherboard.  In a two-input device, the first input
 	 * will be SDVOB and the second SDVOC.
 	 */
-	in_out.in0 = intel_sdvo->attached_output;
+	in_out.in0 = intel_sdvo_connector->output_flag;
 	in_out.in1 = 0;
 
 	intel_sdvo_set_value(intel_sdvo,
@@ -1537,7 +1536,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
 
 	/* Set the output timings to the screen */
 	if (!intel_sdvo_set_target_output(intel_sdvo,
-					  intel_sdvo->attached_output))
+					  intel_sdvo_connector->output_flag))
 		return;
 
 	/* lvds has a special fixed output timing. */
@@ -1874,6 +1873,8 @@ static void intel_enable_sdvo(struct intel_atomic_state *state,
 	struct drm_device *dev = encoder->base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
 	struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
+	struct intel_sdvo_connector *intel_sdvo_connector =
+		to_intel_sdvo_connector(conn_state->connector);
 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
 	u32 temp;
 	bool input1, input2;
@@ -1903,7 +1904,7 @@ static void intel_enable_sdvo(struct intel_atomic_state *state,
 	if (0)
 		intel_sdvo_set_encoder_power_state(intel_sdvo,
 						   DRM_MODE_DPMS_ON);
-	intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output);
+	intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo_connector->output_flag);
 
 	if (pipe_config->has_audio)
 		intel_sdvo_enable_audio(intel_sdvo, pipe_config, conn_state);
@@ -2158,8 +2159,6 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
 	if (response == 0)
 		return connector_status_disconnected;
 
-	intel_sdvo->attached_output = response;
-
 	if ((intel_sdvo_connector->output_flag & response) == 0)
 		ret = connector_status_disconnected;
 	else if (IS_TMDS(intel_sdvo_connector))
@@ -2287,6 +2286,8 @@ static const struct drm_display_mode sdvo_tv_modes[] = {
 static int intel_sdvo_get_tv_modes(struct drm_connector *connector)
 {
 	struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
+	struct intel_sdvo_connector *intel_sdvo_connector =
+		to_intel_sdvo_connector(connector);
 	const struct drm_connector_state *conn_state = connector->state;
 	struct intel_sdvo_sdtv_resolution_request tv_res;
 	u32 reply = 0, format_map = 0;
@@ -2304,7 +2305,7 @@ static int intel_sdvo_get_tv_modes(struct drm_connector *connector)
 	memcpy(&tv_res, &format_map,
 	       min(sizeof(format_map), sizeof(struct intel_sdvo_sdtv_resolution_request)));
 
-	if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output))
+	if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo_connector->output_flag))
 		return 0;
 
 	BUILD_BUG_ON(sizeof(tv_res) != 3);
-- 
2.39.3


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

* [Intel-gfx] [PATCH 09/13] drm/i915/sdvo: Initialize the encoder ealier
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (7 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 08/13] drm/i915/sdvo: Nuke attached_output tracking Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:28   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 10/13] drm/i915/sdvo: Nuke the duplicate sdvo->port Ville Syrjala
                   ` (7 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

Call drm_encoder_init() earlier so that we don't have to keep passing
the i915/dev_priv around separately.

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

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 29762716a067..e6c558416a6b 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -2613,9 +2613,9 @@ intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
  * outputs, then LVDS outputs.
  */
 static void
-intel_sdvo_select_ddc_bus(struct drm_i915_private *dev_priv,
-			  struct intel_sdvo *sdvo)
+intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo)
 {
+	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
 	struct sdvo_device_mapping *mapping;
 
 	if (sdvo->port == PORT_B)
@@ -2630,9 +2630,9 @@ intel_sdvo_select_ddc_bus(struct drm_i915_private *dev_priv,
 }
 
 static void
-intel_sdvo_select_i2c_bus(struct drm_i915_private *dev_priv,
-			  struct intel_sdvo *sdvo)
+intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
 {
+	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
 	struct sdvo_device_mapping *mapping;
 	u8 pin;
 
@@ -2671,9 +2671,9 @@ intel_sdvo_is_hdmi_connector(struct intel_sdvo *intel_sdvo)
 }
 
 static u8
-intel_sdvo_get_slave_addr(struct drm_i915_private *dev_priv,
-			  struct intel_sdvo *sdvo)
+intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
 {
+	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
 	struct sdvo_device_mapping *my_mapping, *other_mapping;
 
 	if (sdvo->port == PORT_B) {
@@ -2994,7 +2994,6 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
 		SDVO_OUTPUT_LVDS0,
 		SDVO_OUTPUT_LVDS1,
 	};
-	struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
 	u16 flags;
 	int i;
 
@@ -3008,7 +3007,7 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
 
 	intel_sdvo->controlled_output = flags;
 
-	intel_sdvo_select_ddc_bus(i915, intel_sdvo);
+	intel_sdvo_select_ddc_bus(intel_sdvo);
 
 	for (i = 0; i < ARRAY_SIZE(probe_order); i++) {
 		u16 type = flags & probe_order[i];
@@ -3309,9 +3308,9 @@ static const struct i2c_lock_operations proxy_lock_ops = {
 };
 
 static bool
-intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo,
-			  struct drm_i915_private *dev_priv)
+intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo)
 {
+	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
 	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
 
 	sdvo->ddc.owner = THIS_MODULE;
@@ -3357,23 +3356,23 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
 	if (!intel_sdvo)
 		return false;
 
-	intel_sdvo->sdvo_reg = sdvo_reg;
-	intel_sdvo->port = port;
-	intel_sdvo->slave_addr =
-		intel_sdvo_get_slave_addr(dev_priv, intel_sdvo) >> 1;
-	intel_sdvo_select_i2c_bus(dev_priv, intel_sdvo);
-	if (!intel_sdvo_init_ddc_proxy(intel_sdvo, dev_priv))
-		goto err_i2c_bus;
-
 	/* encoder type will be decided later */
 	intel_encoder = &intel_sdvo->base;
 	intel_encoder->type = INTEL_OUTPUT_SDVO;
 	intel_encoder->power_domain = POWER_DOMAIN_PORT_OTHER;
 	intel_encoder->port = port;
+
 	drm_encoder_init(&dev_priv->drm, &intel_encoder->base,
 			 &intel_sdvo_enc_funcs, 0,
 			 "SDVO %c", port_name(port));
 
+	intel_sdvo->sdvo_reg = sdvo_reg;
+	intel_sdvo->port = port;
+	intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(intel_sdvo) >> 1;
+	intel_sdvo_select_i2c_bus(intel_sdvo);
+	if (!intel_sdvo_init_ddc_proxy(intel_sdvo))
+		goto err_i2c_bus;
+
 	/* Read the regs to test if we can talk to the device */
 	for (i = 0; i < 0x40; i++) {
 		u8 byte;
-- 
2.39.3


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

* [Intel-gfx] [PATCH 10/13] drm/i915/sdvo: Nuke the duplicate sdvo->port
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (8 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 09/13] drm/i915/sdvo: Initialize the encoder ealier Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:29   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 11/13] drm/i915/sdvo: Get rid of the per-connector i2c symlink Ville Syrjala
                   ` (6 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

We already have encoder->port so get rid of the duplicate
sdvo->port.

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

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index e6c558416a6b..383f8b1547a1 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -108,8 +108,6 @@ struct intel_sdvo {
 	 */
 	u16 hotplug_active;
 
-	enum port port;
-
 	/* DDC bus used by this SDVO encoder */
 	u8 ddc_bus;
 
@@ -226,7 +224,7 @@ static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val)
 		return;
 	}
 
-	if (intel_sdvo->port == PORT_B)
+	if (intel_sdvo->base.port == PORT_B)
 		cval = intel_de_read(dev_priv, GEN3_SDVOC);
 	else
 		bval = intel_de_read(dev_priv, GEN3_SDVOB);
@@ -403,7 +401,7 @@ static const char *sdvo_cmd_name(u8 cmd)
 	return NULL;
 }
 
-#define SDVO_NAME(svdo) ((svdo)->port == PORT_B ? "SDVOB" : "SDVOC")
+#define SDVO_NAME(svdo) ((svdo)->base.port == PORT_B ? "SDVOB" : "SDVOC")
 
 static void intel_sdvo_debug_write(struct intel_sdvo *intel_sdvo, u8 cmd,
 				   const void *args, int args_len)
@@ -1604,7 +1602,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
 			sdvox |= SDVO_BORDER_ENABLE;
 	} else {
 		sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg);
-		if (intel_sdvo->port == PORT_B)
+		if (intel_sdvo->base.port == PORT_B)
 			sdvox &= SDVOB_PRESERVE_MASK;
 		else
 			sdvox &= SDVOC_PRESERVE_MASK;
@@ -2618,7 +2616,7 @@ intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo)
 	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
 	struct sdvo_device_mapping *mapping;
 
-	if (sdvo->port == PORT_B)
+	if (sdvo->base.port == PORT_B)
 		mapping = &dev_priv->display.vbt.sdvo_mappings[0];
 	else
 		mapping = &dev_priv->display.vbt.sdvo_mappings[1];
@@ -2636,7 +2634,7 @@ intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
 	struct sdvo_device_mapping *mapping;
 	u8 pin;
 
-	if (sdvo->port == PORT_B)
+	if (sdvo->base.port == PORT_B)
 		mapping = &dev_priv->display.vbt.sdvo_mappings[0];
 	else
 		mapping = &dev_priv->display.vbt.sdvo_mappings[1];
@@ -2676,7 +2674,7 @@ intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
 	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
 	struct sdvo_device_mapping *my_mapping, *other_mapping;
 
-	if (sdvo->port == PORT_B) {
+	if (sdvo->base.port == PORT_B) {
 		my_mapping = &dev_priv->display.vbt.sdvo_mappings[0];
 		other_mapping = &dev_priv->display.vbt.sdvo_mappings[1];
 	} else {
@@ -2703,7 +2701,7 @@ intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
 	 * No SDVO device info is found for another DVO port,
 	 * so use mapping assumption we had before BIOS parsing.
 	 */
-	if (sdvo->port == PORT_B)
+	if (sdvo->base.port == PORT_B)
 		return 0x70;
 	else
 		return 0x72;
@@ -3367,7 +3365,6 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
 			 "SDVO %c", port_name(port));
 
 	intel_sdvo->sdvo_reg = sdvo_reg;
-	intel_sdvo->port = port;
 	intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(intel_sdvo) >> 1;
 	intel_sdvo_select_i2c_bus(intel_sdvo);
 	if (!intel_sdvo_init_ddc_proxy(intel_sdvo))
@@ -3417,7 +3414,7 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
 	 * hotplug lines.
 	 */
 	if (intel_sdvo->hotplug_active) {
-		if (intel_sdvo->port == PORT_B)
+		if (intel_sdvo->base.port == PORT_B)
 			intel_encoder->hpd_pin = HPD_SDVO_B;
 		else
 			intel_encoder->hpd_pin = HPD_SDVO_C;
-- 
2.39.3


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

* [Intel-gfx] [PATCH 11/13] drm/i915/sdvo: Get rid of the per-connector i2c symlink
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (9 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 10/13] drm/i915/sdvo: Nuke the duplicate sdvo->port Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:30   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 12/13] drm/i915/sdvo: Rework DDC bus handling Ville Syrjala
                   ` (5 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

We should switch over to the standard "ddc" per-connector
symlink instead of rolling our own thing. The i2c specific
symlink is also in the way of reworking the SDVO DDC handling
(which is a mess atm) so get rid of it.

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

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 383f8b1547a1..5c25417d256a 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -2468,31 +2468,6 @@ intel_sdvo_connector_atomic_set_property(struct drm_connector *connector,
 	return 0;
 }
 
-static int
-intel_sdvo_connector_register(struct drm_connector *connector)
-{
-	struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector));
-	int ret;
-
-	ret = intel_connector_register(connector);
-	if (ret)
-		return ret;
-
-	return sysfs_create_link(&connector->kdev->kobj,
-				 &sdvo->ddc.dev.kobj,
-				 sdvo->ddc.dev.kobj.name);
-}
-
-static void
-intel_sdvo_connector_unregister(struct drm_connector *connector)
-{
-	struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector));
-
-	sysfs_remove_link(&connector->kdev->kobj,
-			  sdvo->ddc.dev.kobj.name);
-	intel_connector_unregister(connector);
-}
-
 static struct drm_connector_state *
 intel_sdvo_connector_duplicate_state(struct drm_connector *connector)
 {
@@ -2511,8 +2486,8 @@ static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
 	.fill_modes = drm_helper_probe_single_connector_modes,
 	.atomic_get_property = intel_sdvo_connector_atomic_get_property,
 	.atomic_set_property = intel_sdvo_connector_atomic_set_property,
-	.late_register = intel_sdvo_connector_register,
-	.early_unregister = intel_sdvo_connector_unregister,
+	.late_register = intel_connector_register,
+	.early_unregister = intel_connector_unregister,
 	.destroy = intel_connector_destroy,
 	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
 	.atomic_duplicate_state = intel_sdvo_connector_duplicate_state,
-- 
2.39.3


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

* [Intel-gfx] [PATCH 12/13] drm/i915/sdvo: Rework DDC bus handling
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (10 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 11/13] drm/i915/sdvo: Get rid of the per-connector i2c symlink Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:38   ` Jani Nikula
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 13/13] drm/i915/sdvo: Print out the i2c pin and slave address Ville Syrjala
                   ` (4 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

Each SDVO device can have up to three sets of DDC pins.
Currently we just register a single i2c_adapter for the
entire SDVO device and semi-randomly pick the "correct"
set of DDC pins during intel_sdvo_tmds_sink_detect().
This doesn't make any real sense especially if we have
multiple outputs each with their own dedicated DDC bus.

Let's clean up this mess and register a dedicated
i2c_adapter for each of the possible pin pairs. Each
output (ie. connector) can then pick the correct i2c_adapter
to use for its DDC bus. And we can just switch over to
drm_connector_init_with_ddc() to take care of the
connector->ddc association, which also populates the
"ddc" sysfs symlink as a bonus.

And now that things are based on the actual connector we can
also nuke the sketchy sdvo->controller_output thing.

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

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 5c25417d256a..d7edb5714c4c 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -65,6 +65,8 @@
 #define IS_TV_OR_LVDS(c)	((c)->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
 #define IS_DIGITAL(c)		((c)->output_flag & (SDVO_TMDS_MASK | SDVO_LVDS_MASK))
 
+#define HAS_DDC(c)		((c)->output_flag & (SDVO_RGB_MASK | SDVO_TMDS_MASK | \
+						     SDVO_LVDS_MASK))
 
 static const char * const tv_format_names[] = {
 	"NTSC_M"   , "NTSC_J"  , "NTSC_443",
@@ -78,20 +80,25 @@ static const char * const tv_format_names[] = {
 
 #define TV_FORMAT_NUM  ARRAY_SIZE(tv_format_names)
 
+struct intel_sdvo;
+
+struct intel_sdvo_ddc {
+	struct i2c_adapter ddc;
+	struct intel_sdvo *sdvo;
+	u8 ddc_bus;
+};
+
 struct intel_sdvo {
 	struct intel_encoder base;
 
 	struct i2c_adapter *i2c;
 	u8 slave_addr;
 
-	struct i2c_adapter ddc;
+	struct intel_sdvo_ddc ddc[3];
 
 	/* Register for the SDVO device: SDVOB or SDVOC */
 	i915_reg_t sdvo_reg;
 
-	/* Active outputs controlled by this SDVO output */
-	u16 controlled_output;
-
 	/*
 	 * Capabilities of the SDVO device returned by
 	 * intel_sdvo_get_capabilities()
@@ -108,9 +115,6 @@ struct intel_sdvo {
 	 */
 	u16 hotplug_active;
 
-	/* DDC bus used by this SDVO encoder */
-	u8 ddc_bus;
-
 	/*
 	 * the sdvo flag gets lost in round trip: dtd->adjusted_mode->dtd
 	 */
@@ -2035,18 +2039,15 @@ intel_sdvo_hotplug(struct intel_encoder *encoder,
 	return intel_encoder_hotplug(encoder, connector);
 }
 
-static bool
-intel_sdvo_multifunc_encoder(struct intel_sdvo *intel_sdvo)
-{
-	/* Is there more than one type of output? */
-	return hweight16(intel_sdvo->caps.output_flags) > 1;
-}
-
 static const struct drm_edid *
 intel_sdvo_get_edid(struct drm_connector *connector)
 {
-	struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector));
-	return drm_edid_read_ddc(connector, &sdvo->ddc);
+	struct i2c_adapter *ddc = connector->ddc;
+
+	if (!ddc)
+		return NULL;
+
+	return drm_edid_read_ddc(connector, ddc);
 }
 
 /* Mac mini hack -- use the same DDC as the analog connector */
@@ -2054,43 +2055,23 @@ static const struct drm_edid *
 intel_sdvo_get_analog_edid(struct drm_connector *connector)
 {
 	struct drm_i915_private *i915 = to_i915(connector->dev);
-	struct i2c_adapter *i2c;
+	struct i2c_adapter *ddc;
 
-	i2c = intel_gmbus_get_adapter(i915, i915->display.vbt.crt_ddc_pin);
+	ddc = intel_gmbus_get_adapter(i915, i915->display.vbt.crt_ddc_pin);
+	if (!ddc)
+		return NULL;
 
-	return drm_edid_read_ddc(connector, i2c);
+	return drm_edid_read_ddc(connector, ddc);
 }
 
 static enum drm_connector_status
 intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
 {
-	struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
 	enum drm_connector_status status;
 	const struct drm_edid *drm_edid;
 
 	drm_edid = intel_sdvo_get_edid(connector);
 
-	if (!drm_edid && intel_sdvo_multifunc_encoder(intel_sdvo)) {
-		u8 ddc, saved_ddc = intel_sdvo->ddc_bus;
-
-		/*
-		 * Don't use the 1 as the argument of DDC bus switch to get
-		 * the EDID. It is used for SDVO SPD ROM.
-		 */
-		for (ddc = intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) {
-			intel_sdvo->ddc_bus = ddc;
-			drm_edid = intel_sdvo_get_edid(connector);
-			if (drm_edid)
-				break;
-		}
-		/*
-		 * If we found the EDID on the other bus,
-		 * assume that is the correct DDC bus.
-		 */
-		if (!drm_edid)
-			intel_sdvo->ddc_bus = saved_ddc;
-	}
-
 	/*
 	 * When there is no edid and no monitor is connected with VGA
 	 * port, try to use the CRT ddc to read the EDID for DVI-connector.
@@ -2524,29 +2505,37 @@ static const struct drm_connector_helper_funcs intel_sdvo_connector_helper_funcs
 	.atomic_check = intel_sdvo_atomic_check,
 };
 
-static void intel_sdvo_enc_destroy(struct drm_encoder *encoder)
+static void intel_sdvo_encoder_destroy(struct drm_encoder *_encoder)
 {
-	struct intel_sdvo *intel_sdvo = to_sdvo(to_intel_encoder(encoder));
+	struct intel_encoder *encoder = to_intel_encoder(_encoder);
+	struct intel_sdvo *sdvo = to_sdvo(encoder);
+	int i;
 
-	i2c_del_adapter(&intel_sdvo->ddc);
-	intel_encoder_destroy(encoder);
-}
+	for (i = 0; i < ARRAY_SIZE(sdvo->ddc); i++) {
+		if (sdvo->ddc[i].ddc_bus)
+			i2c_del_adapter(&sdvo->ddc[i].ddc);
+	}
+
+	drm_encoder_cleanup(&encoder->base);
+	kfree(sdvo);
+};
 
 static const struct drm_encoder_funcs intel_sdvo_enc_funcs = {
-	.destroy = intel_sdvo_enc_destroy,
+	.destroy = intel_sdvo_encoder_destroy,
 };
 
-static void
-intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
+static int
+intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo,
+			 struct intel_sdvo_connector *connector)
 {
 	u16 mask = 0;
-	unsigned int num_bits;
+	int num_bits;
 
 	/*
 	 * Make a mask of outputs less than or equal to our own priority in the
 	 * list.
 	 */
-	switch (sdvo->controlled_output) {
+	switch (connector->output_flag) {
 	case SDVO_OUTPUT_LVDS1:
 		mask |= SDVO_OUTPUT_LVDS1;
 		fallthrough;
@@ -2575,7 +2564,7 @@ intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
 		num_bits = 3;
 
 	/* Corresponds to SDVO_CONTROL_BUS_DDCx */
-	sdvo->ddc_bus = 1 << num_bits;
+	return num_bits;
 }
 
 /*
@@ -2585,11 +2574,13 @@ intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
  * DDC bus number assignment is in a priority order of RGB outputs, then TMDS
  * outputs, then LVDS outputs.
  */
-static void
-intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo)
+static struct intel_sdvo_ddc *
+intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo,
+			  struct intel_sdvo_connector *connector)
 {
 	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
 	struct sdvo_device_mapping *mapping;
+	int ddc_bus;
 
 	if (sdvo->base.port == PORT_B)
 		mapping = &dev_priv->display.vbt.sdvo_mappings[0];
@@ -2597,9 +2588,14 @@ intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo)
 		mapping = &dev_priv->display.vbt.sdvo_mappings[1];
 
 	if (mapping->initialized)
-		sdvo->ddc_bus = 1 << ((mapping->ddc_pin & 0xf0) >> 4);
+		ddc_bus = (mapping->ddc_pin & 0xf0) >> 4;
 	else
-		intel_sdvo_guess_ddc_bus(sdvo);
+		ddc_bus = intel_sdvo_guess_ddc_bus(sdvo, connector);
+
+	if (ddc_bus < 1 || ddc_bus > 3)
+		return NULL;
+
+	return &sdvo->ddc[ddc_bus - 1];
 }
 
 static void
@@ -2682,22 +2678,30 @@ intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
 		return 0x72;
 }
 
+static int
+intel_sdvo_init_ddc_proxy(struct intel_sdvo_ddc *ddc,
+			  struct intel_sdvo *sdvo, int bit);
+
 static int
 intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
 			  struct intel_sdvo *encoder)
 {
-	struct drm_connector *drm_connector;
+	struct drm_i915_private *i915 = to_i915(encoder->base.base.dev);
+	struct intel_sdvo_ddc *ddc = NULL;
 	int ret;
 
-	drm_connector = &connector->base.base;
-	ret = drm_connector_init(encoder->base.base.dev,
-			   drm_connector,
-			   &intel_sdvo_connector_funcs,
-			   connector->base.base.connector_type);
+	if (HAS_DDC(connector))
+		ddc = intel_sdvo_select_ddc_bus(encoder, connector);
+
+	ret = drm_connector_init_with_ddc(encoder->base.base.dev,
+					  &connector->base.base,
+					  &intel_sdvo_connector_funcs,
+					  connector->base.base.connector_type,
+					  ddc ? &ddc->ddc : NULL);
 	if (ret < 0)
 		return ret;
 
-	drm_connector_helper_add(drm_connector,
+	drm_connector_helper_add(&connector->base.base,
 				 &intel_sdvo_connector_helper_funcs);
 
 	connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB;
@@ -2706,6 +2710,11 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
 
 	intel_connector_attach_encoder(&connector->base, &encoder->base);
 
+	if (ddc)
+		drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s] using %s\n",
+			    connector->base.base.base.id, connector->base.base.name,
+			    ddc->ddc.name);
+
 	return 0;
 }
 
@@ -2903,7 +2912,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
 	if (!intel_panel_preferred_fixed_mode(intel_connector)) {
 		mutex_lock(&i915->drm.mode_config.mutex);
 
-		intel_ddc_get_modes(connector, &intel_sdvo->ddc);
+		intel_ddc_get_modes(connector, connector->ddc);
 		intel_panel_add_edid_fixed_modes(intel_connector, false);
 
 		mutex_unlock(&i915->drm.mode_config.mutex);
@@ -2978,10 +2987,6 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
 		return false;
 	}
 
-	intel_sdvo->controlled_output = flags;
-
-	intel_sdvo_select_ddc_bus(intel_sdvo);
-
 	for (i = 0; i < ARRAY_SIZE(probe_order); i++) {
 		u16 type = flags & probe_order[i];
 
@@ -3234,9 +3239,10 @@ static int intel_sdvo_ddc_proxy_xfer(struct i2c_adapter *adapter,
 				     struct i2c_msg *msgs,
 				     int num)
 {
-	struct intel_sdvo *sdvo = adapter->algo_data;
+	struct intel_sdvo_ddc *ddc = adapter->algo_data;
+	struct intel_sdvo *sdvo = ddc->sdvo;
 
-	if (!__intel_sdvo_set_control_bus_switch(sdvo, sdvo->ddc_bus))
+	if (!__intel_sdvo_set_control_bus_switch(sdvo, 1 << ddc->ddc_bus))
 		return -EIO;
 
 	return sdvo->i2c->algo->master_xfer(sdvo->i2c, msgs, num);
@@ -3244,7 +3250,9 @@ static int intel_sdvo_ddc_proxy_xfer(struct i2c_adapter *adapter,
 
 static u32 intel_sdvo_ddc_proxy_func(struct i2c_adapter *adapter)
 {
-	struct intel_sdvo *sdvo = adapter->algo_data;
+	struct intel_sdvo_ddc *ddc = adapter->algo_data;
+	struct intel_sdvo *sdvo = ddc->sdvo;
+
 	return sdvo->i2c->algo->functionality(sdvo->i2c);
 }
 
@@ -3256,21 +3264,27 @@ static const struct i2c_algorithm intel_sdvo_ddc_proxy = {
 static void proxy_lock_bus(struct i2c_adapter *adapter,
 			   unsigned int flags)
 {
-	struct intel_sdvo *sdvo = adapter->algo_data;
+	struct intel_sdvo_ddc *ddc = adapter->algo_data;
+	struct intel_sdvo *sdvo = ddc->sdvo;
+
 	sdvo->i2c->lock_ops->lock_bus(sdvo->i2c, flags);
 }
 
 static int proxy_trylock_bus(struct i2c_adapter *adapter,
 			     unsigned int flags)
 {
-	struct intel_sdvo *sdvo = adapter->algo_data;
+	struct intel_sdvo_ddc *ddc = adapter->algo_data;
+	struct intel_sdvo *sdvo = ddc->sdvo;
+
 	return sdvo->i2c->lock_ops->trylock_bus(sdvo->i2c, flags);
 }
 
 static void proxy_unlock_bus(struct i2c_adapter *adapter,
 			     unsigned int flags)
 {
-	struct intel_sdvo *sdvo = adapter->algo_data;
+	struct intel_sdvo_ddc *ddc = adapter->algo_data;
+	struct intel_sdvo *sdvo = ddc->sdvo;
+
 	sdvo->i2c->lock_ops->unlock_bus(sdvo->i2c, flags);
 }
 
@@ -3280,21 +3294,26 @@ static const struct i2c_lock_operations proxy_lock_ops = {
 	.unlock_bus =  proxy_unlock_bus,
 };
 
-static bool
-intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo)
+static int
+intel_sdvo_init_ddc_proxy(struct intel_sdvo_ddc *ddc,
+			  struct intel_sdvo *sdvo, int ddc_bus)
 {
 	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
 	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
 
-	sdvo->ddc.owner = THIS_MODULE;
-	sdvo->ddc.class = I2C_CLASS_DDC;
-	snprintf(sdvo->ddc.name, I2C_NAME_SIZE, "SDVO DDC proxy");
-	sdvo->ddc.dev.parent = &pdev->dev;
-	sdvo->ddc.algo_data = sdvo;
-	sdvo->ddc.algo = &intel_sdvo_ddc_proxy;
-	sdvo->ddc.lock_ops = &proxy_lock_ops;
+	ddc->sdvo = sdvo;
+	ddc->ddc_bus = ddc_bus;
 
-	return i2c_add_adapter(&sdvo->ddc) == 0;
+	ddc->ddc.owner = THIS_MODULE;
+	ddc->ddc.class = I2C_CLASS_DDC;
+	snprintf(ddc->ddc.name, I2C_NAME_SIZE, "SDVO %c DDC%d",
+		 port_name(sdvo->base.port), ddc_bus);
+	ddc->ddc.dev.parent = &pdev->dev;
+	ddc->ddc.algo_data = ddc;
+	ddc->ddc.algo = &intel_sdvo_ddc_proxy;
+	ddc->ddc.lock_ops = &proxy_lock_ops;
+
+	return i2c_add_adapter(&ddc->ddc);
 }
 
 static bool is_sdvo_port_valid(struct drm_i915_private *dev_priv, enum port port)
@@ -3341,9 +3360,8 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
 
 	intel_sdvo->sdvo_reg = sdvo_reg;
 	intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(intel_sdvo) >> 1;
+
 	intel_sdvo_select_i2c_bus(intel_sdvo);
-	if (!intel_sdvo_init_ddc_proxy(intel_sdvo))
-		goto err_i2c_bus;
 
 	/* Read the regs to test if we can talk to the device */
 	for (i = 0; i < 0x40; i++) {
@@ -3376,6 +3394,15 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
 	intel_sdvo->colorimetry_cap =
 		intel_sdvo_get_colorimetry_cap(intel_sdvo);
 
+	for (i = 0; i < ARRAY_SIZE(intel_sdvo->ddc); i++) {
+		int ret;
+
+		ret = intel_sdvo_init_ddc_proxy(&intel_sdvo->ddc[i],
+						intel_sdvo, i + 1);
+		if (ret)
+			goto err;
+	}
+
 	if (!intel_sdvo_output_setup(intel_sdvo)) {
 		drm_dbg_kms(&dev_priv->drm,
 			    "SDVO output failed to setup on %s\n",
@@ -3436,13 +3463,9 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
 
 err_output:
 	intel_sdvo_output_cleanup(intel_sdvo);
-
 err:
-	drm_encoder_cleanup(&intel_encoder->base);
-	i2c_del_adapter(&intel_sdvo->ddc);
-err_i2c_bus:
 	intel_sdvo_unselect_i2c_bus(intel_sdvo);
-	kfree(intel_sdvo);
+	intel_sdvo_encoder_destroy(&intel_encoder->base);
 
 	return false;
 }
-- 
2.39.3


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

* [Intel-gfx] [PATCH 13/13] drm/i915/sdvo: Print out the i2c pin and slave address
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (11 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 12/13] drm/i915/sdvo: Rework DDC bus handling Ville Syrjala
@ 2023-07-05 20:21 ` Ville Syrjala
  2023-07-06  8:38   ` Jani Nikula
  2023-07-05 21:24 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915/sdvo: DDC rework and fixes Patchwork
                   ` (3 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2023-07-05 20:21 UTC (permalink / raw)
  To: intel-gfx

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

To reduce the guesswork a bit let's print out the SDVO
device i2c bus and slave address during init.

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

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index d7edb5714c4c..f0494b9aefe5 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -2616,6 +2616,10 @@ intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
 	else
 		pin = GMBUS_PIN_DPB;
 
+	drm_dbg_kms(&dev_priv->drm, "[ENCODER:%d:%s] I2C pin %d, slave addr 0x%x\n",
+		    sdvo->base.base.base.id, sdvo->base.base.name,
+		    pin, sdvo->slave_addr);
+
 	sdvo->i2c = intel_gmbus_get_adapter(dev_priv, pin);
 
 	/*
-- 
2.39.3


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

* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915/sdvo: DDC rework and fixes
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (12 preceding siblings ...)
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 13/13] drm/i915/sdvo: Print out the i2c pin and slave address Ville Syrjala
@ 2023-07-05 21:24 ` Patchwork
  2023-07-05 21:38 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2023-07-05 21:24 UTC (permalink / raw)
  To: Ville Syrjala; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/sdvo: DDC rework and fixes
URL   : https://patchwork.freedesktop.org/series/120253/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'



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

* [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/sdvo: DDC rework and fixes
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (13 preceding siblings ...)
  2023-07-05 21:24 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915/sdvo: DDC rework and fixes Patchwork
@ 2023-07-05 21:38 ` Patchwork
  2023-07-06  1:17 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
  2023-07-06  8:45 ` [Intel-gfx] [PATCH 00/13] " Jani Nikula
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2023-07-05 21:38 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 12189 bytes --]

== Series Details ==

Series: drm/i915/sdvo: DDC rework and fixes
URL   : https://patchwork.freedesktop.org/series/120253/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_13346 -> Patchwork_120253v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/index.html

Participating hosts (40 -> 41)
------------------------------

  Additional (2): bat-atsm-1 fi-pnv-d510 
  Missing    (1): fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_mmap@basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][1] ([i915#4083])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@gem_mmap@basic.html

  * igt@gem_render_tiled_blits@basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][2] ([i915#4079]) +1 similar issue
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@gem_render_tiled_blits@basic.html

  * igt@gem_tiled_fence_blits@basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][3] ([i915#4077]) +2 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@gem_tiled_fence_blits@basic.html

  * igt@i915_pm_rps@basic-api:
    - bat-atsm-1:         NOTRUN -> [SKIP][4] ([i915#6621])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@i915_pm_rps@basic-api.html

  * igt@i915_selftest@live@hangcheck:
    - fi-skl-guc:         [PASS][5] -> [DMESG-FAIL][6] ([i915#8723])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/fi-skl-guc/igt@i915_selftest@live@hangcheck.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/fi-skl-guc/igt@i915_selftest@live@hangcheck.html

  * igt@i915_selftest@live@requests:
    - bat-mtlp-6:         [PASS][7] -> [DMESG-FAIL][8] ([i915#7269])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/bat-mtlp-6/igt@i915_selftest@live@requests.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-mtlp-6/igt@i915_selftest@live@requests.html

  * igt@i915_selftest@live@reset:
    - bat-rpls-1:         [PASS][9] -> [ABORT][10] ([i915#4983] / [i915#7461] / [i915#7981] / [i915#8347] / [i915#8384])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/bat-rpls-1/igt@i915_selftest@live@reset.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-rpls-1/igt@i915_selftest@live@reset.html

  * igt@i915_suspend@basic-s3-without-i915:
    - bat-mtlp-6:         NOTRUN -> [SKIP][11] ([i915#6645])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-mtlp-6/igt@i915_suspend@basic-s3-without-i915.html
    - bat-atsm-1:         NOTRUN -> [SKIP][12] ([i915#6645])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_addfb_basic@size-max:
    - bat-atsm-1:         NOTRUN -> [SKIP][13] ([i915#6077]) +36 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@kms_addfb_basic@size-max.html

  * igt@kms_chamelium_hpd@common-hpd-after-suspend:
    - bat-mtlp-6:         NOTRUN -> [SKIP][14] ([i915#7828])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-mtlp-6/igt@kms_chamelium_hpd@common-hpd-after-suspend.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
    - bat-atsm-1:         NOTRUN -> [SKIP][15] ([i915#6078]) +19 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html

  * igt@kms_flip@basic-flip-vs-wf_vblank:
    - bat-atsm-1:         NOTRUN -> [SKIP][16] ([i915#6166]) +3 similar issues
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@kms_flip@basic-flip-vs-wf_vblank.html

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-atsm-1:         NOTRUN -> [SKIP][17] ([i915#6093]) +3 similar issues
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_pipe_crc_basic@read-crc-frame-sequence:
    - bat-atsm-1:         NOTRUN -> [SKIP][18] ([i915#1836]) +6 similar issues
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence.html

  * igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1:
    - bat-rplp-1:         [PASS][19] -> [ABORT][20] ([i915#8442] / [i915#8668])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - bat-mtlp-6:         NOTRUN -> [SKIP][21] ([i915#1845] / [i915#4078])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-mtlp-6/igt@kms_pipe_crc_basic@suspend-read-crc.html

  * igt@kms_prop_blob@basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][22] ([i915#7357])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@kms_prop_blob@basic.html

  * igt@kms_psr@primary_page_flip:
    - fi-pnv-d510:        NOTRUN -> [SKIP][23] ([fdo#109271]) +38 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/fi-pnv-d510/igt@kms_psr@primary_page_flip.html

  * igt@kms_psr@sprite_plane_onoff:
    - bat-atsm-1:         NOTRUN -> [SKIP][24] ([i915#1072]) +3 similar issues
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@kms_psr@sprite_plane_onoff.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-atsm-1:         NOTRUN -> [SKIP][25] ([i915#6094])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-flip:
    - bat-atsm-1:         NOTRUN -> [SKIP][26] ([fdo#109295] / [i915#6078])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@prime_vgem@basic-fence-flip.html

  * igt@prime_vgem@basic-gtt:
    - bat-atsm-1:         NOTRUN -> [SKIP][27] ([fdo#109295] / [i915#4077]) +1 similar issue
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@prime_vgem@basic-gtt.html

  * igt@prime_vgem@basic-write:
    - bat-atsm-1:         NOTRUN -> [SKIP][28] ([fdo#109295]) +2 similar issues
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-atsm-1/igt@prime_vgem@basic-write.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@gt_mocs:
    - bat-mtlp-6:         [DMESG-FAIL][29] ([i915#7059]) -> [PASS][30]
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/bat-mtlp-6/igt@i915_selftest@live@gt_mocs.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-mtlp-6/igt@i915_selftest@live@gt_mocs.html

  * igt@i915_selftest@live@slpc:
    - bat-rpls-2:         [DMESG-WARN][31] ([i915#6367]) -> [PASS][32]
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/bat-rpls-2/igt@i915_selftest@live@slpc.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-rpls-2/igt@i915_selftest@live@slpc.html

  * igt@i915_selftest@live@workarounds:
    - bat-mtlp-6:         [DMESG-FAIL][33] ([i915#6763]) -> [PASS][34]
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-mtlp-6/igt@i915_selftest@live@workarounds.html

  * igt@i915_suspend@basic-s2idle-without-i915:
    - bat-mtlp-6:         [ABORT][35] -> [PASS][36]
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/bat-mtlp-6/igt@i915_suspend@basic-s2idle-without-i915.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-mtlp-6/igt@i915_suspend@basic-s2idle-without-i915.html

  
#### Warnings ####

  * igt@i915_module_load@load:
    - bat-adlp-11:        [DMESG-WARN][37] ([i915#4423]) -> [ABORT][38] ([i915#4423])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/bat-adlp-11/igt@i915_module_load@load.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/bat-adlp-11/igt@i915_module_load@load.html

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

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1836]: https://gitlab.freedesktop.org/drm/intel/issues/1836
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4423]: https://gitlab.freedesktop.org/drm/intel/issues/4423
  [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
  [i915#6077]: https://gitlab.freedesktop.org/drm/intel/issues/6077
  [i915#6078]: https://gitlab.freedesktop.org/drm/intel/issues/6078
  [i915#6093]: https://gitlab.freedesktop.org/drm/intel/issues/6093
  [i915#6094]: https://gitlab.freedesktop.org/drm/intel/issues/6094
  [i915#6166]: https://gitlab.freedesktop.org/drm/intel/issues/6166
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#6645]: https://gitlab.freedesktop.org/drm/intel/issues/6645
  [i915#6763]: https://gitlab.freedesktop.org/drm/intel/issues/6763
  [i915#7059]: https://gitlab.freedesktop.org/drm/intel/issues/7059
  [i915#7269]: https://gitlab.freedesktop.org/drm/intel/issues/7269
  [i915#7357]: https://gitlab.freedesktop.org/drm/intel/issues/7357
  [i915#7461]: https://gitlab.freedesktop.org/drm/intel/issues/7461
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7981]: https://gitlab.freedesktop.org/drm/intel/issues/7981
  [i915#8347]: https://gitlab.freedesktop.org/drm/intel/issues/8347
  [i915#8384]: https://gitlab.freedesktop.org/drm/intel/issues/8384
  [i915#8442]: https://gitlab.freedesktop.org/drm/intel/issues/8442
  [i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668
  [i915#8723]: https://gitlab.freedesktop.org/drm/intel/issues/8723


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

  * Linux: CI_DRM_13346 -> Patchwork_120253v1

  CI-20190529: 20190529
  CI_DRM_13346: c5442b2363bf5ad916805d105ff03ce5805070e5 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7370: f63ab5e7c3ddef724bebde558e36647ca65d98bc @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_120253v1: c5442b2363bf5ad916805d105ff03ce5805070e5 @ git://anongit.freedesktop.org/gfx-ci/linux


### Linux commits

3b1054ab3461 drm/i915/sdvo: Print out the i2c pin and slave address
6813d0c482be drm/i915/sdvo: Rework DDC bus handling
0a4d4d8eac99 drm/i915/sdvo: Get rid of the per-connector i2c symlink
79a0aa875a22 drm/i915/sdvo: Nuke the duplicate sdvo->port
7e2efc11b02c drm/i915/sdvo: Initialize the encoder ealier
b00b8d3a4cba drm/i915/sdvo: Nuke attached_output tracking
ea5edad927ca drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range
886d6d67fd0b drm/i915/sdvo: Pick the TV dotclock from adjusted_mode
aeb264dec800 drm/i915: Fully populate crtc_state->dpll
722b2f419f66 drm/i915: Don't warn about zero N/P in *_calc_dpll_params()
adf417650883 drm/i915/sdvo: s/sdvo_inputs_mask/sdvo_num_inputs/
d11d97747d0d drm/i915/sdvo: Protect macro args
29f546fc05ed drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/index.html

[-- Attachment #2: Type: text/html, Size: 13998 bytes --]

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

* [Intel-gfx] ✗ Fi.CI.IGT: failure for drm/i915/sdvo: DDC rework and fixes
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (14 preceding siblings ...)
  2023-07-05 21:38 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
@ 2023-07-06  1:17 ` Patchwork
  2023-07-06  8:45 ` [Intel-gfx] [PATCH 00/13] " Jani Nikula
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2023-07-06  1:17 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 54467 bytes --]

== Series Details ==

Series: drm/i915/sdvo: DDC rework and fixes
URL   : https://patchwork.freedesktop.org/series/120253/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_13346_full -> Patchwork_120253v1_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_120253v1_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_120253v1_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

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

  Missing    (1): shard-rkl0 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_120253v1_full:

### IGT changes ###

#### Possible regressions ####

  * igt@gem_exec_schedule@noreorder-priority:
    - shard-glk:          NOTRUN -> [TIMEOUT][1]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-glk8/igt@gem_exec_schedule@noreorder-priority.html

  * igt@kms_vblank@pipe-d-wait-forked-busy:
    - shard-mtlp:         [PASS][2] -> [TIMEOUT][3]
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-1/igt@kms_vblank@pipe-d-wait-forked-busy.html
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-4/igt@kms_vblank@pipe-d-wait-forked-busy.html

  * igt@perf@gen12-invalid-class-instance:
    - shard-glk:          [PASS][4] -> [ABORT][5]
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-glk4/igt@perf@gen12-invalid-class-instance.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-glk8/igt@perf@gen12-invalid-class-instance.html

  * igt@syncobj_wait@invalid-multi-wait-all-unsubmitted:
    - shard-glk:          [PASS][6] -> [TIMEOUT][7] +2 similar issues
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-glk4/igt@syncobj_wait@invalid-multi-wait-all-unsubmitted.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-glk8/igt@syncobj_wait@invalid-multi-wait-all-unsubmitted.html

  
#### Warnings ####

  * igt@gem_tiled_partial_pwrite_pread@writes-after-reads:
    - shard-mtlp:         [SKIP][8] ([i915#4077]) -> [ABORT][9]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-1/igt@gem_tiled_partial_pwrite_pread@writes-after-reads.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-2/igt@gem_tiled_partial_pwrite_pread@writes-after-reads.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-glk:          [SKIP][10] ([fdo#109271]) -> [TIMEOUT][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-glk4/igt@kms_tiled_display@basic-test-pattern.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-glk8/igt@kms_tiled_display@basic-test-pattern.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@drm_fdinfo@all-busy-idle-check-all:
    - shard-dg2:          NOTRUN -> [SKIP][12] ([i915#8414])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@drm_fdinfo@all-busy-idle-check-all.html

  * igt@drm_fdinfo@virtual-busy-hang:
    - shard-mtlp:         NOTRUN -> [SKIP][13] ([i915#8414])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@drm_fdinfo@virtual-busy-hang.html

  * igt@gem_barrier_race@remote-request@rcs0:
    - shard-tglu:         [PASS][14] -> [ABORT][15] ([i915#8211] / [i915#8234])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-tglu-3/igt@gem_barrier_race@remote-request@rcs0.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-tglu-3/igt@gem_barrier_race@remote-request@rcs0.html

  * igt@gem_ccs@ctrl-surf-copy:
    - shard-rkl:          NOTRUN -> [SKIP][16] ([i915#3555] / [i915#5325])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@gem_ccs@ctrl-surf-copy.html

  * igt@gem_eio@kms:
    - shard-glk:          [PASS][17] -> [FAIL][18] ([i915#8764])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-glk1/igt@gem_eio@kms.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-glk4/igt@gem_eio@kms.html

  * igt@gem_exec_balancer@full-pulse:
    - shard-dg2:          [PASS][19] -> [FAIL][20] ([i915#6032])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-5/igt@gem_exec_balancer@full-pulse.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-7/igt@gem_exec_balancer@full-pulse.html

  * igt@gem_exec_fair@basic-flow@rcs0:
    - shard-tglu:         [PASS][21] -> [FAIL][22] ([i915#2842]) +1 similar issue
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-tglu-5/igt@gem_exec_fair@basic-flow@rcs0.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-tglu-5/igt@gem_exec_fair@basic-flow@rcs0.html

  * igt@gem_exec_fair@basic-none-solo@rcs0:
    - shard-apl:          [PASS][23] -> [FAIL][24] ([i915#2842])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-apl3/igt@gem_exec_fair@basic-none-solo@rcs0.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-apl4/igt@gem_exec_fair@basic-none-solo@rcs0.html

  * igt@gem_exec_fair@basic-pace-solo@rcs0:
    - shard-rkl:          [PASS][25] -> [FAIL][26] ([i915#2842])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-rkl-2/igt@gem_exec_fair@basic-pace-solo@rcs0.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-4/igt@gem_exec_fair@basic-pace-solo@rcs0.html

  * igt@gem_exec_reloc@basic-cpu-read:
    - shard-dg2:          NOTRUN -> [SKIP][27] ([i915#3281]) +1 similar issue
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@gem_exec_reloc@basic-cpu-read.html

  * igt@gem_exec_reloc@basic-gtt-read-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][28] ([i915#3281]) +1 similar issue
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@gem_exec_reloc@basic-gtt-read-noreloc.html

  * igt@gem_exec_suspend@basic-s4-devices@smem:
    - shard-rkl:          NOTRUN -> [ABORT][29] ([i915#7975] / [i915#8213])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@gem_exec_suspend@basic-s4-devices@smem.html

  * igt@gem_exec_whisper@basic-fds-forked-all:
    - shard-mtlp:         [PASS][30] -> [FAIL][31] ([i915#6363])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-4/igt@gem_exec_whisper@basic-fds-forked-all.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-7/igt@gem_exec_whisper@basic-fds-forked-all.html

  * igt@gem_lmem_swapping@heavy-multi:
    - shard-mtlp:         NOTRUN -> [SKIP][32] ([i915#4613]) +1 similar issue
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@gem_lmem_swapping@heavy-multi.html

  * igt@gem_lmem_swapping@verify:
    - shard-apl:          NOTRUN -> [SKIP][33] ([fdo#109271] / [i915#4613])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-apl4/igt@gem_lmem_swapping@verify.html

  * igt@gem_mmap_gtt@bad-object:
    - shard-mtlp:         NOTRUN -> [SKIP][34] ([i915#4077])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@gem_mmap_gtt@bad-object.html

  * igt@gem_mmap_wc@fault-concurrent:
    - shard-mtlp:         NOTRUN -> [SKIP][35] ([i915#4083])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@gem_mmap_wc@fault-concurrent.html

  * igt@gem_partial_pwrite_pread@write:
    - shard-rkl:          NOTRUN -> [SKIP][36] ([i915#3282]) +1 similar issue
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@gem_partial_pwrite_pread@write.html

  * igt@gem_partial_pwrite_pread@write-display:
    - shard-dg2:          NOTRUN -> [SKIP][37] ([i915#3282])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@gem_partial_pwrite_pread@write-display.html

  * igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted:
    - shard-dg2:          NOTRUN -> [SKIP][38] ([i915#4270])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted.html

  * igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-yf-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][39] ([i915#5190]) +2 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-6/igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-yf-tiled.html

  * igt@gem_softpin@evict-snoop-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][40] ([i915#4885])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@gem_softpin@evict-snoop-interruptible.html

  * igt@gem_spin_batch@spin-all-new:
    - shard-dg2:          NOTRUN -> [FAIL][41] ([i915#5889])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@gem_spin_batch@spin-all-new.html

  * igt@gem_tiled_partial_pwrite_pread@writes-after-reads:
    - shard-dg2:          NOTRUN -> [SKIP][42] ([i915#4077])
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@gem_tiled_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy:
    - shard-dg2:          NOTRUN -> [SKIP][43] ([i915#3297] / [i915#4880])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy.html

  * igt@gem_workarounds@suspend-resume-fd:
    - shard-dg2:          [PASS][44] -> [FAIL][45] ([fdo#103375] / [i915#6121]) +5 similar issues
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-12/igt@gem_workarounds@suspend-resume-fd.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-5/igt@gem_workarounds@suspend-resume-fd.html

  * igt@gen7_exec_parse@basic-offset:
    - shard-rkl:          NOTRUN -> [SKIP][46] ([fdo#109289])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@gen7_exec_parse@basic-offset.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-apl:          [PASS][47] -> [ABORT][48] ([i915#5566])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-apl1/igt@gen9_exec_parse@allowed-all.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-apl3/igt@gen9_exec_parse@allowed-all.html

  * igt@gen9_exec_parse@batch-zero-length:
    - shard-rkl:          NOTRUN -> [SKIP][49] ([i915#2527])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@gen9_exec_parse@batch-zero-length.html

  * igt@gen9_exec_parse@bb-oversize:
    - shard-dg2:          NOTRUN -> [SKIP][50] ([i915#2856])
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@gen9_exec_parse@bb-oversize.html

  * igt@i915_pipe_stress@stress-xrgb8888-ytiled:
    - shard-dg2:          NOTRUN -> [SKIP][51] ([i915#7091])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@i915_pipe_stress@stress-xrgb8888-ytiled.html

  * igt@i915_pm_rc6_residency@media-rc6-accuracy:
    - shard-mtlp:         NOTRUN -> [SKIP][52] ([fdo#109289] / [i915#8403])
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@i915_pm_rc6_residency@media-rc6-accuracy.html

  * igt@i915_pm_rc6_residency@rc6-fence:
    - shard-glk:          [PASS][53] -> [DMESG-WARN][54] ([i915#118])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-glk4/igt@i915_pm_rc6_residency@rc6-fence.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-glk1/igt@i915_pm_rc6_residency@rc6-fence.html

  * igt@i915_pm_rpm@gem-execbuf-stress-pc8:
    - shard-rkl:          NOTRUN -> [SKIP][55] ([fdo#109506])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@i915_pm_rpm@gem-execbuf-stress-pc8.html

  * igt@i915_pm_rpm@modeset-non-lpsp:
    - shard-dg2:          [PASS][56] -> [SKIP][57] ([i915#1397])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-8/igt@i915_pm_rpm@modeset-non-lpsp.html
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-12/igt@i915_pm_rpm@modeset-non-lpsp.html

  * igt@i915_pm_rpm@modeset-non-lpsp-stress:
    - shard-rkl:          [PASS][58] -> [SKIP][59] ([i915#1397])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-rkl-1/igt@i915_pm_rpm@modeset-non-lpsp-stress.html
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-7/igt@i915_pm_rpm@modeset-non-lpsp-stress.html

  * igt@i915_pm_rps@reset:
    - shard-snb:          [PASS][60] -> [INCOMPLETE][61] ([i915#7790])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-snb2/igt@i915_pm_rps@reset.html
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-snb2/igt@i915_pm_rps@reset.html

  * igt@i915_selftest@live@gt_mocs:
    - shard-mtlp:         [PASS][62] -> [DMESG-FAIL][63] ([i915#7059])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-7/igt@i915_selftest@live@gt_mocs.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@i915_selftest@live@gt_mocs.html

  * igt@i915_selftest@live@requests:
    - shard-mtlp:         [PASS][64] -> [DMESG-FAIL][65] ([i915#7269])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-7/igt@i915_selftest@live@requests.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@i915_selftest@live@requests.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-mtlp:         NOTRUN -> [SKIP][66] ([i915#6645])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_addfb_basic@framebuffer-vs-set-tiling:
    - shard-dg2:          NOTRUN -> [SKIP][67] ([i915#4212])
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-6/igt@kms_addfb_basic@framebuffer-vs-set-tiling.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-rkl:          NOTRUN -> [SKIP][68] ([i915#1769] / [i915#3555])
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-180:
    - shard-rkl:          NOTRUN -> [SKIP][69] ([i915#5286])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_big_fb@4-tiled-8bpp-rotate-180.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-270:
    - shard-mtlp:         NOTRUN -> [SKIP][70] ([fdo#111614])
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@linear-64bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][71] ([fdo#111614] / [i915#3638]) +1 similar issue
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_big_fb@linear-64bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
    - shard-mtlp:         [PASS][72] -> [FAIL][73] ([i915#3743])
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-3/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-6/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-90:
    - shard-dg2:          NOTRUN -> [SKIP][74] ([i915#4538] / [i915#5190]) +2 similar issues
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-6/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][75] ([fdo#110723]) +1 similar issue
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_big_fb@yf-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-90:
    - shard-mtlp:         NOTRUN -> [SKIP][76] ([fdo#111615]) +1 similar issue
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@kms_big_fb@yf-tiled-64bpp-rotate-90.html

  * igt@kms_ccs@pipe-a-bad-pixel-format-y_tiled_gen12_mc_ccs:
    - shard-rkl:          NOTRUN -> [SKIP][77] ([i915#3886] / [i915#5354] / [i915#6095])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_ccs@pipe-a-bad-pixel-format-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-a-crc-primary-rotation-180-4_tiled_dg2_rc_ccs:
    - shard-rkl:          NOTRUN -> [SKIP][78] ([i915#5354] / [i915#6095]) +5 similar issues
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_ccs@pipe-a-crc-primary-rotation-180-4_tiled_dg2_rc_ccs.html

  * igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_mc_ccs:
    - shard-apl:          NOTRUN -> [SKIP][79] ([fdo#109271] / [i915#3886]) +2 similar issues
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-apl4/igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-c-bad-rotation-90-yf_tiled_ccs:
    - shard-dg2:          NOTRUN -> [SKIP][80] ([i915#3689] / [i915#5354])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_ccs@pipe-c-bad-rotation-90-yf_tiled_ccs.html

  * igt@kms_ccs@pipe-c-missing-ccs-buffer-y_tiled_gen12_rc_ccs_cc:
    - shard-dg2:          NOTRUN -> [SKIP][81] ([i915#3689] / [i915#3886] / [i915#5354])
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_ccs@pipe-c-missing-ccs-buffer-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc:
    - shard-rkl:          NOTRUN -> [SKIP][82] ([i915#5354]) +4 similar issues
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-d-random-ccs-data-y_tiled_gen12_mc_ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][83] ([i915#6095]) +7 similar issues
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@kms_ccs@pipe-d-random-ccs-data-y_tiled_gen12_mc_ccs.html

  * igt@kms_cdclk@plane-scaling:
    - shard-rkl:          NOTRUN -> [SKIP][84] ([i915#3742])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_cdclk@plane-scaling.html

  * igt@kms_chamelium_color@ctm-0-25:
    - shard-dg2:          NOTRUN -> [SKIP][85] ([fdo#111827])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_chamelium_color@ctm-0-25.html

  * igt@kms_chamelium_color@ctm-red-to-blue:
    - shard-mtlp:         NOTRUN -> [SKIP][86] ([fdo#111827])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@kms_chamelium_color@ctm-red-to-blue.html

  * igt@kms_chamelium_edid@hdmi-mode-timings:
    - shard-rkl:          NOTRUN -> [SKIP][87] ([i915#7828]) +2 similar issues
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_chamelium_edid@hdmi-mode-timings.html

  * igt@kms_chamelium_frames@dp-frame-dump:
    - shard-dg2:          NOTRUN -> [SKIP][88] ([i915#7828]) +1 similar issue
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_chamelium_frames@dp-frame-dump.html

  * igt@kms_chamelium_hpd@hdmi-hpd-after-suspend:
    - shard-mtlp:         NOTRUN -> [SKIP][89] ([i915#7828])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@kms_chamelium_hpd@hdmi-hpd-after-suspend.html

  * igt@kms_color@deep-color:
    - shard-rkl:          NOTRUN -> [SKIP][90] ([i915#3555]) +2 similar issues
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-7/igt@kms_color@deep-color.html

  * igt@kms_content_protection@atomic:
    - shard-rkl:          NOTRUN -> [SKIP][91] ([i915#3555] / [i915#7118])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_content_protection@atomic.html

  * igt@kms_content_protection@legacy@pipe-a-dp-4:
    - shard-dg2:          NOTRUN -> [TIMEOUT][92] ([i915#7173])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-11/igt@kms_content_protection@legacy@pipe-a-dp-4.html

  * igt@kms_content_protection@lic:
    - shard-dg2:          NOTRUN -> [SKIP][93] ([i915#7118])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-6/igt@kms_content_protection@lic.html

  * igt@kms_content_protection@uevent@pipe-a-dp-2:
    - shard-dg2:          NOTRUN -> [FAIL][94] ([i915#1339])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-12/igt@kms_content_protection@uevent@pipe-a-dp-2.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
    - shard-mtlp:         NOTRUN -> [SKIP][95] ([i915#3546]) +1 similar issue
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-2/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
    - shard-apl:          [PASS][96] -> [FAIL][97] ([i915#2346])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-apl2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-apl2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-rkl:          NOTRUN -> [SKIP][98] ([i915#4103])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-dg2:          NOTRUN -> [SKIP][99] ([fdo#109274] / [fdo#111767])
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-panning:
    - shard-rkl:          NOTRUN -> [SKIP][100] ([fdo#111825]) +1 similar issue
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_flip@2x-flip-vs-panning.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank@a-edp1:
    - shard-mtlp:         [PASS][101] -> [DMESG-WARN][102] ([i915#1982])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-5/igt@kms_flip@flip-vs-absolute-wf_vblank@a-edp1.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-3/igt@kms_flip@flip-vs-absolute-wf_vblank@a-edp1.html

  * igt@kms_flip@flip-vs-suspend@a-dp1:
    - shard-apl:          [PASS][103] -> [ABORT][104] ([i915#180])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-apl6/igt@kms_flip@flip-vs-suspend@a-dp1.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-apl1/igt@kms_flip@flip-vs-suspend@a-dp1.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][105] ([i915#2672]) +1 similar issue
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling@pipe-a-valid-mode.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][106] ([i915#5354]) +8 similar issues
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][107] ([i915#8708]) +2 similar issues
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][108] ([fdo#111825] / [i915#1825]) +9 similar issues
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-plflip-blt:
    - shard-dg2:          NOTRUN -> [SKIP][109] ([i915#3458])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-6/igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][110] ([i915#8708]) +1 similar issue
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-mmap-wc:
    - shard-mtlp:         NOTRUN -> [SKIP][111] ([i915#1825]) +4 similar issues
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-2/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-farfromfence-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][112] ([i915#3023]) +3 similar issues
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_frontbuffer_tracking@psr-farfromfence-mmap-gtt.html

  * igt@kms_panel_fitting@atomic-fastset:
    - shard-dg2:          NOTRUN -> [SKIP][113] ([i915#3555]) +2 similar issues
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_panel_fitting@atomic-fastset.html

  * igt@kms_pipe_b_c_ivb@pipe-b-double-modeset-then-modeset-pipe-c:
    - shard-mtlp:         NOTRUN -> [SKIP][114] ([fdo#109289]) +2 similar issues
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@kms_pipe_b_c_ivb@pipe-b-double-modeset-then-modeset-pipe-c.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [FAIL][115] ([i915#8292])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-2/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-2.html

  * igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-a-vga-1:
    - shard-snb:          NOTRUN -> [SKIP][116] ([fdo#109271]) +20 similar issues
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-snb6/igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-a-vga-1.html

  * igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-5@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][117] ([i915#5176]) +3 similar issues
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-5@pipe-c-edp-1.html

  * igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-25@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][118] ([i915#5176]) +11 similar issues
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-7/igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-25@pipe-b-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][119] ([i915#5235]) +3 similar issues
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-7/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-b-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-c-dp-2:
    - shard-dg2:          NOTRUN -> [SKIP][120] ([i915#5235]) +15 similar issues
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-12/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-c-dp-2.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-c-dp-1:
    - shard-apl:          NOTRUN -> [SKIP][121] ([fdo#109271]) +32 similar issues
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-apl4/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-c-dp-1.html

  * igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf:
    - shard-rkl:          NOTRUN -> [SKIP][122] ([i915#658]) +1 similar issue
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-rkl:          NOTRUN -> [SKIP][123] ([fdo#111068] / [i915#658])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-mtlp:         NOTRUN -> [SKIP][124] ([i915#4348])
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr@cursor_blt:
    - shard-dg2:          NOTRUN -> [SKIP][125] ([i915#1072])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_psr@cursor_blt.html

  * igt@kms_psr@no_drrs:
    - shard-rkl:          NOTRUN -> [SKIP][126] ([i915#1072])
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_psr@no_drrs.html

  * igt@kms_setmode@basic@pipe-a-vga-1:
    - shard-snb:          NOTRUN -> [FAIL][127] ([i915#5465]) +1 similar issue
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-snb7/igt@kms_setmode@basic@pipe-a-vga-1.html

  * igt@kms_setmode@invalid-clone-single-crtc:
    - shard-rkl:          NOTRUN -> [SKIP][128] ([i915#3555] / [i915#4098])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_setmode@invalid-clone-single-crtc.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-mtlp:         NOTRUN -> [SKIP][129] ([i915#8623])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_vblank@pipe-d-query-forked-hang:
    - shard-rkl:          NOTRUN -> [SKIP][130] ([i915#4070] / [i915#533] / [i915#6768]) +1 similar issue
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@kms_vblank@pipe-d-query-forked-hang.html

  * igt@kms_vrr@flipline:
    - shard-mtlp:         NOTRUN -> [SKIP][131] ([i915#3555])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@kms_vrr@flipline.html

  * igt@kms_writeback@writeback-invalid-parameters:
    - shard-mtlp:         NOTRUN -> [SKIP][132] ([i915#2437])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@kms_writeback@writeback-invalid-parameters.html

  * igt@perf@non-zero-reason@0-rcs0:
    - shard-glk:          [PASS][133] -> [TIMEOUT][134] ([i915#7941])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-glk4/igt@perf@non-zero-reason@0-rcs0.html
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-glk8/igt@perf@non-zero-reason@0-rcs0.html
    - shard-dg2:          [PASS][135] -> [FAIL][136] ([i915#7484])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-1/igt@perf@non-zero-reason@0-rcs0.html
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@perf@non-zero-reason@0-rcs0.html

  * igt@perf_pmu@module-unload:
    - shard-dg2:          NOTRUN -> [FAIL][137] ([i915#5793] / [i915#6121])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@perf_pmu@module-unload.html

  * igt@prime_vgem@fence-flip-hang:
    - shard-rkl:          NOTRUN -> [SKIP][138] ([fdo#109295] / [i915#3708])
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@prime_vgem@fence-flip-hang.html

  * igt@sysfs_preempt_timeout@timeout@vecs0:
    - shard-mtlp:         NOTRUN -> [ABORT][139] ([i915#8521])
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@sysfs_preempt_timeout@timeout@vecs0.html

  * igt@v3d/v3d_job_submission@multiple-singlesync-to-multisync:
    - shard-rkl:          NOTRUN -> [SKIP][140] ([fdo#109315]) +2 similar issues
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@v3d/v3d_job_submission@multiple-singlesync-to-multisync.html

  * igt@v3d/v3d_submit_cl@bad-bo:
    - shard-dg2:          NOTRUN -> [SKIP][141] ([i915#2575]) +2 similar issues
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@v3d/v3d_submit_cl@bad-bo.html

  * igt@v3d/v3d_submit_csd@bad-multisync-pad:
    - shard-mtlp:         NOTRUN -> [SKIP][142] ([i915#2575]) +2 similar issues
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@v3d/v3d_submit_csd@bad-multisync-pad.html

  * igt@vc4/vc4_mmap@mmap-bad-handle:
    - shard-mtlp:         NOTRUN -> [SKIP][143] ([i915#7711]) +1 similar issue
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@vc4/vc4_mmap@mmap-bad-handle.html

  * igt@vc4/vc4_purgeable_bo@access-purged-bo-mem:
    - shard-dg2:          NOTRUN -> [SKIP][144] ([i915#7711]) +1 similar issue
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-6/igt@vc4/vc4_purgeable_bo@access-purged-bo-mem.html

  * igt@vc4/vc4_wait_bo@bad-bo:
    - shard-rkl:          NOTRUN -> [SKIP][145] ([i915#7711]) +1 similar issue
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@vc4/vc4_wait_bo@bad-bo.html

  
#### Possible fixes ####

  * igt@drm_fdinfo@most-busy-check-all@rcs0:
    - shard-rkl:          [FAIL][146] ([i915#7742]) -> [PASS][147]
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-rkl-4/igt@drm_fdinfo@most-busy-check-all@rcs0.html
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-1/igt@drm_fdinfo@most-busy-check-all@rcs0.html

  * igt@gem_barrier_race@remote-request@rcs0:
    - shard-dg2:          [ABORT][148] ([i915#7461] / [i915#8211] / [i915#8234]) -> [PASS][149]
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-12/igt@gem_barrier_race@remote-request@rcs0.html
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-6/igt@gem_barrier_race@remote-request@rcs0.html

  * igt@gem_create@hog-create@smem0:
    - shard-dg2:          [FAIL][150] ([i915#5892] / [i915#8758]) -> [PASS][151]
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-6/igt@gem_create@hog-create@smem0.html
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@gem_create@hog-create@smem0.html

  * igt@gem_ctx_exec@basic-nohangcheck:
    - shard-tglu:         [FAIL][152] ([i915#6268]) -> [PASS][153]
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-tglu-8/igt@gem_ctx_exec@basic-nohangcheck.html
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-tglu-6/igt@gem_ctx_exec@basic-nohangcheck.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-rkl:          [FAIL][154] ([i915#2842]) -> [PASS][155] +1 similar issue
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-rkl-7/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-6/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_whisper@basic-queues-all:
    - shard-mtlp:         [FAIL][156] ([i915#6363]) -> [PASS][157] +1 similar issue
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-2/igt@gem_exec_whisper@basic-queues-all.html
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@gem_exec_whisper@basic-queues-all.html

  * igt@gem_lmem_swapping@smem-oom@lmem0:
    - {shard-dg1}:        [TIMEOUT][158] ([i915#5493]) -> [PASS][159]
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg1-17/igt@gem_lmem_swapping@smem-oom@lmem0.html
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg1-15/igt@gem_lmem_swapping@smem-oom@lmem0.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-mtlp:         [ABORT][160] ([i915#8489] / [i915#8668]) -> [PASS][161]
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-6/igt@i915_module_load@reload-with-fault-injection.html
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a:
    - shard-rkl:          [SKIP][162] ([i915#1937]) -> [PASS][163]
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-rkl-1/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-7/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html

  * igt@i915_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-rkl:          [SKIP][164] ([i915#1397]) -> [PASS][165] +1 similar issue
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-rkl-1/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-7/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@i915_pm_rpm@modeset-non-lpsp-stress:
    - {shard-dg1}:        [SKIP][166] ([i915#1397]) -> [PASS][167] +1 similar issue
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg1-19/igt@i915_pm_rpm@modeset-non-lpsp-stress.html
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg1-14/igt@i915_pm_rpm@modeset-non-lpsp-stress.html

  * igt@i915_selftest@live@slpc:
    - shard-mtlp:         [DMESG-WARN][168] ([i915#6367]) -> [PASS][169]
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-7/igt@i915_selftest@live@slpc.html
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@i915_selftest@live@slpc.html

  * igt@kms_cursor_legacy@cursor-vs-flip-toggle:
    - shard-mtlp:         [FAIL][170] ([i915#8248]) -> [PASS][171]
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-2/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-1/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-apl:          [FAIL][172] ([i915#2346]) -> [PASS][173]
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-apl3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-apl4/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_flip@dpms-vs-vblank-race@a-edp1:
    - shard-mtlp:         [DMESG-WARN][174] ([i915#1982]) -> [PASS][175]
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-8/igt@kms_flip@dpms-vs-vblank-race@a-edp1.html
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-2/igt@kms_flip@dpms-vs-vblank-race@a-edp1.html

  * igt@kms_flip@flip-vs-suspend-interruptible@a-dp1:
    - shard-apl:          [ABORT][176] ([i915#180]) -> [PASS][177]
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-apl3/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-apl4/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html

  * igt@kms_flip@flip-vs-suspend@c-hdmi-a3:
    - shard-dg2:          [FAIL][178] ([fdo#103375] / [i915#6121]) -> [PASS][179] +1 similar issue
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-5/igt@kms_flip@flip-vs-suspend@c-hdmi-a3.html
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-5/igt@kms_flip@flip-vs-suspend@c-hdmi-a3.html

  * igt@kms_frontbuffer_tracking@fbc-badstride:
    - shard-dg2:          [FAIL][180] ([i915#6880]) -> [PASS][181]
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-badstride.html
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-badstride.html

  * igt@kms_vblank@pipe-b-ts-continuation-suspend:
    - shard-dg2:          [INCOMPLETE][182] ([i915#7838]) -> [PASS][183]
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-1/igt@kms_vblank@pipe-b-ts-continuation-suspend.html
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-1/igt@kms_vblank@pipe-b-ts-continuation-suspend.html

  * igt@perf@enable-disable@0-rcs0:
    - shard-dg2:          [FAIL][184] ([i915#8724]) -> [PASS][185]
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-11/igt@perf@enable-disable@0-rcs0.html
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-12/igt@perf@enable-disable@0-rcs0.html

  
#### Warnings ####

  * igt@gem_exec_schedule@deep@vcs0:
    - shard-mtlp:         [FAIL][186] ([i915#8545]) -> [TIMEOUT][187] ([i915#8628])
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-1/igt@gem_exec_schedule@deep@vcs0.html
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-4/igt@gem_exec_schedule@deep@vcs0.html

  * igt@gem_exec_whisper@basic-contexts-forked-all:
    - shard-mtlp:         [ABORT][188] ([i915#8131]) -> [TIMEOUT][189] ([i915#8628])
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-7/igt@gem_exec_whisper@basic-contexts-forked-all.html
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-5/igt@gem_exec_whisper@basic-contexts-forked-all.html

  * igt@gem_exec_whisper@basic-contexts-priority-all:
    - shard-mtlp:         [TIMEOUT][190] ([i915#7392]) -> [ABORT][191] ([i915#8131])
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-4/igt@gem_exec_whisper@basic-contexts-priority-all.html
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-7/igt@gem_exec_whisper@basic-contexts-priority-all.html

  * igt@gem_lmem_swapping@smem-oom@lmem0:
    - shard-dg2:          [TIMEOUT][192] ([i915#5493]) -> [DMESG-WARN][193] ([i915#4936] / [i915#5493])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-11/igt@gem_lmem_swapping@smem-oom@lmem0.html
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-12/igt@gem_lmem_swapping@smem-oom@lmem0.html

  * igt@kms_content_protection@type1:
    - shard-dg2:          [SKIP][194] ([i915#3555] / [i915#7118] / [i915#7162]) -> [SKIP][195] ([i915#3555] / [i915#7118])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-12/igt@kms_content_protection@type1.html
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-5/igt@kms_content_protection@type1.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-mtlp:         [FAIL][196] ([i915#2346]) -> [DMESG-FAIL][197] ([i915#2017] / [i915#5954])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-5/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-rkl:          [SKIP][198] ([i915#4070] / [i915#4816]) -> [SKIP][199] ([i915#4816])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-rkl-1/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-rkl-7/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem:
    - shard-dg2:          [INCOMPLETE][200] ([i915#5493]) -> [CRASH][201] ([i915#7331])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-dg2-8/igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem.html
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-dg2-7/igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem.html

  * igt@sysfs_timeslice_duration@timeout@vecs0:
    - shard-mtlp:         [TIMEOUT][202] ([i915#6950]) -> [ABORT][203] ([i915#8521])
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13346/shard-mtlp-6/igt@sysfs_timeslice_duration@timeout@vecs0.html
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_120253v1/shard-mtlp-8/igt@sysfs_timeslice_duration@timeout@vecs0.html

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

  [fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111767]: https://bugs.freedesktop.org/show_bug.cgi?id=111767
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
  [i915#1339]: https://gitlab.freedesktop.org/drm/intel/issues/1339
  [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
  [i915#1769]: https://gitlab.freedesktop.org/drm/intel/issues/1769
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2017]: https://gitlab.freedesktop.org/drm/intel/issues/2017
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
  [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4348]: https://gitlab.freedesktop.org/drm/intel/issues/4348
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4816]: https://gitlab.freedesktop.org/drm/intel/issues/4816
  [i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
  [i915#4885]: https://gitlab.freedesktop.org/drm/intel/issues/4885
  [i915#4936]: https://gitlab.freedesktop.org/drm/intel/issues/4936
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5465]: https://gitlab.freedesktop.org/drm/intel/issues/5465
  [i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493
  [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
  [i915#5793]: https://gitlab.freedesktop.org/drm/intel/issues/5793
  [i915#5889]: https://gitlab.freedesktop.org/drm/intel/issues/5889
  [i915#5892]: https://gitlab.freedesktop.org/drm/intel/issues/5892
  [i915#5954]: https://gitlab.freedesktop.org/drm/intel/issues/5954
  [i915#6032]: https://gitlab.freedesktop.org/drm/intel/issues/6032
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6121]: https://gitlab.freedesktop.org/drm/intel/issues/6121
  [i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
  [i915#6363]: https://gitlab.freedesktop.org/drm/intel/issues/6363
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6645]: https://gitlab.freedesktop.org/drm/intel/issues/6645
  [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
  [i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880
  [i915#6950]: https://gitlab.freedesktop.org/drm/intel/issues/6950
  [i915#7059]: https://gitlab.freedesktop.org/drm/intel/issues/7059
  [i915#7091]: https://gitlab.freedesktop.org/drm/intel/issues/7091
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7162]: https://gitlab.freedesktop.org/drm/intel/issues/7162
  [i915#7173]: https://gitlab.freedesktop.org/drm/intel/issues/7173
  [i915#7269]: https://gitlab.freedesktop.org/drm/intel/issues/7269
  [i915#7331]: https://gitlab.freedesktop.org/drm/intel/issues/7331
  [i915#7392]: https://gitlab.freedesktop.org/drm/intel/issues/7392
  [i915#7461]: https://gitlab.freedesktop.org/drm/intel/issues/7461
  [i915#7484]: https://gitlab.freedesktop.org/drm/intel/issues/7484
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7790]: https://gitlab.freedesktop.org/drm/intel/issues/7790
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7838]: https://gitlab.freedesktop.org/drm/intel/issues/7838
  [i915#7941]: https://gitlab.freedesktop.org/drm/intel/issues/7941
  [i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975
  [i915#8131]: https://gitlab.freedesktop.org/drm/intel/issues/8131
  [i915#8211]: https://gitlab.freedesktop.org/drm/intel/issues/8211
  [i915#8213]: https://gitlab.freedesktop.org/drm/intel/issues/8213
  [i915#8234]: https://gitlab.freedesktop.org/drm/intel/issues/8234
  [i915#8248]: https://gitlab.freedesktop.org/drm/intel/issues/8248
  [i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292
  [i915#8403]: https://gitlab.freedesktop.org/drm/intel/issues/8403
  [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414
  [i915#8489]: https://gitlab.freedesktop.org/drm/intel/issues/8489
  [i915#8521]: https://gitlab.freedesktop.org/drm/intel/issues/8521
  [i915#8545]: https://gitlab.freedesktop.org/drm/intel/issues/8545
  [i915#8623]: https://gitlab.freedesktop.org/drm/intel/issues/8623
  [i915#8628]: https://gitlab.freedesktop.org/drm/intel/issues/8628
  [i915#8661]: https://gitlab.freedesktop.org/drm/intel/issues/8661
  [i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668
  [i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708
  [i915#8724]: https://gitlab.freedesktop.org/drm/intel/issues/8724
  [i915#8758]: https://gitlab.freedesktop.org/drm/intel/issues/8758
  [i915#8764]: https://gitlab.freedesktop.org/drm/intel/issues/8764


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

  * Linux: CI_DRM_13346 -> Patchwork_120253v1

  CI-20190529: 20190529
  CI_DRM_13346: c5442b2363bf5ad916805d105ff03ce5805070e5 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7370: f63ab5e7c3ddef724bebde558e36647ca65d98bc @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_120253v1: c5442b2363bf5ad916805d105ff03ce5805070e5 @ 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_120253v1/index.html

[-- Attachment #2: Type: text/html, Size: 63286 bytes --]

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

* Re: [Intel-gfx] [PATCH 01/13] drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 01/13] drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays Ville Syrjala
@ 2023-07-06  7:20   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  7:20 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> I have at least one SDVO device (some Lenovo DVI-I ADD2 card,
> based on Conexant CX25904) where GetAttachedDisplays returns
> success but fails to report any attached displays unless wet

*we

Also s/ot/to/ in subject.

> precede the command with a SetTargetOutput. Make it so.
>
> I wasn't able to spot anything in the SDVO spec stating that
> this should be necessary, but real world wins over spec.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 8298a86d1334..9ac4c0b6055b 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2135,6 +2135,10 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
>  	if (!INTEL_DISPLAY_ENABLED(i915))
>  		return connector_status_disconnected;
>  
> +	if (!intel_sdvo_set_target_output(intel_sdvo,
> +					  intel_sdvo_connector->output_flag))
> +		return connector_status_unknown;
> +
>  	if (!intel_sdvo_get_value(intel_sdvo,
>  				  SDVO_CMD_GET_ATTACHED_DISPLAYS,
>  				  &response, 2))

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 02/13] drm/i915/sdvo: Protect macro args
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 02/13] drm/i915/sdvo: Protect macro args Ville Syrjala
@ 2023-07-06  7:20   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  7:20 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Put parens around macro argument evaluation for safety.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 13 ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 9ac4c0b6055b..ec94da6cb7bb 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -57,14 +57,13 @@
>  #define SDVO_LVDS_MASK (SDVO_OUTPUT_LVDS0 | SDVO_OUTPUT_LVDS1)
>  #define SDVO_TV_MASK   (SDVO_OUTPUT_CVBS0 | SDVO_OUTPUT_SVID0 | SDVO_OUTPUT_YPRPB0)
>  
> -#define SDVO_OUTPUT_MASK (SDVO_TMDS_MASK | SDVO_RGB_MASK | SDVO_LVDS_MASK |\
> -			SDVO_TV_MASK)
> +#define SDVO_OUTPUT_MASK (SDVO_TMDS_MASK | SDVO_RGB_MASK | SDVO_LVDS_MASK | SDVO_TV_MASK)
>  
> -#define IS_TV(c)	(c->output_flag & SDVO_TV_MASK)
> -#define IS_TMDS(c)	(c->output_flag & SDVO_TMDS_MASK)
> -#define IS_LVDS(c)	(c->output_flag & SDVO_LVDS_MASK)
> -#define IS_TV_OR_LVDS(c) (c->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
> -#define IS_DIGITAL(c) (c->output_flag & (SDVO_TMDS_MASK | SDVO_LVDS_MASK))
> +#define IS_TV(c)		((c)->output_flag & SDVO_TV_MASK)
> +#define IS_TMDS(c)		((c)->output_flag & SDVO_TMDS_MASK)
> +#define IS_LVDS(c)		((c)->output_flag & SDVO_LVDS_MASK)
> +#define IS_TV_OR_LVDS(c)	((c)->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
> +#define IS_DIGITAL(c)		((c)->output_flag & (SDVO_TMDS_MASK | SDVO_LVDS_MASK))
>  
>  
>  static const char * const tv_format_names[] = {

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 03/13] drm/i915/sdvo: s/sdvo_inputs_mask/sdvo_num_inputs/
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 03/13] drm/i915/sdvo: s/sdvo_inputs_mask/sdvo_num_inputs/ Ville Syrjala
@ 2023-07-06  7:24   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  7:24 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> The SDVO inputs are reportes a simple number, not a bitmask.

*reported as a

> Adjust the code to match reality.
>
> Note that we don't actually support dual input SDVO devices,
> and we just always use the first input.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Didn't actually check this against any spec, but looks reasonable.

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


> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c      | 9 ++++-----
>  drivers/gpu/drm/i915/display/intel_sdvo_regs.h | 2 +-
>  2 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index ec94da6cb7bb..76eed11e9fed 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -1955,7 +1955,7 @@ static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct in
>  		      "  device_rev_id: %d\n"
>  		      "  sdvo_version_major: %d\n"
>  		      "  sdvo_version_minor: %d\n"
> -		      "  sdvo_inputs_mask: %d\n"
> +		      "  sdvo_num_inputs: %d\n"
>  		      "  smooth_scaling: %d\n"
>  		      "  sharp_scaling: %d\n"
>  		      "  up_scaling: %d\n"
> @@ -1967,7 +1967,7 @@ static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct in
>  		      caps->device_rev_id,
>  		      caps->sdvo_version_major,
>  		      caps->sdvo_version_minor,
> -		      caps->sdvo_inputs_mask,
> +		      caps->sdvo_num_inputs,
>  		      caps->smooth_scaling,
>  		      caps->sharp_scaling,
>  		      caps->up_scaling,
> @@ -3436,15 +3436,14 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
>  
>  	drm_dbg_kms(&dev_priv->drm, "%s device VID/DID: %02X:%02X.%02X, "
>  			"clock range %dMHz - %dMHz, "
> -			"input 1: %c, input 2: %c, "
> +			"num inputs: %d, "
>  			"output 1: %c, output 2: %c\n",
>  			SDVO_NAME(intel_sdvo),
>  			intel_sdvo->caps.vendor_id, intel_sdvo->caps.device_id,
>  			intel_sdvo->caps.device_rev_id,
>  			intel_sdvo->pixel_clock_min / 1000,
>  			intel_sdvo->pixel_clock_max / 1000,
> -			(intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N',
> -			(intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N',
> +			intel_sdvo->caps.sdvo_num_inputs,
>  			/* check currently supported outputs */
>  			intel_sdvo->caps.output_flags &
>  			(SDVO_OUTPUT_TMDS0 | SDVO_OUTPUT_RGB0 |
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo_regs.h b/drivers/gpu/drm/i915/display/intel_sdvo_regs.h
> index 74dc6c042b6e..54f099abefeb 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo_regs.h
> @@ -57,7 +57,7 @@ struct intel_sdvo_caps {
>  	u8 device_rev_id;
>  	u8 sdvo_version_major;
>  	u8 sdvo_version_minor;
> -	unsigned int sdvo_inputs_mask:2;
> +	unsigned int sdvo_num_inputs:2;
>  	unsigned int smooth_scaling:1;
>  	unsigned int sharp_scaling:1;
>  	unsigned int up_scaling:1;

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 04/13] drm/i915: Don't warn about zero N/P in *_calc_dpll_params()
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 04/13] drm/i915: Don't warn about zero N/P in *_calc_dpll_params() Ville Syrjala
@ 2023-07-06  8:17   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:17 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Allow *_calc_dpll_params() to be called even if the N/P dividers
> are zero without warning. We'll want to call these to make sure the
> derived values are fully computed, but not all users (VLV DSI in
> particular) don't even enable the DPLL and thus the dividers will
> be left at zero.
>
> It could also be possible that the BIOS has misprogrammed the DPLL
> (IIRC happened with some SNB machines with 4k+ displays) and thus
> we'll currently generate a lot of dmesg spew. Better be silent and
> just let the normal state checker/etc. deal with any driver bugs.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_dpll.c | 37 ++++++++++++-----------
>  1 file changed, 20 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c b/drivers/gpu/drm/i915/display/intel_dpll.c
> index 999badfe2906..71bfeea4cef2 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll.c
> @@ -314,10 +314,11 @@ int pnv_calc_dpll_params(int refclk, struct dpll *clock)
>  {
>  	clock->m = clock->m2 + 2;
>  	clock->p = clock->p1 * clock->p2;
> -	if (WARN_ON(clock->n == 0 || clock->p == 0))
> -		return 0;
> -	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
> -	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
> +
> +	clock->vco = clock->n == 0 ? 0 :
> +		DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
> +	clock->dot = clock->p == 0 ? 0 :
> +		DIV_ROUND_CLOSEST(clock->vco, clock->p);
>  
>  	return clock->dot;
>  }
> @@ -331,10 +332,11 @@ int i9xx_calc_dpll_params(int refclk, struct dpll *clock)
>  {
>  	clock->m = i9xx_dpll_compute_m(clock);
>  	clock->p = clock->p1 * clock->p2;
> -	if (WARN_ON(clock->n + 2 == 0 || clock->p == 0))
> -		return 0;
> -	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n + 2);
> -	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
> +
> +	clock->vco = clock->n + 2 == 0 ? 0 :
> +		DIV_ROUND_CLOSEST(refclk * clock->m, clock->n + 2);
> +	clock->dot = clock->p == 0 ? 0 :
> +		DIV_ROUND_CLOSEST(clock->vco, clock->p);
>  
>  	return clock->dot;
>  }
> @@ -343,10 +345,11 @@ int vlv_calc_dpll_params(int refclk, struct dpll *clock)
>  {
>  	clock->m = clock->m1 * clock->m2;
>  	clock->p = clock->p1 * clock->p2 * 5;
> -	if (WARN_ON(clock->n == 0 || clock->p == 0))
> -		return 0;
> -	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
> -	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
> +
> +	clock->vco = clock->n == 0 ? 0 :
> +		DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
> +	clock->dot = clock->p == 0 ? 0 :
> +		DIV_ROUND_CLOSEST(clock->vco, clock->p);
>  
>  	return clock->dot;
>  }
> @@ -355,11 +358,11 @@ int chv_calc_dpll_params(int refclk, struct dpll *clock)
>  {
>  	clock->m = clock->m1 * clock->m2;
>  	clock->p = clock->p1 * clock->p2 * 5;
> -	if (WARN_ON(clock->n == 0 || clock->p == 0))
> -		return 0;
> -	clock->vco = DIV_ROUND_CLOSEST_ULL(mul_u32_u32(refclk, clock->m),
> -					   clock->n << 22);
> -	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
> +
> +	clock->vco = clock->n == 0 ? 0 :
> +		DIV_ROUND_CLOSEST_ULL(mul_u32_u32(refclk, clock->m), clock->n << 22);
> +	clock->dot = clock->p == 0 ? 0 :
> +		DIV_ROUND_CLOSEST(clock->vco, clock->p);
>  
>  	return clock->dot;
>  }

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 06/13] drm/i915/sdvo: Pick the TV dotclock from adjusted_mode
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 06/13] drm/i915/sdvo: Pick the TV dotclock from adjusted_mode Ville Syrjala
@ 2023-07-06  8:22   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:22 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> port_clock is what the encoder/dpll code is supposed to calculate,
> it is not the input clock. Use the dotclock as the target we're
> trying to achieve instead.
>
> TODO: the SDVO TV clocking is a mess atm and needs further work
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 76eed11e9fed..75a8e5583358 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -1272,7 +1272,7 @@ intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo,
>  static void i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(pipe_config->uapi.crtc->dev);
> -	unsigned dotclock = pipe_config->port_clock;
> +	unsigned int dotclock = pipe_config->hw.adjusted_mode.crtc_clock;
>  	struct dpll *clock = &pipe_config->dpll;
>  
>  	/*

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 07/13] drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 07/13] drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range Ville Syrjala
@ 2023-07-06  8:22   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:22 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Instead of warning and continuing with bogus state when the
> requested dotclock isn't acceptable just print some debug
> spew and fail gracefully.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 18 +++++++++++++-----
>  1 file changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 75a8e5583358..fcf3a95393d9 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -1269,7 +1269,7 @@ intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo,
>  	return true;
>  }
>  
> -static void i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
> +static int i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(pipe_config->uapi.crtc->dev);
>  	unsigned int dotclock = pipe_config->hw.adjusted_mode.crtc_clock;
> @@ -1292,11 +1292,14 @@ static void i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
>  		clock->m1 = 12;
>  		clock->m2 = 8;
>  	} else {
> -		drm_WARN(&dev_priv->drm, 1,
> -			 "SDVO TV clock out of range: %i\n", dotclock);
> +		drm_dbg_kms(&dev_priv->drm,
> +			    "SDVO TV clock out of range: %i\n", dotclock);
> +		return -EINVAL;
>  	}
>  
>  	pipe_config->clock_set = true;
> +
> +	return 0;
>  }
>  
>  static bool intel_has_hdmi_sink(struct intel_sdvo_connector *intel_sdvo_connector,
> @@ -1414,8 +1417,13 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
>  					       conn_state);
>  
>  	/* Clock computation needs to happen after pixel multiplier. */
> -	if (IS_TV(intel_sdvo_connector))
> -		i9xx_adjust_sdvo_tv_clock(pipe_config);
> +	if (IS_TV(intel_sdvo_connector)) {
> +		int ret;
> +
> +		ret = i9xx_adjust_sdvo_tv_clock(pipe_config);
> +		if (ret)
> +			return ret;
> +	}
>  
>  	if (conn_state->picture_aspect_ratio)
>  		adjusted_mode->picture_aspect_ratio =

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 08/13] drm/i915/sdvo: Nuke attached_output tracking
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 08/13] drm/i915/sdvo: Nuke attached_output tracking Ville Syrjala
@ 2023-07-06  8:24   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:24 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Instead of operating on the output the user specified (via the
> connector) the current code tends to operate on whichever outputs
> it has detected as attached. That is not how the kms uapi is supposed
> to work. So simply get rid of attached_outputs and instead directly
> operate on the output the user has specified.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 31 ++++++++++++-----------
>  1 file changed, 16 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index fcf3a95393d9..29762716a067 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -103,12 +103,6 @@ struct intel_sdvo {
>  	/* Pixel clock limitations reported by the SDVO device, in kHz */
>  	int pixel_clock_min, pixel_clock_max;
>  
> -	/*
> -	* For multiple function SDVO device,
> -	* this is for current attached outputs.
> -	*/
> -	u16 attached_output;
> -
>  	/*
>  	 * Hotplug activation bits for this device
>  	 */
> @@ -1223,12 +1217,13 @@ static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo,
>  
>  static bool
>  intel_sdvo_set_output_timings_from_mode(struct intel_sdvo *intel_sdvo,
> +					struct intel_sdvo_connector *intel_sdvo_connector,
>  					const struct drm_display_mode *mode)
>  {
>  	struct intel_sdvo_dtd output_dtd;
>  
>  	if (!intel_sdvo_set_target_output(intel_sdvo,
> -					  intel_sdvo->attached_output))
> +					  intel_sdvo_connector->output_flag))
>  		return false;
>  
>  	intel_sdvo_get_dtd_from_mode(&output_dtd, mode);
> @@ -1369,7 +1364,9 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
>  	 * the sequence to do it. Oh well.
>  	 */
>  	if (IS_TV(intel_sdvo_connector)) {
> -		if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, mode))
> +		if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo,
> +							     intel_sdvo_connector,
> +							     mode))
>  			return -EINVAL;
>  
>  		(void) intel_sdvo_get_preferred_input_mode(intel_sdvo,
> @@ -1387,7 +1384,9 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
>  		if (ret)
>  			return ret;
>  
> -		if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, fixed_mode))
> +		if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo,
> +							     intel_sdvo_connector,
> +							     fixed_mode))
>  			return -EINVAL;
>  
>  		(void) intel_sdvo_get_preferred_input_mode(intel_sdvo,
> @@ -1528,7 +1527,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
>  	 * channel on the motherboard.  In a two-input device, the first input
>  	 * will be SDVOB and the second SDVOC.
>  	 */
> -	in_out.in0 = intel_sdvo->attached_output;
> +	in_out.in0 = intel_sdvo_connector->output_flag;
>  	in_out.in1 = 0;
>  
>  	intel_sdvo_set_value(intel_sdvo,
> @@ -1537,7 +1536,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
>  
>  	/* Set the output timings to the screen */
>  	if (!intel_sdvo_set_target_output(intel_sdvo,
> -					  intel_sdvo->attached_output))
> +					  intel_sdvo_connector->output_flag))
>  		return;
>  
>  	/* lvds has a special fixed output timing. */
> @@ -1874,6 +1873,8 @@ static void intel_enable_sdvo(struct intel_atomic_state *state,
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
>  	struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
> +	struct intel_sdvo_connector *intel_sdvo_connector =
> +		to_intel_sdvo_connector(conn_state->connector);
>  	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
>  	u32 temp;
>  	bool input1, input2;
> @@ -1903,7 +1904,7 @@ static void intel_enable_sdvo(struct intel_atomic_state *state,
>  	if (0)
>  		intel_sdvo_set_encoder_power_state(intel_sdvo,
>  						   DRM_MODE_DPMS_ON);
> -	intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output);
> +	intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo_connector->output_flag);
>  
>  	if (pipe_config->has_audio)
>  		intel_sdvo_enable_audio(intel_sdvo, pipe_config, conn_state);
> @@ -2158,8 +2159,6 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
>  	if (response == 0)
>  		return connector_status_disconnected;
>  
> -	intel_sdvo->attached_output = response;
> -
>  	if ((intel_sdvo_connector->output_flag & response) == 0)
>  		ret = connector_status_disconnected;
>  	else if (IS_TMDS(intel_sdvo_connector))
> @@ -2287,6 +2286,8 @@ static const struct drm_display_mode sdvo_tv_modes[] = {
>  static int intel_sdvo_get_tv_modes(struct drm_connector *connector)
>  {
>  	struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
> +	struct intel_sdvo_connector *intel_sdvo_connector =
> +		to_intel_sdvo_connector(connector);
>  	const struct drm_connector_state *conn_state = connector->state;
>  	struct intel_sdvo_sdtv_resolution_request tv_res;
>  	u32 reply = 0, format_map = 0;
> @@ -2304,7 +2305,7 @@ static int intel_sdvo_get_tv_modes(struct drm_connector *connector)
>  	memcpy(&tv_res, &format_map,
>  	       min(sizeof(format_map), sizeof(struct intel_sdvo_sdtv_resolution_request)));
>  
> -	if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output))
> +	if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo_connector->output_flag))
>  		return 0;
>  
>  	BUILD_BUG_ON(sizeof(tv_res) != 3);

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 09/13] drm/i915/sdvo: Initialize the encoder ealier
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 09/13] drm/i915/sdvo: Initialize the encoder ealier Ville Syrjala
@ 2023-07-06  8:28   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:28 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Call drm_encoder_init() earlier so that we don't have to keep passing
> the i915/dev_priv around separately.

*earlier in the subject.

>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 35 +++++++++++------------
>  1 file changed, 17 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 29762716a067..e6c558416a6b 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2613,9 +2613,9 @@ intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
>   * outputs, then LVDS outputs.
>   */
>  static void
> -intel_sdvo_select_ddc_bus(struct drm_i915_private *dev_priv,
> -			  struct intel_sdvo *sdvo)
> +intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
>  	struct sdvo_device_mapping *mapping;
>  
>  	if (sdvo->port == PORT_B)
> @@ -2630,9 +2630,9 @@ intel_sdvo_select_ddc_bus(struct drm_i915_private *dev_priv,
>  }
>  
>  static void
> -intel_sdvo_select_i2c_bus(struct drm_i915_private *dev_priv,
> -			  struct intel_sdvo *sdvo)
> +intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
>  	struct sdvo_device_mapping *mapping;
>  	u8 pin;
>  
> @@ -2671,9 +2671,9 @@ intel_sdvo_is_hdmi_connector(struct intel_sdvo *intel_sdvo)
>  }
>  
>  static u8
> -intel_sdvo_get_slave_addr(struct drm_i915_private *dev_priv,
> -			  struct intel_sdvo *sdvo)
> +intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
>  	struct sdvo_device_mapping *my_mapping, *other_mapping;
>  
>  	if (sdvo->port == PORT_B) {
> @@ -2994,7 +2994,6 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
>  		SDVO_OUTPUT_LVDS0,
>  		SDVO_OUTPUT_LVDS1,
>  	};
> -	struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
>  	u16 flags;
>  	int i;
>  
> @@ -3008,7 +3007,7 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
>  
>  	intel_sdvo->controlled_output = flags;
>  
> -	intel_sdvo_select_ddc_bus(i915, intel_sdvo);
> +	intel_sdvo_select_ddc_bus(intel_sdvo);
>  
>  	for (i = 0; i < ARRAY_SIZE(probe_order); i++) {
>  		u16 type = flags & probe_order[i];
> @@ -3309,9 +3308,9 @@ static const struct i2c_lock_operations proxy_lock_ops = {
>  };
>  
>  static bool
> -intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo,
> -			  struct drm_i915_private *dev_priv)
> +intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
>  	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
>  
>  	sdvo->ddc.owner = THIS_MODULE;
> @@ -3357,23 +3356,23 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
>  	if (!intel_sdvo)
>  		return false;
>  
> -	intel_sdvo->sdvo_reg = sdvo_reg;
> -	intel_sdvo->port = port;
> -	intel_sdvo->slave_addr =
> -		intel_sdvo_get_slave_addr(dev_priv, intel_sdvo) >> 1;
> -	intel_sdvo_select_i2c_bus(dev_priv, intel_sdvo);
> -	if (!intel_sdvo_init_ddc_proxy(intel_sdvo, dev_priv))
> -		goto err_i2c_bus;
> -
>  	/* encoder type will be decided later */
>  	intel_encoder = &intel_sdvo->base;
>  	intel_encoder->type = INTEL_OUTPUT_SDVO;
>  	intel_encoder->power_domain = POWER_DOMAIN_PORT_OTHER;
>  	intel_encoder->port = port;
> +
>  	drm_encoder_init(&dev_priv->drm, &intel_encoder->base,
>  			 &intel_sdvo_enc_funcs, 0,
>  			 "SDVO %c", port_name(port));
>  
> +	intel_sdvo->sdvo_reg = sdvo_reg;
> +	intel_sdvo->port = port;
> +	intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(intel_sdvo) >> 1;
> +	intel_sdvo_select_i2c_bus(intel_sdvo);
> +	if (!intel_sdvo_init_ddc_proxy(intel_sdvo))
> +		goto err_i2c_bus;

drm_encoder_cleanup() in the error path?

Other than that,

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


> +
>  	/* Read the regs to test if we can talk to the device */
>  	for (i = 0; i < 0x40; i++) {
>  		u8 byte;

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 10/13] drm/i915/sdvo: Nuke the duplicate sdvo->port
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 10/13] drm/i915/sdvo: Nuke the duplicate sdvo->port Ville Syrjala
@ 2023-07-06  8:29   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:29 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> We already have encoder->port so get rid of the duplicate
> sdvo->port.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 19 ++++++++-----------
>  1 file changed, 8 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index e6c558416a6b..383f8b1547a1 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -108,8 +108,6 @@ struct intel_sdvo {
>  	 */
>  	u16 hotplug_active;
>  
> -	enum port port;
> -
>  	/* DDC bus used by this SDVO encoder */
>  	u8 ddc_bus;
>  
> @@ -226,7 +224,7 @@ static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val)
>  		return;
>  	}
>  
> -	if (intel_sdvo->port == PORT_B)
> +	if (intel_sdvo->base.port == PORT_B)
>  		cval = intel_de_read(dev_priv, GEN3_SDVOC);
>  	else
>  		bval = intel_de_read(dev_priv, GEN3_SDVOB);
> @@ -403,7 +401,7 @@ static const char *sdvo_cmd_name(u8 cmd)
>  	return NULL;
>  }
>  
> -#define SDVO_NAME(svdo) ((svdo)->port == PORT_B ? "SDVOB" : "SDVOC")
> +#define SDVO_NAME(svdo) ((svdo)->base.port == PORT_B ? "SDVOB" : "SDVOC")
>  
>  static void intel_sdvo_debug_write(struct intel_sdvo *intel_sdvo, u8 cmd,
>  				   const void *args, int args_len)
> @@ -1604,7 +1602,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
>  			sdvox |= SDVO_BORDER_ENABLE;
>  	} else {
>  		sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg);
> -		if (intel_sdvo->port == PORT_B)
> +		if (intel_sdvo->base.port == PORT_B)
>  			sdvox &= SDVOB_PRESERVE_MASK;
>  		else
>  			sdvox &= SDVOC_PRESERVE_MASK;
> @@ -2618,7 +2616,7 @@ intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo)
>  	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
>  	struct sdvo_device_mapping *mapping;
>  
> -	if (sdvo->port == PORT_B)
> +	if (sdvo->base.port == PORT_B)
>  		mapping = &dev_priv->display.vbt.sdvo_mappings[0];
>  	else
>  		mapping = &dev_priv->display.vbt.sdvo_mappings[1];
> @@ -2636,7 +2634,7 @@ intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
>  	struct sdvo_device_mapping *mapping;
>  	u8 pin;
>  
> -	if (sdvo->port == PORT_B)
> +	if (sdvo->base.port == PORT_B)
>  		mapping = &dev_priv->display.vbt.sdvo_mappings[0];
>  	else
>  		mapping = &dev_priv->display.vbt.sdvo_mappings[1];
> @@ -2676,7 +2674,7 @@ intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
>  	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
>  	struct sdvo_device_mapping *my_mapping, *other_mapping;
>  
> -	if (sdvo->port == PORT_B) {
> +	if (sdvo->base.port == PORT_B) {
>  		my_mapping = &dev_priv->display.vbt.sdvo_mappings[0];
>  		other_mapping = &dev_priv->display.vbt.sdvo_mappings[1];
>  	} else {
> @@ -2703,7 +2701,7 @@ intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
>  	 * No SDVO device info is found for another DVO port,
>  	 * so use mapping assumption we had before BIOS parsing.
>  	 */
> -	if (sdvo->port == PORT_B)
> +	if (sdvo->base.port == PORT_B)
>  		return 0x70;
>  	else
>  		return 0x72;
> @@ -3367,7 +3365,6 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
>  			 "SDVO %c", port_name(port));
>  
>  	intel_sdvo->sdvo_reg = sdvo_reg;
> -	intel_sdvo->port = port;
>  	intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(intel_sdvo) >> 1;
>  	intel_sdvo_select_i2c_bus(intel_sdvo);
>  	if (!intel_sdvo_init_ddc_proxy(intel_sdvo))
> @@ -3417,7 +3414,7 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
>  	 * hotplug lines.
>  	 */
>  	if (intel_sdvo->hotplug_active) {
> -		if (intel_sdvo->port == PORT_B)
> +		if (intel_sdvo->base.port == PORT_B)
>  			intel_encoder->hpd_pin = HPD_SDVO_B;
>  		else
>  			intel_encoder->hpd_pin = HPD_SDVO_C;

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 11/13] drm/i915/sdvo: Get rid of the per-connector i2c symlink
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 11/13] drm/i915/sdvo: Get rid of the per-connector i2c symlink Ville Syrjala
@ 2023-07-06  8:30   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:30 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> We should switch over to the standard "ddc" per-connector
> symlink instead of rolling our own thing. The i2c specific
> symlink is also in the way of reworking the SDVO DDC handling
> (which is a mess atm) so get rid of it.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 29 ++---------------------
>  1 file changed, 2 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 383f8b1547a1..5c25417d256a 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2468,31 +2468,6 @@ intel_sdvo_connector_atomic_set_property(struct drm_connector *connector,
>  	return 0;
>  }
>  
> -static int
> -intel_sdvo_connector_register(struct drm_connector *connector)
> -{
> -	struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector));
> -	int ret;
> -
> -	ret = intel_connector_register(connector);
> -	if (ret)
> -		return ret;
> -
> -	return sysfs_create_link(&connector->kdev->kobj,
> -				 &sdvo->ddc.dev.kobj,
> -				 sdvo->ddc.dev.kobj.name);
> -}
> -
> -static void
> -intel_sdvo_connector_unregister(struct drm_connector *connector)
> -{
> -	struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector));
> -
> -	sysfs_remove_link(&connector->kdev->kobj,
> -			  sdvo->ddc.dev.kobj.name);
> -	intel_connector_unregister(connector);
> -}
> -
>  static struct drm_connector_state *
>  intel_sdvo_connector_duplicate_state(struct drm_connector *connector)
>  {
> @@ -2511,8 +2486,8 @@ static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
>  	.fill_modes = drm_helper_probe_single_connector_modes,
>  	.atomic_get_property = intel_sdvo_connector_atomic_get_property,
>  	.atomic_set_property = intel_sdvo_connector_atomic_set_property,
> -	.late_register = intel_sdvo_connector_register,
> -	.early_unregister = intel_sdvo_connector_unregister,
> +	.late_register = intel_connector_register,
> +	.early_unregister = intel_connector_unregister,
>  	.destroy = intel_connector_destroy,
>  	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
>  	.atomic_duplicate_state = intel_sdvo_connector_duplicate_state,

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 12/13] drm/i915/sdvo: Rework DDC bus handling
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 12/13] drm/i915/sdvo: Rework DDC bus handling Ville Syrjala
@ 2023-07-06  8:38   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:38 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Each SDVO device can have up to three sets of DDC pins.
> Currently we just register a single i2c_adapter for the
> entire SDVO device and semi-randomly pick the "correct"
> set of DDC pins during intel_sdvo_tmds_sink_detect().
> This doesn't make any real sense especially if we have
> multiple outputs each with their own dedicated DDC bus.
>
> Let's clean up this mess and register a dedicated
> i2c_adapter for each of the possible pin pairs. Each
> output (ie. connector) can then pick the correct i2c_adapter
> to use for its DDC bus. And we can just switch over to
> drm_connector_init_with_ddc() to take care of the
> connector->ddc association, which also populates the
> "ddc" sysfs symlink as a bonus.
>
> And now that things are based on the actual connector we can
> also nuke the sketchy sdvo->controller_output thing.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Okay, so I'm not going to claim I considered all the possible aspects of
the changes here, but I did not spot anything wrong with it
either. Maybe there's a bit much shoved in one patch, but not sure if it
would be feasible or productive to chop it up. The direction looks good.

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

> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 205 ++++++++++++----------
>  1 file changed, 114 insertions(+), 91 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 5c25417d256a..d7edb5714c4c 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -65,6 +65,8 @@
>  #define IS_TV_OR_LVDS(c)	((c)->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
>  #define IS_DIGITAL(c)		((c)->output_flag & (SDVO_TMDS_MASK | SDVO_LVDS_MASK))
>  
> +#define HAS_DDC(c)		((c)->output_flag & (SDVO_RGB_MASK | SDVO_TMDS_MASK | \
> +						     SDVO_LVDS_MASK))
>  
>  static const char * const tv_format_names[] = {
>  	"NTSC_M"   , "NTSC_J"  , "NTSC_443",
> @@ -78,20 +80,25 @@ static const char * const tv_format_names[] = {
>  
>  #define TV_FORMAT_NUM  ARRAY_SIZE(tv_format_names)
>  
> +struct intel_sdvo;
> +
> +struct intel_sdvo_ddc {
> +	struct i2c_adapter ddc;
> +	struct intel_sdvo *sdvo;
> +	u8 ddc_bus;
> +};
> +
>  struct intel_sdvo {
>  	struct intel_encoder base;
>  
>  	struct i2c_adapter *i2c;
>  	u8 slave_addr;
>  
> -	struct i2c_adapter ddc;
> +	struct intel_sdvo_ddc ddc[3];
>  
>  	/* Register for the SDVO device: SDVOB or SDVOC */
>  	i915_reg_t sdvo_reg;
>  
> -	/* Active outputs controlled by this SDVO output */
> -	u16 controlled_output;
> -
>  	/*
>  	 * Capabilities of the SDVO device returned by
>  	 * intel_sdvo_get_capabilities()
> @@ -108,9 +115,6 @@ struct intel_sdvo {
>  	 */
>  	u16 hotplug_active;
>  
> -	/* DDC bus used by this SDVO encoder */
> -	u8 ddc_bus;
> -
>  	/*
>  	 * the sdvo flag gets lost in round trip: dtd->adjusted_mode->dtd
>  	 */
> @@ -2035,18 +2039,15 @@ intel_sdvo_hotplug(struct intel_encoder *encoder,
>  	return intel_encoder_hotplug(encoder, connector);
>  }
>  
> -static bool
> -intel_sdvo_multifunc_encoder(struct intel_sdvo *intel_sdvo)
> -{
> -	/* Is there more than one type of output? */
> -	return hweight16(intel_sdvo->caps.output_flags) > 1;
> -}
> -
>  static const struct drm_edid *
>  intel_sdvo_get_edid(struct drm_connector *connector)
>  {
> -	struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector));
> -	return drm_edid_read_ddc(connector, &sdvo->ddc);
> +	struct i2c_adapter *ddc = connector->ddc;
> +
> +	if (!ddc)
> +		return NULL;
> +
> +	return drm_edid_read_ddc(connector, ddc);
>  }
>  
>  /* Mac mini hack -- use the same DDC as the analog connector */
> @@ -2054,43 +2055,23 @@ static const struct drm_edid *
>  intel_sdvo_get_analog_edid(struct drm_connector *connector)
>  {
>  	struct drm_i915_private *i915 = to_i915(connector->dev);
> -	struct i2c_adapter *i2c;
> +	struct i2c_adapter *ddc;
>  
> -	i2c = intel_gmbus_get_adapter(i915, i915->display.vbt.crt_ddc_pin);
> +	ddc = intel_gmbus_get_adapter(i915, i915->display.vbt.crt_ddc_pin);
> +	if (!ddc)
> +		return NULL;
>  
> -	return drm_edid_read_ddc(connector, i2c);
> +	return drm_edid_read_ddc(connector, ddc);
>  }
>  
>  static enum drm_connector_status
>  intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
>  {
> -	struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
>  	enum drm_connector_status status;
>  	const struct drm_edid *drm_edid;
>  
>  	drm_edid = intel_sdvo_get_edid(connector);
>  
> -	if (!drm_edid && intel_sdvo_multifunc_encoder(intel_sdvo)) {
> -		u8 ddc, saved_ddc = intel_sdvo->ddc_bus;
> -
> -		/*
> -		 * Don't use the 1 as the argument of DDC bus switch to get
> -		 * the EDID. It is used for SDVO SPD ROM.
> -		 */
> -		for (ddc = intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) {
> -			intel_sdvo->ddc_bus = ddc;
> -			drm_edid = intel_sdvo_get_edid(connector);
> -			if (drm_edid)
> -				break;
> -		}
> -		/*
> -		 * If we found the EDID on the other bus,
> -		 * assume that is the correct DDC bus.
> -		 */
> -		if (!drm_edid)
> -			intel_sdvo->ddc_bus = saved_ddc;
> -	}
> -
>  	/*
>  	 * When there is no edid and no monitor is connected with VGA
>  	 * port, try to use the CRT ddc to read the EDID for DVI-connector.
> @@ -2524,29 +2505,37 @@ static const struct drm_connector_helper_funcs intel_sdvo_connector_helper_funcs
>  	.atomic_check = intel_sdvo_atomic_check,
>  };
>  
> -static void intel_sdvo_enc_destroy(struct drm_encoder *encoder)
> +static void intel_sdvo_encoder_destroy(struct drm_encoder *_encoder)
>  {
> -	struct intel_sdvo *intel_sdvo = to_sdvo(to_intel_encoder(encoder));
> +	struct intel_encoder *encoder = to_intel_encoder(_encoder);
> +	struct intel_sdvo *sdvo = to_sdvo(encoder);
> +	int i;
>  
> -	i2c_del_adapter(&intel_sdvo->ddc);
> -	intel_encoder_destroy(encoder);
> -}
> +	for (i = 0; i < ARRAY_SIZE(sdvo->ddc); i++) {
> +		if (sdvo->ddc[i].ddc_bus)
> +			i2c_del_adapter(&sdvo->ddc[i].ddc);
> +	}
> +
> +	drm_encoder_cleanup(&encoder->base);
> +	kfree(sdvo);
> +};
>  
>  static const struct drm_encoder_funcs intel_sdvo_enc_funcs = {
> -	.destroy = intel_sdvo_enc_destroy,
> +	.destroy = intel_sdvo_encoder_destroy,
>  };
>  
> -static void
> -intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
> +static int
> +intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo,
> +			 struct intel_sdvo_connector *connector)
>  {
>  	u16 mask = 0;
> -	unsigned int num_bits;
> +	int num_bits;
>  
>  	/*
>  	 * Make a mask of outputs less than or equal to our own priority in the
>  	 * list.
>  	 */
> -	switch (sdvo->controlled_output) {
> +	switch (connector->output_flag) {
>  	case SDVO_OUTPUT_LVDS1:
>  		mask |= SDVO_OUTPUT_LVDS1;
>  		fallthrough;
> @@ -2575,7 +2564,7 @@ intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
>  		num_bits = 3;
>  
>  	/* Corresponds to SDVO_CONTROL_BUS_DDCx */
> -	sdvo->ddc_bus = 1 << num_bits;
> +	return num_bits;
>  }
>  
>  /*
> @@ -2585,11 +2574,13 @@ intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
>   * DDC bus number assignment is in a priority order of RGB outputs, then TMDS
>   * outputs, then LVDS outputs.
>   */
> -static void
> -intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo)
> +static struct intel_sdvo_ddc *
> +intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo,
> +			  struct intel_sdvo_connector *connector)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
>  	struct sdvo_device_mapping *mapping;
> +	int ddc_bus;
>  
>  	if (sdvo->base.port == PORT_B)
>  		mapping = &dev_priv->display.vbt.sdvo_mappings[0];
> @@ -2597,9 +2588,14 @@ intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo)
>  		mapping = &dev_priv->display.vbt.sdvo_mappings[1];
>  
>  	if (mapping->initialized)
> -		sdvo->ddc_bus = 1 << ((mapping->ddc_pin & 0xf0) >> 4);
> +		ddc_bus = (mapping->ddc_pin & 0xf0) >> 4;
>  	else
> -		intel_sdvo_guess_ddc_bus(sdvo);
> +		ddc_bus = intel_sdvo_guess_ddc_bus(sdvo, connector);
> +
> +	if (ddc_bus < 1 || ddc_bus > 3)
> +		return NULL;
> +
> +	return &sdvo->ddc[ddc_bus - 1];
>  }
>  
>  static void
> @@ -2682,22 +2678,30 @@ intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
>  		return 0x72;
>  }
>  
> +static int
> +intel_sdvo_init_ddc_proxy(struct intel_sdvo_ddc *ddc,
> +			  struct intel_sdvo *sdvo, int bit);
> +
>  static int
>  intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
>  			  struct intel_sdvo *encoder)
>  {
> -	struct drm_connector *drm_connector;
> +	struct drm_i915_private *i915 = to_i915(encoder->base.base.dev);
> +	struct intel_sdvo_ddc *ddc = NULL;
>  	int ret;
>  
> -	drm_connector = &connector->base.base;
> -	ret = drm_connector_init(encoder->base.base.dev,
> -			   drm_connector,
> -			   &intel_sdvo_connector_funcs,
> -			   connector->base.base.connector_type);
> +	if (HAS_DDC(connector))
> +		ddc = intel_sdvo_select_ddc_bus(encoder, connector);
> +
> +	ret = drm_connector_init_with_ddc(encoder->base.base.dev,
> +					  &connector->base.base,
> +					  &intel_sdvo_connector_funcs,
> +					  connector->base.base.connector_type,
> +					  ddc ? &ddc->ddc : NULL);
>  	if (ret < 0)
>  		return ret;
>  
> -	drm_connector_helper_add(drm_connector,
> +	drm_connector_helper_add(&connector->base.base,
>  				 &intel_sdvo_connector_helper_funcs);
>  
>  	connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB;
> @@ -2706,6 +2710,11 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
>  
>  	intel_connector_attach_encoder(&connector->base, &encoder->base);
>  
> +	if (ddc)
> +		drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s] using %s\n",
> +			    connector->base.base.base.id, connector->base.base.name,
> +			    ddc->ddc.name);
> +
>  	return 0;
>  }
>  
> @@ -2903,7 +2912,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
>  	if (!intel_panel_preferred_fixed_mode(intel_connector)) {
>  		mutex_lock(&i915->drm.mode_config.mutex);
>  
> -		intel_ddc_get_modes(connector, &intel_sdvo->ddc);
> +		intel_ddc_get_modes(connector, connector->ddc);
>  		intel_panel_add_edid_fixed_modes(intel_connector, false);
>  
>  		mutex_unlock(&i915->drm.mode_config.mutex);
> @@ -2978,10 +2987,6 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
>  		return false;
>  	}
>  
> -	intel_sdvo->controlled_output = flags;
> -
> -	intel_sdvo_select_ddc_bus(intel_sdvo);
> -
>  	for (i = 0; i < ARRAY_SIZE(probe_order); i++) {
>  		u16 type = flags & probe_order[i];
>  
> @@ -3234,9 +3239,10 @@ static int intel_sdvo_ddc_proxy_xfer(struct i2c_adapter *adapter,
>  				     struct i2c_msg *msgs,
>  				     int num)
>  {
> -	struct intel_sdvo *sdvo = adapter->algo_data;
> +	struct intel_sdvo_ddc *ddc = adapter->algo_data;
> +	struct intel_sdvo *sdvo = ddc->sdvo;
>  
> -	if (!__intel_sdvo_set_control_bus_switch(sdvo, sdvo->ddc_bus))
> +	if (!__intel_sdvo_set_control_bus_switch(sdvo, 1 << ddc->ddc_bus))
>  		return -EIO;
>  
>  	return sdvo->i2c->algo->master_xfer(sdvo->i2c, msgs, num);
> @@ -3244,7 +3250,9 @@ static int intel_sdvo_ddc_proxy_xfer(struct i2c_adapter *adapter,
>  
>  static u32 intel_sdvo_ddc_proxy_func(struct i2c_adapter *adapter)
>  {
> -	struct intel_sdvo *sdvo = adapter->algo_data;
> +	struct intel_sdvo_ddc *ddc = adapter->algo_data;
> +	struct intel_sdvo *sdvo = ddc->sdvo;
> +
>  	return sdvo->i2c->algo->functionality(sdvo->i2c);
>  }
>  
> @@ -3256,21 +3264,27 @@ static const struct i2c_algorithm intel_sdvo_ddc_proxy = {
>  static void proxy_lock_bus(struct i2c_adapter *adapter,
>  			   unsigned int flags)
>  {
> -	struct intel_sdvo *sdvo = adapter->algo_data;
> +	struct intel_sdvo_ddc *ddc = adapter->algo_data;
> +	struct intel_sdvo *sdvo = ddc->sdvo;
> +
>  	sdvo->i2c->lock_ops->lock_bus(sdvo->i2c, flags);
>  }
>  
>  static int proxy_trylock_bus(struct i2c_adapter *adapter,
>  			     unsigned int flags)
>  {
> -	struct intel_sdvo *sdvo = adapter->algo_data;
> +	struct intel_sdvo_ddc *ddc = adapter->algo_data;
> +	struct intel_sdvo *sdvo = ddc->sdvo;
> +
>  	return sdvo->i2c->lock_ops->trylock_bus(sdvo->i2c, flags);
>  }
>  
>  static void proxy_unlock_bus(struct i2c_adapter *adapter,
>  			     unsigned int flags)
>  {
> -	struct intel_sdvo *sdvo = adapter->algo_data;
> +	struct intel_sdvo_ddc *ddc = adapter->algo_data;
> +	struct intel_sdvo *sdvo = ddc->sdvo;
> +
>  	sdvo->i2c->lock_ops->unlock_bus(sdvo->i2c, flags);
>  }
>  
> @@ -3280,21 +3294,26 @@ static const struct i2c_lock_operations proxy_lock_ops = {
>  	.unlock_bus =  proxy_unlock_bus,
>  };
>  
> -static bool
> -intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo)
> +static int
> +intel_sdvo_init_ddc_proxy(struct intel_sdvo_ddc *ddc,
> +			  struct intel_sdvo *sdvo, int ddc_bus)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
>  	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
>  
> -	sdvo->ddc.owner = THIS_MODULE;
> -	sdvo->ddc.class = I2C_CLASS_DDC;
> -	snprintf(sdvo->ddc.name, I2C_NAME_SIZE, "SDVO DDC proxy");
> -	sdvo->ddc.dev.parent = &pdev->dev;
> -	sdvo->ddc.algo_data = sdvo;
> -	sdvo->ddc.algo = &intel_sdvo_ddc_proxy;
> -	sdvo->ddc.lock_ops = &proxy_lock_ops;
> +	ddc->sdvo = sdvo;
> +	ddc->ddc_bus = ddc_bus;
>  
> -	return i2c_add_adapter(&sdvo->ddc) == 0;
> +	ddc->ddc.owner = THIS_MODULE;
> +	ddc->ddc.class = I2C_CLASS_DDC;
> +	snprintf(ddc->ddc.name, I2C_NAME_SIZE, "SDVO %c DDC%d",
> +		 port_name(sdvo->base.port), ddc_bus);
> +	ddc->ddc.dev.parent = &pdev->dev;
> +	ddc->ddc.algo_data = ddc;
> +	ddc->ddc.algo = &intel_sdvo_ddc_proxy;
> +	ddc->ddc.lock_ops = &proxy_lock_ops;
> +
> +	return i2c_add_adapter(&ddc->ddc);
>  }
>  
>  static bool is_sdvo_port_valid(struct drm_i915_private *dev_priv, enum port port)
> @@ -3341,9 +3360,8 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
>  
>  	intel_sdvo->sdvo_reg = sdvo_reg;
>  	intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(intel_sdvo) >> 1;
> +
>  	intel_sdvo_select_i2c_bus(intel_sdvo);
> -	if (!intel_sdvo_init_ddc_proxy(intel_sdvo))
> -		goto err_i2c_bus;
>  
>  	/* Read the regs to test if we can talk to the device */
>  	for (i = 0; i < 0x40; i++) {
> @@ -3376,6 +3394,15 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
>  	intel_sdvo->colorimetry_cap =
>  		intel_sdvo_get_colorimetry_cap(intel_sdvo);
>  
> +	for (i = 0; i < ARRAY_SIZE(intel_sdvo->ddc); i++) {
> +		int ret;
> +
> +		ret = intel_sdvo_init_ddc_proxy(&intel_sdvo->ddc[i],
> +						intel_sdvo, i + 1);
> +		if (ret)
> +			goto err;
> +	}
> +
>  	if (!intel_sdvo_output_setup(intel_sdvo)) {
>  		drm_dbg_kms(&dev_priv->drm,
>  			    "SDVO output failed to setup on %s\n",
> @@ -3436,13 +3463,9 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
>  
>  err_output:
>  	intel_sdvo_output_cleanup(intel_sdvo);
> -
>  err:
> -	drm_encoder_cleanup(&intel_encoder->base);
> -	i2c_del_adapter(&intel_sdvo->ddc);
> -err_i2c_bus:
>  	intel_sdvo_unselect_i2c_bus(intel_sdvo);
> -	kfree(intel_sdvo);
> +	intel_sdvo_encoder_destroy(&intel_encoder->base);
>  
>  	return false;
>  }

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 13/13] drm/i915/sdvo: Print out the i2c pin and slave address
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 13/13] drm/i915/sdvo: Print out the i2c pin and slave address Ville Syrjala
@ 2023-07-06  8:38   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:38 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> To reduce the guesswork a bit let's print out the SDVO
> device i2c bus and slave address during init.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index d7edb5714c4c..f0494b9aefe5 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2616,6 +2616,10 @@ intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
>  	else
>  		pin = GMBUS_PIN_DPB;
>  
> +	drm_dbg_kms(&dev_priv->drm, "[ENCODER:%d:%s] I2C pin %d, slave addr 0x%x\n",
> +		    sdvo->base.base.base.id, sdvo->base.base.name,
> +		    pin, sdvo->slave_addr);
> +
>  	sdvo->i2c = intel_gmbus_get_adapter(dev_priv, pin);
>  
>  	/*

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 05/13] drm/i915: Fully populate crtc_state->dpll
  2023-07-05 20:21 ` [Intel-gfx] [PATCH 05/13] drm/i915: Fully populate crtc_state->dpll Ville Syrjala
@ 2023-07-06  8:41   ` Jani Nikula
  0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:41 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Call *_calc_dpll_params() even in cases where the encoder has
> computed the DPLL params for us.
>
> The SDVO TV output code doesn't populate crtc_state->dpll.dot
> leading to the dotclock getting calculated as zero, and that
> leads to all kinds of real problems. The g4x DP code also
> doesn't populate the derived dividers nor .vco, which could
> also create some confusion.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

It's entirely possible there are corner cases I missed, but overall
makes sense.

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

> ---
>  drivers/gpu/drm/i915/display/intel_dpll.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c b/drivers/gpu/drm/i915/display/intel_dpll.c
> index 71bfeea4cef2..2255ad651486 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll.c
> @@ -1182,6 +1182,8 @@ static int ilk_crtc_compute_clock(struct intel_atomic_state *state,
>  				refclk, NULL, &crtc_state->dpll))
>  		return -EINVAL;
>  
> +	i9xx_calc_dpll_params(refclk, &crtc_state->dpll);
> +
>  	ilk_compute_dpll(crtc_state, &crtc_state->dpll,
>  			 &crtc_state->dpll);
>  
> @@ -1256,6 +1258,8 @@ static int chv_crtc_compute_clock(struct intel_atomic_state *state,
>  				refclk, NULL, &crtc_state->dpll))
>  		return -EINVAL;
>  
> +	chv_calc_dpll_params(refclk, &crtc_state->dpll);
> +
>  	chv_compute_dpll(crtc_state);
>  
>  	/* FIXME this is a mess */
> @@ -1278,9 +1282,10 @@ static int vlv_crtc_compute_clock(struct intel_atomic_state *state,
>  
>  	if (!crtc_state->clock_set &&
>  	    !vlv_find_best_dpll(limit, crtc_state, crtc_state->port_clock,
> -				refclk, NULL, &crtc_state->dpll)) {
> +				refclk, NULL, &crtc_state->dpll))
>  		return -EINVAL;
> -	}
> +
> +	vlv_calc_dpll_params(refclk, &crtc_state->dpll);
>  
>  	vlv_compute_dpll(crtc_state);
>  
> @@ -1330,6 +1335,8 @@ static int g4x_crtc_compute_clock(struct intel_atomic_state *state,
>  				refclk, NULL, &crtc_state->dpll))
>  		return -EINVAL;
>  
> +	i9xx_calc_dpll_params(refclk, &crtc_state->dpll);
> +
>  	i9xx_compute_dpll(crtc_state, &crtc_state->dpll,
>  			  &crtc_state->dpll);
>  
> @@ -1368,6 +1375,8 @@ static int pnv_crtc_compute_clock(struct intel_atomic_state *state,
>  				refclk, NULL, &crtc_state->dpll))
>  		return -EINVAL;
>  
> +	pnv_calc_dpll_params(refclk, &crtc_state->dpll);
> +
>  	i9xx_compute_dpll(crtc_state, &crtc_state->dpll,
>  			  &crtc_state->dpll);
>  
> @@ -1404,6 +1413,8 @@ static int i9xx_crtc_compute_clock(struct intel_atomic_state *state,
>  				 refclk, NULL, &crtc_state->dpll))
>  		return -EINVAL;
>  
> +	i9xx_calc_dpll_params(refclk, &crtc_state->dpll);
> +
>  	i9xx_compute_dpll(crtc_state, &crtc_state->dpll,
>  			  &crtc_state->dpll);
>  
> @@ -1444,6 +1455,8 @@ static int i8xx_crtc_compute_clock(struct intel_atomic_state *state,
>  				 refclk, NULL, &crtc_state->dpll))
>  		return -EINVAL;
>  
> +	i9xx_calc_dpll_params(refclk, &crtc_state->dpll);
> +
>  	i8xx_compute_dpll(crtc_state, &crtc_state->dpll,
>  			  &crtc_state->dpll);

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes
  2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
                   ` (15 preceding siblings ...)
  2023-07-06  1:17 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
@ 2023-07-06  8:45 ` Jani Nikula
  16 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2023-07-06  8:45 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

On Wed, 05 Jul 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> I have plans to switch the whole driver over to using
> drm_connector_init_with_ddc(), and thus populate the
> sysfs "ddc" consistently. The biggest hurdle is the 
> SDVO DDC handling, so start by cleaning that up.

I support the goal of moving towards drm_connector_init_with_ddc(), and
after that, to drm_edid_read() where applicable.

I admit to being a notch less diligent in reviewing all the details of
legacy encoder code, but there are no obvious mistakes here that I could
spot, and overall it makes sense.

Thanks,
Jani.


>
> I also found some other issues with the SDVO code so
> some additional fixes are also included.
>
> Ville Syrjälä (13):
>   drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays
>   drm/i915/sdvo: Protect macro args
>   drm/i915/sdvo: s/sdvo_inputs_mask/sdvo_num_inputs/
>   drm/i915: Don't warn about zero N/P in *_calc_dpll_params()
>   drm/i915: Fully populate crtc_state->dpll
>   drm/i915/sdvo: Pick the TV dotclock from adjusted_mode
>   drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range
>   drm/i915/sdvo: Nuke attached_output tracking
>   drm/i915/sdvo: Initialize the encoder ealier
>   drm/i915/sdvo: Nuke the duplicate sdvo->port
>   drm/i915/sdvo: Get rid of the per-connector i2c symlink
>   drm/i915/sdvo: Rework DDC bus handling
>   drm/i915/sdvo: Print out the i2c pin and slave address
>
>  drivers/gpu/drm/i915/display/intel_dpll.c     |  54 ++-
>  drivers/gpu/drm/i915/display/intel_sdvo.c     | 357 +++++++++---------
>  .../gpu/drm/i915/display/intel_sdvo_regs.h    |   2 +-
>  3 files changed, 219 insertions(+), 194 deletions(-)

-- 
Jani Nikula, Intel Open Source Graphics Center

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

end of thread, other threads:[~2023-07-06  8:45 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-05 20:21 [Intel-gfx] [PATCH 00/13] drm/i915/sdvo: DDC rework and fixes Ville Syrjala
2023-07-05 20:21 ` [Intel-gfx] [PATCH 01/13] drm/i915/sdvo: Issue SetTargetOutput prior ot GetAttachedDisplays Ville Syrjala
2023-07-06  7:20   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 02/13] drm/i915/sdvo: Protect macro args Ville Syrjala
2023-07-06  7:20   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 03/13] drm/i915/sdvo: s/sdvo_inputs_mask/sdvo_num_inputs/ Ville Syrjala
2023-07-06  7:24   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 04/13] drm/i915: Don't warn about zero N/P in *_calc_dpll_params() Ville Syrjala
2023-07-06  8:17   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 05/13] drm/i915: Fully populate crtc_state->dpll Ville Syrjala
2023-07-06  8:41   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 06/13] drm/i915/sdvo: Pick the TV dotclock from adjusted_mode Ville Syrjala
2023-07-06  8:22   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 07/13] drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range Ville Syrjala
2023-07-06  8:22   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 08/13] drm/i915/sdvo: Nuke attached_output tracking Ville Syrjala
2023-07-06  8:24   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 09/13] drm/i915/sdvo: Initialize the encoder ealier Ville Syrjala
2023-07-06  8:28   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 10/13] drm/i915/sdvo: Nuke the duplicate sdvo->port Ville Syrjala
2023-07-06  8:29   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 11/13] drm/i915/sdvo: Get rid of the per-connector i2c symlink Ville Syrjala
2023-07-06  8:30   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 12/13] drm/i915/sdvo: Rework DDC bus handling Ville Syrjala
2023-07-06  8:38   ` Jani Nikula
2023-07-05 20:21 ` [Intel-gfx] [PATCH 13/13] drm/i915/sdvo: Print out the i2c pin and slave address Ville Syrjala
2023-07-06  8:38   ` Jani Nikula
2023-07-05 21:24 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915/sdvo: DDC rework and fixes Patchwork
2023-07-05 21:38 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-07-06  1:17 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2023-07-06  8:45 ` [Intel-gfx] [PATCH 00/13] " Jani Nikula

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