All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
@ 2018-05-16  8:01 Jani Nikula
  2018-05-16  9:29 ` ✓ Fi.CI.BAT: success for " Patchwork
                   ` (4 more replies)
  0 siblings, 5 replies; 14+ messages in thread
From: Jani Nikula @ 2018-05-16  8:01 UTC (permalink / raw)
  To: intel-gfx
  Cc: jani.nikula, Clint Taylor, David Weinehall, Rodrigo Vivi,
	Paulo Zanoni, Chris Wilson, Jim Bride, Jani Nikula,
	Joonas Lahtinen, # v4 . 14+

This reverts commit dc911f5bd8aacfcf8aabd5c26c88e04c837a938e.

Per the report, no matter what display mode you select with xrandr, the
i915 driver will always select the alternate fixed mode. For the
reporter this means that the display will always run at 40Hz which is
quite annoying. This may be due to the mode comparison.

But there are some other potential issues. The choice of alt_fixed_mode
seems dubious. It's the first non-preferred mode, but there are no
guarantees that the only difference would be refresh rate. Similarly,
there may be more than one preferred mode in the probed modes list, and
the commit changes the preferred mode selection to choose the last one
on the list instead of the first.

(Note that the probed modes list is the raw, unfiltered, unsorted list
of modes from drm_add_edid_modes(), not the pretty result after a
drm_helper_probe_single_connector_modes() call.)

Finally, we already have eerily similar code in place to find the
downclock mode for DRRS that seems like could be reused here.

Back to the drawing board.

Note: This is a hand-crafted revert due to conflicts. If it fails to
backport, please just try reverting the original commit directly.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105469
Reported-by: Rune Petersen <rune@megahurts.dk>
Reported-by: Mark Spencer <n7u4722r35@ynzlx.anonbox.net>
Fixes: dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode for eDP if available.")
Cc: Clint Taylor <clinton.a.taylor@intel.com>
Cc: David Weinehall <david.weinehall@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Cc: <stable@vger.kernel.org> # v4.14+
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_dp.c    | 38 +++++---------------------------------
 drivers/gpu/drm/i915/intel_drv.h   |  2 --
 drivers/gpu/drm/i915/intel_dsi.c   |  2 +-
 drivers/gpu/drm/i915/intel_dvo.c   |  2 +-
 drivers/gpu/drm/i915/intel_lvds.c  |  3 +--
 drivers/gpu/drm/i915/intel_panel.c |  6 ------
 6 files changed, 8 insertions(+), 45 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index dde92e4af5d3..8320f0e8e3be 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1679,23 +1679,6 @@ static int intel_dp_compute_bpp(struct intel_dp *intel_dp,
 	return bpp;
 }
 
-static bool intel_edp_compare_alt_mode(struct drm_display_mode *m1,
-				       struct drm_display_mode *m2)
-{
-	bool bres = false;
-
-	if (m1 && m2)
-		bres = (m1->hdisplay == m2->hdisplay &&
-			m1->hsync_start == m2->hsync_start &&
-			m1->hsync_end == m2->hsync_end &&
-			m1->htotal == m2->htotal &&
-			m1->vdisplay == m2->vdisplay &&
-			m1->vsync_start == m2->vsync_start &&
-			m1->vsync_end == m2->vsync_end &&
-			m1->vtotal == m2->vtotal);
-	return bres;
-}
-
 /* Adjust link config limits based on compliance test requests. */
 static void
 intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
@@ -1860,16 +1843,8 @@ intel_dp_compute_config(struct intel_encoder *encoder,
 		pipe_config->has_audio = intel_conn_state->force_audio == HDMI_AUDIO_ON;
 
 	if (intel_dp_is_edp(intel_dp) && intel_connector->panel.fixed_mode) {
-		struct drm_display_mode *panel_mode =
-			intel_connector->panel.alt_fixed_mode;
-		struct drm_display_mode *req_mode = &pipe_config->base.mode;
-
-		if (!intel_edp_compare_alt_mode(req_mode, panel_mode))
-			panel_mode = intel_connector->panel.fixed_mode;
-
-		drm_mode_debug_printmodeline(panel_mode);
-
-		intel_fixed_panel_mode(panel_mode, adjusted_mode);
+		intel_fixed_panel_mode(intel_connector->panel.fixed_mode,
+				       adjusted_mode);
 
 		if (INTEL_GEN(dev_priv) >= 9) {
 			int ret;
@@ -6159,7 +6134,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
 	struct drm_i915_private *dev_priv = to_i915(dev);
 	struct drm_connector *connector = &intel_connector->base;
 	struct drm_display_mode *fixed_mode = NULL;
-	struct drm_display_mode *alt_fixed_mode = NULL;
 	struct drm_display_mode *downclock_mode = NULL;
 	bool has_dpcd;
 	struct drm_display_mode *scan;
@@ -6214,14 +6188,13 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
 	}
 	intel_connector->edid = edid;
 
-	/* prefer fixed mode from EDID if available, save an alt mode also */
+	/* prefer fixed mode from EDID if available */
 	list_for_each_entry(scan, &connector->probed_modes, head) {
 		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
 			fixed_mode = drm_mode_duplicate(dev, scan);
 			downclock_mode = intel_dp_drrs_init(
 						intel_connector, fixed_mode);
-		} else if (!alt_fixed_mode) {
-			alt_fixed_mode = drm_mode_duplicate(dev, scan);
+			break;
 		}
 	}
 
@@ -6258,8 +6231,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
 			      pipe_name(pipe));
 	}
 
-	intel_panel_init(&intel_connector->panel, fixed_mode, alt_fixed_mode,
-			 downclock_mode);
+	intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode);
 	intel_connector->panel.backlight.power = intel_edp_backlight_power;
 	intel_panel_setup_backlight(connector, pipe);
 
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index d7dbca1aabff..0361130500a6 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -277,7 +277,6 @@ struct intel_encoder {
 
 struct intel_panel {
 	struct drm_display_mode *fixed_mode;
-	struct drm_display_mode *alt_fixed_mode;
 	struct drm_display_mode *downclock_mode;
 
 	/* backlight */
@@ -1850,7 +1849,6 @@ void intel_overlay_reset(struct drm_i915_private *dev_priv);
 /* intel_panel.c */
 int intel_panel_init(struct intel_panel *panel,
 		     struct drm_display_mode *fixed_mode,
-		     struct drm_display_mode *alt_fixed_mode,
 		     struct drm_display_mode *downclock_mode);
 void intel_panel_fini(struct intel_panel *panel);
 void intel_fixed_panel_mode(const struct drm_display_mode *fixed_mode,
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index 51a1d6868b1e..cf39ca90d887 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -1846,7 +1846,7 @@ void intel_dsi_init(struct drm_i915_private *dev_priv)
 	connector->display_info.width_mm = fixed_mode->width_mm;
 	connector->display_info.height_mm = fixed_mode->height_mm;
 
-	intel_panel_init(&intel_connector->panel, fixed_mode, NULL, NULL);
+	intel_panel_init(&intel_connector->panel, fixed_mode, NULL);
 	intel_panel_setup_backlight(connector, INVALID_PIPE);
 
 	intel_dsi_add_properties(intel_connector);
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index eb0c559b2715..a70d767313aa 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -536,7 +536,7 @@ void intel_dvo_init(struct drm_i915_private *dev_priv)
 			 */
 			intel_panel_init(&intel_connector->panel,
 					 intel_dvo_get_current_mode(intel_encoder),
-					 NULL, NULL);
+					 NULL);
 			intel_dvo->panel_wants_dither = true;
 		}
 
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 8691c86f579c..d8ece907ff54 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -1140,8 +1140,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
 out:
 	mutex_unlock(&dev->mode_config.mutex);
 
-	intel_panel_init(&intel_connector->panel, fixed_mode, NULL,
-			 downclock_mode);
+	intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode);
 	intel_panel_setup_backlight(connector, INVALID_PIPE);
 
 	lvds_encoder->is_dual_link = compute_is_dual_link_lvds(lvds_encoder);
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index 41d00b1603e3..b443278e569c 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -1928,13 +1928,11 @@ intel_panel_init_backlight_funcs(struct intel_panel *panel)
 
 int intel_panel_init(struct intel_panel *panel,
 		     struct drm_display_mode *fixed_mode,
-		     struct drm_display_mode *alt_fixed_mode,
 		     struct drm_display_mode *downclock_mode)
 {
 	intel_panel_init_backlight_funcs(panel);
 
 	panel->fixed_mode = fixed_mode;
-	panel->alt_fixed_mode = alt_fixed_mode;
 	panel->downclock_mode = downclock_mode;
 
 	return 0;
@@ -1948,10 +1946,6 @@ void intel_panel_fini(struct intel_panel *panel)
 	if (panel->fixed_mode)
 		drm_mode_destroy(intel_connector->base.dev, panel->fixed_mode);
 
-	if (panel->alt_fixed_mode)
-		drm_mode_destroy(intel_connector->base.dev,
-				panel->alt_fixed_mode);
-
 	if (panel->downclock_mode)
 		drm_mode_destroy(intel_connector->base.dev,
 				panel->downclock_mode);
-- 
2.11.0

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

* ✓ Fi.CI.BAT: success for Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-16  8:01 [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available." Jani Nikula
@ 2018-05-16  9:29 ` Patchwork
  2018-05-16 17:08 ` ✗ Fi.CI.IGT: failure " Patchwork
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2018-05-16  9:29 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
URL   : https://patchwork.freedesktop.org/series/43239/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4191 -> Patchwork_9011 =

== Summary - WARNING ==

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

  External URL: https://patchwork.freedesktop.org/api/1.0/series/43239/revisions/1/mbox/

== Possible new issues ==

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

  === IGT changes ===

    ==== Warnings ====

    igt@kms_force_connector_basic@force-edid:
      fi-snb-2520m:       SKIP -> PASS +3
      fi-ivb-3520m:       PASS -> SKIP +3

    
== Known issues ==

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

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_exec_suspend@basic-s4-devices:
      fi-glk-j4005:       PASS -> DMESG-WARN (fdo#106097) +2

    igt@kms_chamelium@dp-crc-fast:
      fi-kbl-7500u:       PASS -> DMESG-FAIL (fdo#103841)

    igt@kms_frontbuffer_tracking@basic:
      fi-hsw-4200u:       PASS -> DMESG-FAIL (fdo#102614, fdo#106103)

    
    ==== Possible fixes ====

    igt@drv_module_reload@basic-reload:
      fi-glk-j4005:       DMESG-WARN (fdo#106248) -> PASS

    igt@kms_flip@basic-flip-vs-wf_vblank:
      fi-hsw-4770:        FAIL (fdo#100368) -> PASS

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
      fi-bxt-dsi:         INCOMPLETE (fdo#103927) -> PASS

    
  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614
  fdo#103841 https://bugs.freedesktop.org/show_bug.cgi?id=103841
  fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
  fdo#106097 https://bugs.freedesktop.org/show_bug.cgi?id=106097
  fdo#106103 https://bugs.freedesktop.org/show_bug.cgi?id=106103
  fdo#106248 https://bugs.freedesktop.org/show_bug.cgi?id=106248


== Participating hosts (42 -> 37) ==

  Missing    (5): fi-ctg-p8600 fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-skl-6700hq 


== Build changes ==

    * Linux: CI_DRM_4191 -> Patchwork_9011

  CI_DRM_4191: 70daebf1a83c2ed6eff118d2a2806086c0c89027 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4484: b7432bf309d5d5a6e07e8a0d8b522302fb0b4502 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_9011: 364be7a8171d6875e83da63f4bbaecda3438d215 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4484: 62ef6b0db8967e7021fd3e0b57d03ff164b984fe @ git://anongit.freedesktop.org/piglit


== Linux commits ==

364be7a8171d Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."

== Logs ==

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

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

* ✗ Fi.CI.IGT: failure for Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-16  8:01 [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available." Jani Nikula
  2018-05-16  9:29 ` ✓ Fi.CI.BAT: success for " Patchwork
@ 2018-05-16 17:08 ` Patchwork
  2018-05-16 23:30 ` [Intel-gfx] [PATCH] " Dhinakaran Pandiyan
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2018-05-16 17:08 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
URL   : https://patchwork.freedesktop.org/series/43239/
State : failure

== Summary ==

= CI Bug Log - changes from CI_DRM_4191_full -> Patchwork_9011_full =

== Summary - FAILURE ==

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

  External URL: https://patchwork.freedesktop.org/api/1.0/series/43239/revisions/1/mbox/

== Possible new issues ==

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

  === IGT changes ===

    ==== Possible regressions ====

    igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
      shard-glk:          PASS -> FAIL

    
    ==== Warnings ====

    igt@gem_exec_schedule@deep-bsd1:
      shard-kbl:          PASS -> SKIP

    igt@pm_rc6_residency@rc6-accuracy:
      shard-kbl:          SKIP -> PASS

    
== Known issues ==

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

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_eio@in-flight-internal-immediate:
      shard-snb:          PASS -> DMESG-WARN (fdo#106523)

    igt@gem_eio@unwedge-stress:
      shard-glk:          PASS -> DMESG-WARN (fdo#106523)
      shard-apl:          PASS -> DMESG-WARN (fdo#106523) +2

    igt@gem_eio@wait-wedge-1us:
      shard-hsw:          PASS -> DMESG-WARN (fdo#106523)

    igt@kms_flip@flip-vs-expired-vblank:
      shard-hsw:          PASS -> FAIL (fdo#105707)
      shard-glk:          PASS -> FAIL (fdo#102887)

    igt@kms_flip@flip-vs-expired-vblank-interruptible:
      shard-glk:          PASS -> FAIL (fdo#102887, fdo#105363)

    igt@kms_flip@flip-vs-wf_vblank-interruptible:
      shard-hsw:          PASS -> FAIL (fdo#100368)

    igt@kms_flip@modeset-vs-vblank-race:
      shard-glk:          PASS -> FAIL (fdo#103060)

    igt@kms_flip@modeset-vs-vblank-race-interruptible:
      shard-hsw:          PASS -> FAIL (fdo#103060)

    igt@kms_flip_tiling@flip-y-tiled:
      shard-glk:          PASS -> FAIL (fdo#103822, fdo#104724)

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-pwrite:
      shard-glk:          PASS -> FAIL (fdo#104724, fdo#103167) +1

    
    ==== Possible fixes ====

    igt@gem_eio@in-flight-contexts-1us:
      shard-apl:          DMESG-WARN (fdo#106523) -> PASS +2
      shard-glk:          DMESG-WARN (fdo#106523) -> PASS

    igt@gem_eio@in-flight-immediate:
      shard-hsw:          DMESG-WARN (fdo#106523) -> PASS

    igt@gem_eio@in-flight-internal-10ms:
      shard-snb:          DMESG-WARN (fdo#106523) -> PASS

    igt@kms_atomic_transition@1x-modeset-transitions-nonblocking:
      shard-glk:          FAIL (fdo#105703) -> PASS

    igt@kms_cursor_legacy@flip-vs-cursor-toggle:
      shard-hsw:          FAIL (fdo#102670) -> PASS

    igt@kms_flip@2x-flip-vs-expired-vblank:
      shard-hsw:          FAIL (fdo#102887) -> PASS

    igt@kms_flip@plain-flip-ts-check-interruptible:
      shard-glk:          FAIL (fdo#100368) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-wc:
      shard-kbl:          DMESG-WARN (fdo#103558, fdo#105602) -> PASS +1

    
  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#102670 https://bugs.freedesktop.org/show_bug.cgi?id=102670
  fdo#102887 https://bugs.freedesktop.org/show_bug.cgi?id=102887
  fdo#103060 https://bugs.freedesktop.org/show_bug.cgi?id=103060
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#103822 https://bugs.freedesktop.org/show_bug.cgi?id=103822
  fdo#104724 https://bugs.freedesktop.org/show_bug.cgi?id=104724
  fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
  fdo#105703 https://bugs.freedesktop.org/show_bug.cgi?id=105703
  fdo#105707 https://bugs.freedesktop.org/show_bug.cgi?id=105707
  fdo#106523 https://bugs.freedesktop.org/show_bug.cgi?id=106523


== Participating hosts (5 -> 5) ==

  No changes in participating hosts


== Build changes ==

    * Linux: CI_DRM_4191 -> Patchwork_9011

  CI_DRM_4191: 70daebf1a83c2ed6eff118d2a2806086c0c89027 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4484: b7432bf309d5d5a6e07e8a0d8b522302fb0b4502 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_9011: 364be7a8171d6875e83da63f4bbaecda3438d215 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4484: 62ef6b0db8967e7021fd3e0b57d03ff164b984fe @ git://anongit.freedesktop.org/piglit

== Logs ==

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

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

* Re: [Intel-gfx] [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-16  8:01 [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available." Jani Nikula
  2018-05-16  9:29 ` ✓ Fi.CI.BAT: success for " Patchwork
  2018-05-16 17:08 ` ✗ Fi.CI.IGT: failure " Patchwork
@ 2018-05-16 23:30 ` Dhinakaran Pandiyan
  2018-05-17  7:19   ` Jani Nikula
  2018-05-18  7:19 ` ✓ Fi.CI.BAT: success for " Patchwork
  2018-05-18  8:10 ` ✗ Fi.CI.IGT: failure " Patchwork
  4 siblings, 1 reply; 14+ messages in thread
From: Dhinakaran Pandiyan @ 2018-05-16 23:30 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx; +Cc: Paulo Zanoni, Rodrigo Vivi, # v4 . 14+

On Wed, 2018-05-16 at 11:01 +0300, Jani Nikula wrote:
> This reverts commit dc911f5bd8aacfcf8aabd5c26c88e04c837a938e.
> 
> Per the report, no matter what display mode you select with xrandr,
> the
> i915 driver will always select the alternate fixed mode. For the
> reporter this means that the display will always run at 40Hz which is
> quite annoying. This may be due to the mode comparison.
> 
> But there are some other potential issues. The choice of
> alt_fixed_mode
> seems dubious. It's the first non-preferred mode, but there are no
> guarantees that the only difference would be refresh rate. Similarly,
> there may be more than one preferred mode in the probed modes list,
> and
> the commit changes the preferred mode selection to choose the last
> one
> on the list instead of the first.
> 
> (Note that the probed modes list is the raw, unfiltered, unsorted
> list
> of modes from drm_add_edid_modes(), not the pretty result after a
> drm_helper_probe_single_connector_modes() call.)
> 
> Finally, we already have eerily similar code in place to find the
> downclock mode for DRRS that seems like could be reused here.
> 
> Back to the drawing board.
> 
> Note: This is a hand-crafted revert due to conflicts. If it fails to
> backport, please just try reverting the original commit directly.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105469
> Reported-by: Rune Petersen <rune@megahurts.dk>
> Reported-by: Mark Spencer <n7u4722r35@ynzlx.anonbox.net>
> Fixes: dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode for
> eDP if available.")
> Cc: Clint Taylor <clinton.a.taylor@intel.com>
> Cc: David Weinehall <david.weinehall@linux.intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Jim Bride <jim.bride@linux.intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: <stable@vger.kernel.org> # v4.14+
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_dp.c    | 38 +++++-----------------------
> ----------
>  drivers/gpu/drm/i915/intel_drv.h   |  2 --
>  drivers/gpu/drm/i915/intel_dsi.c   |  2 +-
>  drivers/gpu/drm/i915/intel_dvo.c   |  2 +-
>  drivers/gpu/drm/i915/intel_lvds.c  |  3 +--
>  drivers/gpu/drm/i915/intel_panel.c |  6 ------
>  6 files changed, 8 insertions(+), 45 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dp.c
> b/drivers/gpu/drm/i915/intel_dp.c
> index dde92e4af5d3..8320f0e8e3be 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1679,23 +1679,6 @@ static int intel_dp_compute_bpp(struct
> intel_dp *intel_dp,
>  	return bpp;
>  }
>  
> -static bool intel_edp_compare_alt_mode(struct drm_display_mode *m1,
> -				       struct drm_display_mode *m2)
> -{
> -	bool bres = false;
> -
> -	if (m1 && m2)
> -		bres = (m1->hdisplay == m2->hdisplay &&
> -			m1->hsync_start == m2->hsync_start &&
> -			m1->hsync_end == m2->hsync_end &&
> -			m1->htotal == m2->htotal &&
> -			m1->vdisplay == m2->vdisplay &&
> -			m1->vsync_start == m2->vsync_start &&
> -			m1->vsync_end == m2->vsync_end &&
> -			m1->vtotal == m2->vtotal);
> -	return bres;
> -}
> -
>  /* Adjust link config limits based on compliance test requests. */
>  static void
>  intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
> @@ -1860,16 +1843,8 @@ intel_dp_compute_config(struct intel_encoder
> *encoder,
>  		pipe_config->has_audio = intel_conn_state-
> >force_audio == HDMI_AUDIO_ON;
>  
>  	if (intel_dp_is_edp(intel_dp) && intel_connector-
> >panel.fixed_mode) {
> -		struct drm_display_mode *panel_mode =
> -			intel_connector->panel.alt_fixed_mode;
> -		struct drm_display_mode *req_mode = &pipe_config-
> >base.mode;
> -
> -		if (!intel_edp_compare_alt_mode(req_mode,
> panel_mode))
> -			panel_mode = intel_connector-
> >panel.fixed_mode;
> -
> -		drm_mode_debug_printmodeline(panel_mode);
> -
> -		intel_fixed_panel_mode(panel_mode, adjusted_mode);
> +		intel_fixed_panel_mode(intel_connector-
> >panel.fixed_mode,
> +				       adjusted_mode);
>  
>  		if (INTEL_GEN(dev_priv) >= 9) {
>  			int ret;
> @@ -6159,7 +6134,6 @@ static bool intel_edp_init_connector(struct
> intel_dp *intel_dp,
>  	struct drm_i915_private *dev_priv = to_i915(dev);
>  	struct drm_connector *connector = &intel_connector->base;
>  	struct drm_display_mode *fixed_mode = NULL;
> -	struct drm_display_mode *alt_fixed_mode = NULL;
>  	struct drm_display_mode *downclock_mode = NULL;
>  	bool has_dpcd;
>  	struct drm_display_mode *scan;
> @@ -6214,14 +6188,13 @@ static bool intel_edp_init_connector(struct
> intel_dp *intel_dp,
>  	}
>  	intel_connector->edid = edid;
>  
> -	/* prefer fixed mode from EDID if available, save an alt
> mode also */
> +	/* prefer fixed mode from EDID if available */
>  	list_for_each_entry(scan, &connector->probed_modes, head) {
>  		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
>  			fixed_mode = drm_mode_duplicate(dev, scan);
>  			downclock_mode = intel_dp_drrs_init(
>  						intel_connector,
> fixed_mode);
> -		} else if (!alt_fixed_mode) {
> -			alt_fixed_mode = drm_mode_duplicate(dev,
> scan);
> +			break;

If multiple preferred modes are present, we'll now end up calling
drrs_init() only for the first. I see that this is what the original
code did but this revert does more than removing support for alternate
modes.

>  		}
>  	}
>  
> @@ -6258,8 +6231,7 @@ static bool intel_edp_init_connector(struct
> intel_dp *intel_dp,
>  			      pipe_name(pipe));
>  	}
>  
> -	intel_panel_init(&intel_connector->panel, fixed_mode,
> alt_fixed_mode,
> -			 downclock_mode);
> +	intel_panel_init(&intel_connector->panel, fixed_mode,
> downclock_mode);
>  	intel_connector->panel.backlight.power =
> intel_edp_backlight_power;
>  	intel_panel_setup_backlight(connector, pipe);
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index d7dbca1aabff..0361130500a6 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -277,7 +277,6 @@ struct intel_encoder {
>  
>  struct intel_panel {
>  	struct drm_display_mode *fixed_mode;
> -	struct drm_display_mode *alt_fixed_mode;
>  	struct drm_display_mode *downclock_mode;
>  
>  	/* backlight */
> @@ -1850,7 +1849,6 @@ void intel_overlay_reset(struct
> drm_i915_private *dev_priv);
>  /* intel_panel.c */
>  int intel_panel_init(struct intel_panel *panel,
>  		     struct drm_display_mode *fixed_mode,
> -		     struct drm_display_mode *alt_fixed_mode,
>  		     struct drm_display_mode *downclock_mode);
>  void intel_panel_fini(struct intel_panel *panel);
>  void intel_fixed_panel_mode(const struct drm_display_mode
> *fixed_mode,
> diff --git a/drivers/gpu/drm/i915/intel_dsi.c
> b/drivers/gpu/drm/i915/intel_dsi.c
> index 51a1d6868b1e..cf39ca90d887 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.c
> +++ b/drivers/gpu/drm/i915/intel_dsi.c
> @@ -1846,7 +1846,7 @@ void intel_dsi_init(struct drm_i915_private
> *dev_priv)
>  	connector->display_info.width_mm = fixed_mode->width_mm;
>  	connector->display_info.height_mm = fixed_mode->height_mm;
>  
> -	intel_panel_init(&intel_connector->panel, fixed_mode, NULL,
> NULL);
> +	intel_panel_init(&intel_connector->panel, fixed_mode, NULL);
>  	intel_panel_setup_backlight(connector, INVALID_PIPE);
>  
>  	intel_dsi_add_properties(intel_connector);
> diff --git a/drivers/gpu/drm/i915/intel_dvo.c
> b/drivers/gpu/drm/i915/intel_dvo.c
> index eb0c559b2715..a70d767313aa 100644
> --- a/drivers/gpu/drm/i915/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/intel_dvo.c
> @@ -536,7 +536,7 @@ void intel_dvo_init(struct drm_i915_private
> *dev_priv)
>  			 */
>  			intel_panel_init(&intel_connector->panel,
>  					 intel_dvo_get_current_mode(
> intel_encoder),
> -					 NULL, NULL);
> +					 NULL);
>  			intel_dvo->panel_wants_dither = true;
>  		}
>  
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c
> b/drivers/gpu/drm/i915/intel_lvds.c
> index 8691c86f579c..d8ece907ff54 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -1140,8 +1140,7 @@ void intel_lvds_init(struct drm_i915_private
> *dev_priv)
>  out:
>  	mutex_unlock(&dev->mode_config.mutex);
>  
> -	intel_panel_init(&intel_connector->panel, fixed_mode, NULL,
> -			 downclock_mode);
> +	intel_panel_init(&intel_connector->panel, fixed_mode,
> downclock_mode);
>  	intel_panel_setup_backlight(connector, INVALID_PIPE);
>  
>  	lvds_encoder->is_dual_link =
> compute_is_dual_link_lvds(lvds_encoder);
> diff --git a/drivers/gpu/drm/i915/intel_panel.c
> b/drivers/gpu/drm/i915/intel_panel.c
> index 41d00b1603e3..b443278e569c 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -1928,13 +1928,11 @@ intel_panel_init_backlight_funcs(struct
> intel_panel *panel)
>  
>  int intel_panel_init(struct intel_panel *panel,
>  		     struct drm_display_mode *fixed_mode,
> -		     struct drm_display_mode *alt_fixed_mode,
>  		     struct drm_display_mode *downclock_mode)
>  {
>  	intel_panel_init_backlight_funcs(panel);
>  
>  	panel->fixed_mode = fixed_mode;
> -	panel->alt_fixed_mode = alt_fixed_mode;
>  	panel->downclock_mode = downclock_mode;
>  
>  	return 0;
> @@ -1948,10 +1946,6 @@ void intel_panel_fini(struct intel_panel
> *panel)
>  	if (panel->fixed_mode)
>  		drm_mode_destroy(intel_connector->base.dev, panel-
> >fixed_mode);
>  
> -	if (panel->alt_fixed_mode)
> -		drm_mode_destroy(intel_connector->base.dev,
> -				panel->alt_fixed_mode);
> -
>  	if (panel->downclock_mode)
>  		drm_mode_destroy(intel_connector->base.dev,
>  				panel->downclock_mode);

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

* Re: [Intel-gfx] [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-16 23:30 ` [Intel-gfx] [PATCH] " Dhinakaran Pandiyan
@ 2018-05-17  7:19   ` Jani Nikula
  2018-05-17  7:33       ` Jani Nikula
  0 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2018-05-17  7:19 UTC (permalink / raw)
  To: dhinakaran.pandiyan, intel-gfx; +Cc: Paulo Zanoni, Rodrigo Vivi, # v4 . 14+

On Wed, 16 May 2018, Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> wrote:
> On Wed, 2018-05-16 at 11:01 +0300, Jani Nikula wrote:
>> This reverts commit dc911f5bd8aacfcf8aabd5c26c88e04c837a938e.
>> 
>> Per the report, no matter what display mode you select with xrandr,
>> the
>> i915 driver will always select the alternate fixed mode. For the
>> reporter this means that the display will always run at 40Hz which is
>> quite annoying. This may be due to the mode comparison.
>> 
>> But there are some other potential issues. The choice of
>> alt_fixed_mode
>> seems dubious. It's the first non-preferred mode, but there are no
>> guarantees that the only difference would be refresh rate. Similarly,
>> there may be more than one preferred mode in the probed modes list,
>> and
>> the commit changes the preferred mode selection to choose the last
>> one
>> on the list instead of the first.
>> 
>> (Note that the probed modes list is the raw, unfiltered, unsorted
>> list
>> of modes from drm_add_edid_modes(), not the pretty result after a
>> drm_helper_probe_single_connector_modes() call.)
>> 
>> Finally, we already have eerily similar code in place to find the
>> downclock mode for DRRS that seems like could be reused here.
>> 
>> Back to the drawing board.
>> 
>> Note: This is a hand-crafted revert due to conflicts. If it fails to
>> backport, please just try reverting the original commit directly.
>> 
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105469
>> Reported-by: Rune Petersen <rune@megahurts.dk>
>> Reported-by: Mark Spencer <n7u4722r35@ynzlx.anonbox.net>
>> Fixes: dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode for
>> eDP if available.")
>> Cc: Clint Taylor <clinton.a.taylor@intel.com>
>> Cc: David Weinehall <david.weinehall@linux.intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
>> Cc: Jani Nikula <jani.nikula@intel.com>
>> Cc: Chris Wilson <chris@chris-wilson.co.uk>
>> Cc: Jim Bride <jim.bride@linux.intel.com>
>> Cc: Jani Nikula <jani.nikula@linux.intel.com>
>> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
>> Cc: intel-gfx@lists.freedesktop.org
>> Cc: <stable@vger.kernel.org> # v4.14+
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>  drivers/gpu/drm/i915/intel_dp.c    | 38 +++++-----------------------
>> ----------
>>  drivers/gpu/drm/i915/intel_drv.h   |  2 --
>>  drivers/gpu/drm/i915/intel_dsi.c   |  2 +-
>>  drivers/gpu/drm/i915/intel_dvo.c   |  2 +-
>>  drivers/gpu/drm/i915/intel_lvds.c  |  3 +--
>>  drivers/gpu/drm/i915/intel_panel.c |  6 ------
>>  6 files changed, 8 insertions(+), 45 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/i915/intel_dp.c
>> b/drivers/gpu/drm/i915/intel_dp.c
>> index dde92e4af5d3..8320f0e8e3be 100644
>> --- a/drivers/gpu/drm/i915/intel_dp.c
>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>> @@ -1679,23 +1679,6 @@ static int intel_dp_compute_bpp(struct
>> intel_dp *intel_dp,
>>  	return bpp;
>>  }
>>  
>> -static bool intel_edp_compare_alt_mode(struct drm_display_mode *m1,
>> -				       struct drm_display_mode *m2)
>> -{
>> -	bool bres = false;
>> -
>> -	if (m1 && m2)
>> -		bres = (m1->hdisplay == m2->hdisplay &&
>> -			m1->hsync_start == m2->hsync_start &&
>> -			m1->hsync_end == m2->hsync_end &&
>> -			m1->htotal == m2->htotal &&
>> -			m1->vdisplay == m2->vdisplay &&
>> -			m1->vsync_start == m2->vsync_start &&
>> -			m1->vsync_end == m2->vsync_end &&
>> -			m1->vtotal == m2->vtotal);
>> -	return bres;
>> -}
>> -
>>  /* Adjust link config limits based on compliance test requests. */
>>  static void
>>  intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
>> @@ -1860,16 +1843,8 @@ intel_dp_compute_config(struct intel_encoder
>> *encoder,
>>  		pipe_config->has_audio = intel_conn_state-
>> >force_audio == HDMI_AUDIO_ON;
>>  
>>  	if (intel_dp_is_edp(intel_dp) && intel_connector-
>> >panel.fixed_mode) {
>> -		struct drm_display_mode *panel_mode =
>> -			intel_connector->panel.alt_fixed_mode;
>> -		struct drm_display_mode *req_mode = &pipe_config-
>> >base.mode;
>> -
>> -		if (!intel_edp_compare_alt_mode(req_mode,
>> panel_mode))
>> -			panel_mode = intel_connector-
>> >panel.fixed_mode;
>> -
>> -		drm_mode_debug_printmodeline(panel_mode);
>> -
>> -		intel_fixed_panel_mode(panel_mode, adjusted_mode);
>> +		intel_fixed_panel_mode(intel_connector-
>> >panel.fixed_mode,
>> +				       adjusted_mode);
>>  
>>  		if (INTEL_GEN(dev_priv) >= 9) {
>>  			int ret;
>> @@ -6159,7 +6134,6 @@ static bool intel_edp_init_connector(struct
>> intel_dp *intel_dp,
>>  	struct drm_i915_private *dev_priv = to_i915(dev);
>>  	struct drm_connector *connector = &intel_connector->base;
>>  	struct drm_display_mode *fixed_mode = NULL;
>> -	struct drm_display_mode *alt_fixed_mode = NULL;
>>  	struct drm_display_mode *downclock_mode = NULL;
>>  	bool has_dpcd;
>>  	struct drm_display_mode *scan;
>> @@ -6214,14 +6188,13 @@ static bool intel_edp_init_connector(struct
>> intel_dp *intel_dp,
>>  	}
>>  	intel_connector->edid = edid;
>>  
>> -	/* prefer fixed mode from EDID if available, save an alt
>> mode also */
>> +	/* prefer fixed mode from EDID if available */
>>  	list_for_each_entry(scan, &connector->probed_modes, head) {
>>  		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
>>  			fixed_mode = drm_mode_duplicate(dev, scan);
>>  			downclock_mode = intel_dp_drrs_init(
>>  						intel_connector,
>> fixed_mode);
>> -		} else if (!alt_fixed_mode) {
>> -			alt_fixed_mode = drm_mode_duplicate(dev,
>> scan);
>> +			break;
>
> If multiple preferred modes are present, we'll now end up calling
> drrs_init() only for the first. I see that this is what the original
> code did but this revert does more than removing support for alternate
> modes.

It boils down to which preferred mode is *the* preferred mode. I think
the original code was, uh, preferrable. Note that drrs init scans the
entire list of modes again to find the same size mode with the lowest
refresh rate.

BR,
Jani.

>
>>  		}
>>  	}
>>  
>> @@ -6258,8 +6231,7 @@ static bool intel_edp_init_connector(struct
>> intel_dp *intel_dp,
>>  			      pipe_name(pipe));
>>  	}
>>  
>> -	intel_panel_init(&intel_connector->panel, fixed_mode,
>> alt_fixed_mode,
>> -			 downclock_mode);
>> +	intel_panel_init(&intel_connector->panel, fixed_mode,
>> downclock_mode);
>>  	intel_connector->panel.backlight.power =
>> intel_edp_backlight_power;
>>  	intel_panel_setup_backlight(connector, pipe);
>>  
>> diff --git a/drivers/gpu/drm/i915/intel_drv.h
>> b/drivers/gpu/drm/i915/intel_drv.h
>> index d7dbca1aabff..0361130500a6 100644
>> --- a/drivers/gpu/drm/i915/intel_drv.h
>> +++ b/drivers/gpu/drm/i915/intel_drv.h
>> @@ -277,7 +277,6 @@ struct intel_encoder {
>>  
>>  struct intel_panel {
>>  	struct drm_display_mode *fixed_mode;
>> -	struct drm_display_mode *alt_fixed_mode;
>>  	struct drm_display_mode *downclock_mode;
>>  
>>  	/* backlight */
>> @@ -1850,7 +1849,6 @@ void intel_overlay_reset(struct
>> drm_i915_private *dev_priv);
>>  /* intel_panel.c */
>>  int intel_panel_init(struct intel_panel *panel,
>>  		     struct drm_display_mode *fixed_mode,
>> -		     struct drm_display_mode *alt_fixed_mode,
>>  		     struct drm_display_mode *downclock_mode);
>>  void intel_panel_fini(struct intel_panel *panel);
>>  void intel_fixed_panel_mode(const struct drm_display_mode
>> *fixed_mode,
>> diff --git a/drivers/gpu/drm/i915/intel_dsi.c
>> b/drivers/gpu/drm/i915/intel_dsi.c
>> index 51a1d6868b1e..cf39ca90d887 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi.c
>> @@ -1846,7 +1846,7 @@ void intel_dsi_init(struct drm_i915_private
>> *dev_priv)
>>  	connector->display_info.width_mm = fixed_mode->width_mm;
>>  	connector->display_info.height_mm = fixed_mode->height_mm;
>>  
>> -	intel_panel_init(&intel_connector->panel, fixed_mode, NULL,
>> NULL);
>> +	intel_panel_init(&intel_connector->panel, fixed_mode, NULL);
>>  	intel_panel_setup_backlight(connector, INVALID_PIPE);
>>  
>>  	intel_dsi_add_properties(intel_connector);
>> diff --git a/drivers/gpu/drm/i915/intel_dvo.c
>> b/drivers/gpu/drm/i915/intel_dvo.c
>> index eb0c559b2715..a70d767313aa 100644
>> --- a/drivers/gpu/drm/i915/intel_dvo.c
>> +++ b/drivers/gpu/drm/i915/intel_dvo.c
>> @@ -536,7 +536,7 @@ void intel_dvo_init(struct drm_i915_private
>> *dev_priv)
>>  			 */
>>  			intel_panel_init(&intel_connector->panel,
>>  					 intel_dvo_get_current_mode(
>> intel_encoder),
>> -					 NULL, NULL);
>> +					 NULL);
>>  			intel_dvo->panel_wants_dither = true;
>>  		}
>>  
>> diff --git a/drivers/gpu/drm/i915/intel_lvds.c
>> b/drivers/gpu/drm/i915/intel_lvds.c
>> index 8691c86f579c..d8ece907ff54 100644
>> --- a/drivers/gpu/drm/i915/intel_lvds.c
>> +++ b/drivers/gpu/drm/i915/intel_lvds.c
>> @@ -1140,8 +1140,7 @@ void intel_lvds_init(struct drm_i915_private
>> *dev_priv)
>>  out:
>>  	mutex_unlock(&dev->mode_config.mutex);
>>  
>> -	intel_panel_init(&intel_connector->panel, fixed_mode, NULL,
>> -			 downclock_mode);
>> +	intel_panel_init(&intel_connector->panel, fixed_mode,
>> downclock_mode);
>>  	intel_panel_setup_backlight(connector, INVALID_PIPE);
>>  
>>  	lvds_encoder->is_dual_link =
>> compute_is_dual_link_lvds(lvds_encoder);
>> diff --git a/drivers/gpu/drm/i915/intel_panel.c
>> b/drivers/gpu/drm/i915/intel_panel.c
>> index 41d00b1603e3..b443278e569c 100644
>> --- a/drivers/gpu/drm/i915/intel_panel.c
>> +++ b/drivers/gpu/drm/i915/intel_panel.c
>> @@ -1928,13 +1928,11 @@ intel_panel_init_backlight_funcs(struct
>> intel_panel *panel)
>>  
>>  int intel_panel_init(struct intel_panel *panel,
>>  		     struct drm_display_mode *fixed_mode,
>> -		     struct drm_display_mode *alt_fixed_mode,
>>  		     struct drm_display_mode *downclock_mode)
>>  {
>>  	intel_panel_init_backlight_funcs(panel);
>>  
>>  	panel->fixed_mode = fixed_mode;
>> -	panel->alt_fixed_mode = alt_fixed_mode;
>>  	panel->downclock_mode = downclock_mode;
>>  
>>  	return 0;
>> @@ -1948,10 +1946,6 @@ void intel_panel_fini(struct intel_panel
>> *panel)
>>  	if (panel->fixed_mode)
>>  		drm_mode_destroy(intel_connector->base.dev, panel-
>> >fixed_mode);
>>  
>> -	if (panel->alt_fixed_mode)
>> -		drm_mode_destroy(intel_connector->base.dev,
>> -				panel->alt_fixed_mode);
>> -
>>  	if (panel->downclock_mode)
>>  		drm_mode_destroy(intel_connector->base.dev,
>>  				panel->downclock_mode);

-- 
Jani Nikula, Intel Open Source Technology Center

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

* Re: [Intel-gfx] [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-17  7:19   ` Jani Nikula
@ 2018-05-17  7:33       ` Jani Nikula
  0 siblings, 0 replies; 14+ messages in thread
From: Jani Nikula @ 2018-05-17  7:33 UTC (permalink / raw)
  To: dhinakaran.pandiyan, intel-gfx; +Cc: Paulo Zanoni, Rodrigo Vivi, # v4 . 14+

On Thu, 17 May 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> On Wed, 16 May 2018, Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> wrote:
>> On Wed, 2018-05-16 at 11:01 +0300, Jani Nikula wrote:
>>> This reverts commit dc911f5bd8aacfcf8aabd5c26c88e04c837a938e.
>>> 
>>> Per the report, no matter what display mode you select with xrandr,
>>> the
>>> i915 driver will always select the alternate fixed mode. For the
>>> reporter this means that the display will always run at 40Hz which is
>>> quite annoying. This may be due to the mode comparison.
>>> 
>>> But there are some other potential issues. The choice of
>>> alt_fixed_mode
>>> seems dubious. It's the first non-preferred mode, but there are no
>>> guarantees that the only difference would be refresh rate. Similarly,
>>> there may be more than one preferred mode in the probed modes list,
>>> and
>>> the commit changes the preferred mode selection to choose the last
>>> one
>>> on the list instead of the first.
>>> 
>>> (Note that the probed modes list is the raw, unfiltered, unsorted
>>> list
>>> of modes from drm_add_edid_modes(), not the pretty result after a
>>> drm_helper_probe_single_connector_modes() call.)
>>> 
>>> Finally, we already have eerily similar code in place to find the
>>> downclock mode for DRRS that seems like could be reused here.
>>> 
>>> Back to the drawing board.
>>> 
>>> Note: This is a hand-crafted revert due to conflicts. If it fails to
>>> backport, please just try reverting the original commit directly.
>>> 
>>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105469
>>> Reported-by: Rune Petersen <rune@megahurts.dk>
>>> Reported-by: Mark Spencer <n7u4722r35@ynzlx.anonbox.net>
>>> Fixes: dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode for
>>> eDP if available.")
>>> Cc: Clint Taylor <clinton.a.taylor@intel.com>
>>> Cc: David Weinehall <david.weinehall@linux.intel.com>
>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
>>> Cc: Jani Nikula <jani.nikula@intel.com>
>>> Cc: Chris Wilson <chris@chris-wilson.co.uk>
>>> Cc: Jim Bride <jim.bride@linux.intel.com>
>>> Cc: Jani Nikula <jani.nikula@linux.intel.com>
>>> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
>>> Cc: intel-gfx@lists.freedesktop.org
>>> Cc: <stable@vger.kernel.org> # v4.14+
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>> ---
>>>  drivers/gpu/drm/i915/intel_dp.c    | 38 +++++-----------------------
>>> ----------
>>>  drivers/gpu/drm/i915/intel_drv.h   |  2 --
>>>  drivers/gpu/drm/i915/intel_dsi.c   |  2 +-
>>>  drivers/gpu/drm/i915/intel_dvo.c   |  2 +-
>>>  drivers/gpu/drm/i915/intel_lvds.c  |  3 +--
>>>  drivers/gpu/drm/i915/intel_panel.c |  6 ------
>>>  6 files changed, 8 insertions(+), 45 deletions(-)
>>> 
>>> diff --git a/drivers/gpu/drm/i915/intel_dp.c
>>> b/drivers/gpu/drm/i915/intel_dp.c
>>> index dde92e4af5d3..8320f0e8e3be 100644
>>> --- a/drivers/gpu/drm/i915/intel_dp.c
>>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>>> @@ -1679,23 +1679,6 @@ static int intel_dp_compute_bpp(struct
>>> intel_dp *intel_dp,
>>>  	return bpp;
>>>  }
>>>  
>>> -static bool intel_edp_compare_alt_mode(struct drm_display_mode *m1,
>>> -				       struct drm_display_mode *m2)
>>> -{
>>> -	bool bres = false;
>>> -
>>> -	if (m1 && m2)
>>> -		bres = (m1->hdisplay == m2->hdisplay &&
>>> -			m1->hsync_start == m2->hsync_start &&
>>> -			m1->hsync_end == m2->hsync_end &&
>>> -			m1->htotal == m2->htotal &&
>>> -			m1->vdisplay == m2->vdisplay &&
>>> -			m1->vsync_start == m2->vsync_start &&
>>> -			m1->vsync_end == m2->vsync_end &&
>>> -			m1->vtotal == m2->vtotal);
>>> -	return bres;
>>> -}
>>> -
>>>  /* Adjust link config limits based on compliance test requests. */
>>>  static void
>>>  intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
>>> @@ -1860,16 +1843,8 @@ intel_dp_compute_config(struct intel_encoder
>>> *encoder,
>>>  		pipe_config->has_audio = intel_conn_state-
>>> >force_audio == HDMI_AUDIO_ON;
>>>  
>>>  	if (intel_dp_is_edp(intel_dp) && intel_connector-
>>> >panel.fixed_mode) {
>>> -		struct drm_display_mode *panel_mode =
>>> -			intel_connector->panel.alt_fixed_mode;
>>> -		struct drm_display_mode *req_mode = &pipe_config-
>>> >base.mode;
>>> -
>>> -		if (!intel_edp_compare_alt_mode(req_mode,
>>> panel_mode))
>>> -			panel_mode = intel_connector-
>>> >panel.fixed_mode;
>>> -
>>> -		drm_mode_debug_printmodeline(panel_mode);
>>> -
>>> -		intel_fixed_panel_mode(panel_mode, adjusted_mode);
>>> +		intel_fixed_panel_mode(intel_connector-
>>> >panel.fixed_mode,
>>> +				       adjusted_mode);
>>>  
>>>  		if (INTEL_GEN(dev_priv) >= 9) {
>>>  			int ret;
>>> @@ -6159,7 +6134,6 @@ static bool intel_edp_init_connector(struct
>>> intel_dp *intel_dp,
>>>  	struct drm_i915_private *dev_priv = to_i915(dev);
>>>  	struct drm_connector *connector = &intel_connector->base;
>>>  	struct drm_display_mode *fixed_mode = NULL;
>>> -	struct drm_display_mode *alt_fixed_mode = NULL;
>>>  	struct drm_display_mode *downclock_mode = NULL;
>>>  	bool has_dpcd;
>>>  	struct drm_display_mode *scan;
>>> @@ -6214,14 +6188,13 @@ static bool intel_edp_init_connector(struct
>>> intel_dp *intel_dp,
>>>  	}
>>>  	intel_connector->edid = edid;
>>>  
>>> -	/* prefer fixed mode from EDID if available, save an alt
>>> mode also */
>>> +	/* prefer fixed mode from EDID if available */
>>>  	list_for_each_entry(scan, &connector->probed_modes, head) {
>>>  		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
>>>  			fixed_mode = drm_mode_duplicate(dev, scan);
>>>  			downclock_mode = intel_dp_drrs_init(
>>>  						intel_connector,
>>> fixed_mode);
>>> -		} else if (!alt_fixed_mode) {
>>> -			alt_fixed_mode = drm_mode_duplicate(dev,
>>> scan);
>>> +			break;
>>
>> If multiple preferred modes are present, we'll now end up calling
>> drrs_init() only for the first. I see that this is what the original
>> code did but this revert does more than removing support for alternate
>> modes.
>
> It boils down to which preferred mode is *the* preferred mode. I think
> the original code was, uh, preferrable. Note that drrs init scans the
> entire list of modes again to find the same size mode with the lowest
> refresh rate.

Moreover, as you can see, the original alt mode commit had more subtle
changes than catches the eye, it caused regressions, and I feel pretty
strongly about getting back to the drawing board and starting over with
a clean slate than trying to tweak it when we are quite frankly way
overdue with the revert. If after that you think the drrs/downclock
selection needs tweaking, let's do that.

BR,
Jani.


>
> BR,
> Jani.
>
>>
>>>  		}
>>>  	}
>>>  
>>> @@ -6258,8 +6231,7 @@ static bool intel_edp_init_connector(struct
>>> intel_dp *intel_dp,
>>>  			      pipe_name(pipe));
>>>  	}
>>>  
>>> -	intel_panel_init(&intel_connector->panel, fixed_mode,
>>> alt_fixed_mode,
>>> -			 downclock_mode);
>>> +	intel_panel_init(&intel_connector->panel, fixed_mode,
>>> downclock_mode);
>>>  	intel_connector->panel.backlight.power =
>>> intel_edp_backlight_power;
>>>  	intel_panel_setup_backlight(connector, pipe);
>>>  
>>> diff --git a/drivers/gpu/drm/i915/intel_drv.h
>>> b/drivers/gpu/drm/i915/intel_drv.h
>>> index d7dbca1aabff..0361130500a6 100644
>>> --- a/drivers/gpu/drm/i915/intel_drv.h
>>> +++ b/drivers/gpu/drm/i915/intel_drv.h
>>> @@ -277,7 +277,6 @@ struct intel_encoder {
>>>  
>>>  struct intel_panel {
>>>  	struct drm_display_mode *fixed_mode;
>>> -	struct drm_display_mode *alt_fixed_mode;
>>>  	struct drm_display_mode *downclock_mode;
>>>  
>>>  	/* backlight */
>>> @@ -1850,7 +1849,6 @@ void intel_overlay_reset(struct
>>> drm_i915_private *dev_priv);
>>>  /* intel_panel.c */
>>>  int intel_panel_init(struct intel_panel *panel,
>>>  		     struct drm_display_mode *fixed_mode,
>>> -		     struct drm_display_mode *alt_fixed_mode,
>>>  		     struct drm_display_mode *downclock_mode);
>>>  void intel_panel_fini(struct intel_panel *panel);
>>>  void intel_fixed_panel_mode(const struct drm_display_mode
>>> *fixed_mode,
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi.c
>>> b/drivers/gpu/drm/i915/intel_dsi.c
>>> index 51a1d6868b1e..cf39ca90d887 100644
>>> --- a/drivers/gpu/drm/i915/intel_dsi.c
>>> +++ b/drivers/gpu/drm/i915/intel_dsi.c
>>> @@ -1846,7 +1846,7 @@ void intel_dsi_init(struct drm_i915_private
>>> *dev_priv)
>>>  	connector->display_info.width_mm = fixed_mode->width_mm;
>>>  	connector->display_info.height_mm = fixed_mode->height_mm;
>>>  
>>> -	intel_panel_init(&intel_connector->panel, fixed_mode, NULL,
>>> NULL);
>>> +	intel_panel_init(&intel_connector->panel, fixed_mode, NULL);
>>>  	intel_panel_setup_backlight(connector, INVALID_PIPE);
>>>  
>>>  	intel_dsi_add_properties(intel_connector);
>>> diff --git a/drivers/gpu/drm/i915/intel_dvo.c
>>> b/drivers/gpu/drm/i915/intel_dvo.c
>>> index eb0c559b2715..a70d767313aa 100644
>>> --- a/drivers/gpu/drm/i915/intel_dvo.c
>>> +++ b/drivers/gpu/drm/i915/intel_dvo.c
>>> @@ -536,7 +536,7 @@ void intel_dvo_init(struct drm_i915_private
>>> *dev_priv)
>>>  			 */
>>>  			intel_panel_init(&intel_connector->panel,
>>>  					 intel_dvo_get_current_mode(
>>> intel_encoder),
>>> -					 NULL, NULL);
>>> +					 NULL);
>>>  			intel_dvo->panel_wants_dither = true;
>>>  		}
>>>  
>>> diff --git a/drivers/gpu/drm/i915/intel_lvds.c
>>> b/drivers/gpu/drm/i915/intel_lvds.c
>>> index 8691c86f579c..d8ece907ff54 100644
>>> --- a/drivers/gpu/drm/i915/intel_lvds.c
>>> +++ b/drivers/gpu/drm/i915/intel_lvds.c
>>> @@ -1140,8 +1140,7 @@ void intel_lvds_init(struct drm_i915_private
>>> *dev_priv)
>>>  out:
>>>  	mutex_unlock(&dev->mode_config.mutex);
>>>  
>>> -	intel_panel_init(&intel_connector->panel, fixed_mode, NULL,
>>> -			 downclock_mode);
>>> +	intel_panel_init(&intel_connector->panel, fixed_mode,
>>> downclock_mode);
>>>  	intel_panel_setup_backlight(connector, INVALID_PIPE);
>>>  
>>>  	lvds_encoder->is_dual_link =
>>> compute_is_dual_link_lvds(lvds_encoder);
>>> diff --git a/drivers/gpu/drm/i915/intel_panel.c
>>> b/drivers/gpu/drm/i915/intel_panel.c
>>> index 41d00b1603e3..b443278e569c 100644
>>> --- a/drivers/gpu/drm/i915/intel_panel.c
>>> +++ b/drivers/gpu/drm/i915/intel_panel.c
>>> @@ -1928,13 +1928,11 @@ intel_panel_init_backlight_funcs(struct
>>> intel_panel *panel)
>>>  
>>>  int intel_panel_init(struct intel_panel *panel,
>>>  		     struct drm_display_mode *fixed_mode,
>>> -		     struct drm_display_mode *alt_fixed_mode,
>>>  		     struct drm_display_mode *downclock_mode)
>>>  {
>>>  	intel_panel_init_backlight_funcs(panel);
>>>  
>>>  	panel->fixed_mode = fixed_mode;
>>> -	panel->alt_fixed_mode = alt_fixed_mode;
>>>  	panel->downclock_mode = downclock_mode;
>>>  
>>>  	return 0;
>>> @@ -1948,10 +1946,6 @@ void intel_panel_fini(struct intel_panel
>>> *panel)
>>>  	if (panel->fixed_mode)
>>>  		drm_mode_destroy(intel_connector->base.dev, panel-
>>> >fixed_mode);
>>>  
>>> -	if (panel->alt_fixed_mode)
>>> -		drm_mode_destroy(intel_connector->base.dev,
>>> -				panel->alt_fixed_mode);
>>> -
>>>  	if (panel->downclock_mode)
>>>  		drm_mode_destroy(intel_connector->base.dev,
>>>  				panel->downclock_mode);

-- 
Jani Nikula, Intel Open Source Technology Center

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

* Re: [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
@ 2018-05-17  7:33       ` Jani Nikula
  0 siblings, 0 replies; 14+ messages in thread
From: Jani Nikula @ 2018-05-17  7:33 UTC (permalink / raw)
  To: dhinakaran.pandiyan, intel-gfx; +Cc: Paulo Zanoni, # v4 . 14+, Rodrigo Vivi

On Thu, 17 May 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> On Wed, 16 May 2018, Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> wrote:
>> On Wed, 2018-05-16 at 11:01 +0300, Jani Nikula wrote:
>>> This reverts commit dc911f5bd8aacfcf8aabd5c26c88e04c837a938e.
>>> 
>>> Per the report, no matter what display mode you select with xrandr,
>>> the
>>> i915 driver will always select the alternate fixed mode. For the
>>> reporter this means that the display will always run at 40Hz which is
>>> quite annoying. This may be due to the mode comparison.
>>> 
>>> But there are some other potential issues. The choice of
>>> alt_fixed_mode
>>> seems dubious. It's the first non-preferred mode, but there are no
>>> guarantees that the only difference would be refresh rate. Similarly,
>>> there may be more than one preferred mode in the probed modes list,
>>> and
>>> the commit changes the preferred mode selection to choose the last
>>> one
>>> on the list instead of the first.
>>> 
>>> (Note that the probed modes list is the raw, unfiltered, unsorted
>>> list
>>> of modes from drm_add_edid_modes(), not the pretty result after a
>>> drm_helper_probe_single_connector_modes() call.)
>>> 
>>> Finally, we already have eerily similar code in place to find the
>>> downclock mode for DRRS that seems like could be reused here.
>>> 
>>> Back to the drawing board.
>>> 
>>> Note: This is a hand-crafted revert due to conflicts. If it fails to
>>> backport, please just try reverting the original commit directly.
>>> 
>>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105469
>>> Reported-by: Rune Petersen <rune@megahurts.dk>
>>> Reported-by: Mark Spencer <n7u4722r35@ynzlx.anonbox.net>
>>> Fixes: dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode for
>>> eDP if available.")
>>> Cc: Clint Taylor <clinton.a.taylor@intel.com>
>>> Cc: David Weinehall <david.weinehall@linux.intel.com>
>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
>>> Cc: Jani Nikula <jani.nikula@intel.com>
>>> Cc: Chris Wilson <chris@chris-wilson.co.uk>
>>> Cc: Jim Bride <jim.bride@linux.intel.com>
>>> Cc: Jani Nikula <jani.nikula@linux.intel.com>
>>> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
>>> Cc: intel-gfx@lists.freedesktop.org
>>> Cc: <stable@vger.kernel.org> # v4.14+
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>> ---
>>>  drivers/gpu/drm/i915/intel_dp.c    | 38 +++++-----------------------
>>> ----------
>>>  drivers/gpu/drm/i915/intel_drv.h   |  2 --
>>>  drivers/gpu/drm/i915/intel_dsi.c   |  2 +-
>>>  drivers/gpu/drm/i915/intel_dvo.c   |  2 +-
>>>  drivers/gpu/drm/i915/intel_lvds.c  |  3 +--
>>>  drivers/gpu/drm/i915/intel_panel.c |  6 ------
>>>  6 files changed, 8 insertions(+), 45 deletions(-)
>>> 
>>> diff --git a/drivers/gpu/drm/i915/intel_dp.c
>>> b/drivers/gpu/drm/i915/intel_dp.c
>>> index dde92e4af5d3..8320f0e8e3be 100644
>>> --- a/drivers/gpu/drm/i915/intel_dp.c
>>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>>> @@ -1679,23 +1679,6 @@ static int intel_dp_compute_bpp(struct
>>> intel_dp *intel_dp,
>>>  	return bpp;
>>>  }
>>>  
>>> -static bool intel_edp_compare_alt_mode(struct drm_display_mode *m1,
>>> -				       struct drm_display_mode *m2)
>>> -{
>>> -	bool bres = false;
>>> -
>>> -	if (m1 && m2)
>>> -		bres = (m1->hdisplay == m2->hdisplay &&
>>> -			m1->hsync_start == m2->hsync_start &&
>>> -			m1->hsync_end == m2->hsync_end &&
>>> -			m1->htotal == m2->htotal &&
>>> -			m1->vdisplay == m2->vdisplay &&
>>> -			m1->vsync_start == m2->vsync_start &&
>>> -			m1->vsync_end == m2->vsync_end &&
>>> -			m1->vtotal == m2->vtotal);
>>> -	return bres;
>>> -}
>>> -
>>>  /* Adjust link config limits based on compliance test requests. */
>>>  static void
>>>  intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
>>> @@ -1860,16 +1843,8 @@ intel_dp_compute_config(struct intel_encoder
>>> *encoder,
>>>  		pipe_config->has_audio = intel_conn_state-
>>> >force_audio == HDMI_AUDIO_ON;
>>>  
>>>  	if (intel_dp_is_edp(intel_dp) && intel_connector-
>>> >panel.fixed_mode) {
>>> -		struct drm_display_mode *panel_mode =
>>> -			intel_connector->panel.alt_fixed_mode;
>>> -		struct drm_display_mode *req_mode = &pipe_config-
>>> >base.mode;
>>> -
>>> -		if (!intel_edp_compare_alt_mode(req_mode,
>>> panel_mode))
>>> -			panel_mode = intel_connector-
>>> >panel.fixed_mode;
>>> -
>>> -		drm_mode_debug_printmodeline(panel_mode);
>>> -
>>> -		intel_fixed_panel_mode(panel_mode, adjusted_mode);
>>> +		intel_fixed_panel_mode(intel_connector-
>>> >panel.fixed_mode,
>>> +				       adjusted_mode);
>>>  
>>>  		if (INTEL_GEN(dev_priv) >= 9) {
>>>  			int ret;
>>> @@ -6159,7 +6134,6 @@ static bool intel_edp_init_connector(struct
>>> intel_dp *intel_dp,
>>>  	struct drm_i915_private *dev_priv = to_i915(dev);
>>>  	struct drm_connector *connector = &intel_connector->base;
>>>  	struct drm_display_mode *fixed_mode = NULL;
>>> -	struct drm_display_mode *alt_fixed_mode = NULL;
>>>  	struct drm_display_mode *downclock_mode = NULL;
>>>  	bool has_dpcd;
>>>  	struct drm_display_mode *scan;
>>> @@ -6214,14 +6188,13 @@ static bool intel_edp_init_connector(struct
>>> intel_dp *intel_dp,
>>>  	}
>>>  	intel_connector->edid = edid;
>>>  
>>> -	/* prefer fixed mode from EDID if available, save an alt
>>> mode also */
>>> +	/* prefer fixed mode from EDID if available */
>>>  	list_for_each_entry(scan, &connector->probed_modes, head) {
>>>  		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
>>>  			fixed_mode = drm_mode_duplicate(dev, scan);
>>>  			downclock_mode = intel_dp_drrs_init(
>>>  						intel_connector,
>>> fixed_mode);
>>> -		} else if (!alt_fixed_mode) {
>>> -			alt_fixed_mode = drm_mode_duplicate(dev,
>>> scan);
>>> +			break;
>>
>> If multiple preferred modes are present, we'll now end up calling
>> drrs_init() only for the first. I see that this is what the original
>> code did but this revert does more than removing support for alternate
>> modes.
>
> It boils down to which preferred mode is *the* preferred mode. I think
> the original code was, uh, preferrable. Note that drrs init scans the
> entire list of modes again to find the same size mode with the lowest
> refresh rate.

Moreover, as you can see, the original alt mode commit had more subtle
changes than catches the eye, it caused regressions, and I feel pretty
strongly about getting back to the drawing board and starting over with
a clean slate than trying to tweak it when we are quite frankly way
overdue with the revert. If after that you think the drrs/downclock
selection needs tweaking, let's do that.

BR,
Jani.


>
> BR,
> Jani.
>
>>
>>>  		}
>>>  	}
>>>  
>>> @@ -6258,8 +6231,7 @@ static bool intel_edp_init_connector(struct
>>> intel_dp *intel_dp,
>>>  			      pipe_name(pipe));
>>>  	}
>>>  
>>> -	intel_panel_init(&intel_connector->panel, fixed_mode,
>>> alt_fixed_mode,
>>> -			 downclock_mode);
>>> +	intel_panel_init(&intel_connector->panel, fixed_mode,
>>> downclock_mode);
>>>  	intel_connector->panel.backlight.power =
>>> intel_edp_backlight_power;
>>>  	intel_panel_setup_backlight(connector, pipe);
>>>  
>>> diff --git a/drivers/gpu/drm/i915/intel_drv.h
>>> b/drivers/gpu/drm/i915/intel_drv.h
>>> index d7dbca1aabff..0361130500a6 100644
>>> --- a/drivers/gpu/drm/i915/intel_drv.h
>>> +++ b/drivers/gpu/drm/i915/intel_drv.h
>>> @@ -277,7 +277,6 @@ struct intel_encoder {
>>>  
>>>  struct intel_panel {
>>>  	struct drm_display_mode *fixed_mode;
>>> -	struct drm_display_mode *alt_fixed_mode;
>>>  	struct drm_display_mode *downclock_mode;
>>>  
>>>  	/* backlight */
>>> @@ -1850,7 +1849,6 @@ void intel_overlay_reset(struct
>>> drm_i915_private *dev_priv);
>>>  /* intel_panel.c */
>>>  int intel_panel_init(struct intel_panel *panel,
>>>  		     struct drm_display_mode *fixed_mode,
>>> -		     struct drm_display_mode *alt_fixed_mode,
>>>  		     struct drm_display_mode *downclock_mode);
>>>  void intel_panel_fini(struct intel_panel *panel);
>>>  void intel_fixed_panel_mode(const struct drm_display_mode
>>> *fixed_mode,
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi.c
>>> b/drivers/gpu/drm/i915/intel_dsi.c
>>> index 51a1d6868b1e..cf39ca90d887 100644
>>> --- a/drivers/gpu/drm/i915/intel_dsi.c
>>> +++ b/drivers/gpu/drm/i915/intel_dsi.c
>>> @@ -1846,7 +1846,7 @@ void intel_dsi_init(struct drm_i915_private
>>> *dev_priv)
>>>  	connector->display_info.width_mm = fixed_mode->width_mm;
>>>  	connector->display_info.height_mm = fixed_mode->height_mm;
>>>  
>>> -	intel_panel_init(&intel_connector->panel, fixed_mode, NULL,
>>> NULL);
>>> +	intel_panel_init(&intel_connector->panel, fixed_mode, NULL);
>>>  	intel_panel_setup_backlight(connector, INVALID_PIPE);
>>>  
>>>  	intel_dsi_add_properties(intel_connector);
>>> diff --git a/drivers/gpu/drm/i915/intel_dvo.c
>>> b/drivers/gpu/drm/i915/intel_dvo.c
>>> index eb0c559b2715..a70d767313aa 100644
>>> --- a/drivers/gpu/drm/i915/intel_dvo.c
>>> +++ b/drivers/gpu/drm/i915/intel_dvo.c
>>> @@ -536,7 +536,7 @@ void intel_dvo_init(struct drm_i915_private
>>> *dev_priv)
>>>  			 */
>>>  			intel_panel_init(&intel_connector->panel,
>>>  					 intel_dvo_get_current_mode(
>>> intel_encoder),
>>> -					 NULL, NULL);
>>> +					 NULL);
>>>  			intel_dvo->panel_wants_dither = true;
>>>  		}
>>>  
>>> diff --git a/drivers/gpu/drm/i915/intel_lvds.c
>>> b/drivers/gpu/drm/i915/intel_lvds.c
>>> index 8691c86f579c..d8ece907ff54 100644
>>> --- a/drivers/gpu/drm/i915/intel_lvds.c
>>> +++ b/drivers/gpu/drm/i915/intel_lvds.c
>>> @@ -1140,8 +1140,7 @@ void intel_lvds_init(struct drm_i915_private
>>> *dev_priv)
>>>  out:
>>>  	mutex_unlock(&dev->mode_config.mutex);
>>>  
>>> -	intel_panel_init(&intel_connector->panel, fixed_mode, NULL,
>>> -			 downclock_mode);
>>> +	intel_panel_init(&intel_connector->panel, fixed_mode,
>>> downclock_mode);
>>>  	intel_panel_setup_backlight(connector, INVALID_PIPE);
>>>  
>>>  	lvds_encoder->is_dual_link =
>>> compute_is_dual_link_lvds(lvds_encoder);
>>> diff --git a/drivers/gpu/drm/i915/intel_panel.c
>>> b/drivers/gpu/drm/i915/intel_panel.c
>>> index 41d00b1603e3..b443278e569c 100644
>>> --- a/drivers/gpu/drm/i915/intel_panel.c
>>> +++ b/drivers/gpu/drm/i915/intel_panel.c
>>> @@ -1928,13 +1928,11 @@ intel_panel_init_backlight_funcs(struct
>>> intel_panel *panel)
>>>  
>>>  int intel_panel_init(struct intel_panel *panel,
>>>  		     struct drm_display_mode *fixed_mode,
>>> -		     struct drm_display_mode *alt_fixed_mode,
>>>  		     struct drm_display_mode *downclock_mode)
>>>  {
>>>  	intel_panel_init_backlight_funcs(panel);
>>>  
>>>  	panel->fixed_mode = fixed_mode;
>>> -	panel->alt_fixed_mode = alt_fixed_mode;
>>>  	panel->downclock_mode = downclock_mode;
>>>  
>>>  	return 0;
>>> @@ -1948,10 +1946,6 @@ void intel_panel_fini(struct intel_panel
>>> *panel)
>>>  	if (panel->fixed_mode)
>>>  		drm_mode_destroy(intel_connector->base.dev, panel-
>>> >fixed_mode);
>>>  
>>> -	if (panel->alt_fixed_mode)
>>> -		drm_mode_destroy(intel_connector->base.dev,
>>> -				panel->alt_fixed_mode);
>>> -
>>>  	if (panel->downclock_mode)
>>>  		drm_mode_destroy(intel_connector->base.dev,
>>>  				panel->downclock_mode);

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

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

* Re: [Intel-gfx] [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-17  7:33       ` Jani Nikula
  (?)
@ 2018-05-17 19:44       ` Dhinakaran Pandiyan
  2018-05-18 19:53         ` Dhinakaran Pandiyan
  -1 siblings, 1 reply; 14+ messages in thread
From: Dhinakaran Pandiyan @ 2018-05-17 19:44 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx; +Cc: Paulo Zanoni, # v4 . 14+, Rodrigo Vivi

On Thu, 2018-05-17 at 10:33 +0300, Jani Nikula wrote:
> On Thu, 17 May 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> > 
> > On Wed, 16 May 2018, Dhinakaran Pandiyan <dhinakaran.pandiyan@intel
> > .com> wrote:
> > > 
> > > On Wed, 2018-05-16 at 11:01 +0300, Jani Nikula wrote:
> > > > 
> > > > This reverts commit dc911f5bd8aacfcf8aabd5c26c88e04c837a938e.
> > > > 
> > > > Per the report, no matter what display mode you select with
> > > > xrandr,
> > > > the
> > > > i915 driver will always select the alternate fixed mode. For
> > > > the
> > > > reporter this means that the display will always run at 40Hz
> > > > which is
> > > > quite annoying. This may be due to the mode comparison.
> > > > 
> > > > But there are some other potential issues. The choice of
> > > > alt_fixed_mode
> > > > seems dubious. It's the first non-preferred mode, but there are
> > > > no
> > > > guarantees that the only difference would be refresh rate.
> > > > Similarly,
> > > > there may be more than one preferred mode in the probed modes
> > > > list,
> > > > and
> > > > the commit changes the preferred mode selection to choose the
> > > > last
> > > > one
> > > > on the list instead of the first.
> > > > 
> > > > (Note that the probed modes list is the raw, unfiltered,
> > > > unsorted
> > > > list
> > > > of modes from drm_add_edid_modes(), not the pretty result after
> > > > a
> > > > drm_helper_probe_single_connector_modes() call.)
> > > > 
> > > > Finally, we already have eerily similar code in place to find
> > > > the
> > > > downclock mode for DRRS that seems like could be reused here.
> > > > 
> > > > Back to the drawing board.
> > > > 
> > > > Note: This is a hand-crafted revert due to conflicts. If it
> > > > fails to
> > > > backport, please just try reverting the original commit
> > > > directly.
> > > > 
> > > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105469
> > > > Reported-by: Rune Petersen <rune@megahurts.dk>
> > > > Reported-by: Mark Spencer <n7u4722r35@ynzlx.anonbox.net>
> > > > Fixes: dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode
> > > > for
> > > > eDP if available.")
> > > > Cc: Clint Taylor <clinton.a.taylor@intel.com>
> > > > Cc: David Weinehall <david.weinehall@linux.intel.com>
> > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > > Cc: Chris Wilson <chris@chris-wilson.co.uk>
> > > > Cc: Jim Bride <jim.bride@linux.intel.com>
> > > > Cc: Jani Nikula <jani.nikula@linux.intel.com>
> > > > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> > > > Cc: intel-gfx@lists.freedesktop.org
> > > > Cc: <stable@vger.kernel.org> # v4.14+
> > > > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> > > > ---
> > > >  drivers/gpu/drm/i915/intel_dp.c    | 38 +++++-----------------
> > > > ------
> > > > ----------
> > > >  drivers/gpu/drm/i915/intel_drv.h   |  2 --
> > > >  drivers/gpu/drm/i915/intel_dsi.c   |  2 +-
> > > >  drivers/gpu/drm/i915/intel_dvo.c   |  2 +-
> > > >  drivers/gpu/drm/i915/intel_lvds.c  |  3 +--
> > > >  drivers/gpu/drm/i915/intel_panel.c |  6 ------
> > > >  6 files changed, 8 insertions(+), 45 deletions(-)
> > > > 
> > > > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > > > b/drivers/gpu/drm/i915/intel_dp.c
> > > > index dde92e4af5d3..8320f0e8e3be 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dp.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > > > @@ -1679,23 +1679,6 @@ static int intel_dp_compute_bpp(struct
> > > > intel_dp *intel_dp,
> > > >  	return bpp;
> > > >  }
> > > >  
> > > > -static bool intel_edp_compare_alt_mode(struct drm_display_mode
> > > > *m1,
> > > > -				       struct drm_display_mode
> > > > *m2)
> > > > -{
> > > > -	bool bres = false;
> > > > -
> > > > -	if (m1 && m2)
> > > > -		bres = (m1->hdisplay == m2->hdisplay &&
> > > > -			m1->hsync_start == m2->hsync_start &&
> > > > -			m1->hsync_end == m2->hsync_end &&
> > > > -			m1->htotal == m2->htotal &&
> > > > -			m1->vdisplay == m2->vdisplay &&
> > > > -			m1->vsync_start == m2->vsync_start &&
> > > > -			m1->vsync_end == m2->vsync_end &&
> > > > -			m1->vtotal == m2->vtotal);
> > > > -	return bres;
> > > > -}
> > > > -
> > > >  /* Adjust link config limits based on compliance test
> > > > requests. */
> > > >  static void
> > > >  intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
> > > > @@ -1860,16 +1843,8 @@ intel_dp_compute_config(struct
> > > > intel_encoder
> > > > *encoder,
> > > >  		pipe_config->has_audio = intel_conn_state-
> > > > > 
> > > > > force_audio == HDMI_AUDIO_ON;
> > > >  
> > > >  	if (intel_dp_is_edp(intel_dp) && intel_connector-
> > > > > 
> > > > > panel.fixed_mode) {
> > > > -		struct drm_display_mode *panel_mode =
> > > > -			intel_connector->panel.alt_fixed_mode;
> > > > -		struct drm_display_mode *req_mode =
> > > > &pipe_config-
> > > > > 
> > > > > base.mode;
> > > > -
> > > > -		if (!intel_edp_compare_alt_mode(req_mode,
> > > > panel_mode))
> > > > -			panel_mode = intel_connector-
> > > > > 
> > > > > panel.fixed_mode;
> > > > -
> > > > -		drm_mode_debug_printmodeline(panel_mode);
> > > > -
> > > > -		intel_fixed_panel_mode(panel_mode,
> > > > adjusted_mode);
> > > > +		intel_fixed_panel_mode(intel_connector-
> > > > > 
> > > > > panel.fixed_mode,
> > > > +				       adjusted_mode);
> > > >  
> > > >  		if (INTEL_GEN(dev_priv) >= 9) {
> > > >  			int ret;
> > > > @@ -6159,7 +6134,6 @@ static bool
> > > > intel_edp_init_connector(struct
> > > > intel_dp *intel_dp,
> > > >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > > >  	struct drm_connector *connector = &intel_connector-
> > > > >base;
> > > >  	struct drm_display_mode *fixed_mode = NULL;
> > > > -	struct drm_display_mode *alt_fixed_mode = NULL;
> > > >  	struct drm_display_mode *downclock_mode = NULL;
> > > >  	bool has_dpcd;
> > > >  	struct drm_display_mode *scan;
> > > > @@ -6214,14 +6188,13 @@ static bool
> > > > intel_edp_init_connector(struct
> > > > intel_dp *intel_dp,
> > > >  	}
> > > >  	intel_connector->edid = edid;
> > > >  
> > > > -	/* prefer fixed mode from EDID if available, save an
> > > > alt
> > > > mode also */
> > > > +	/* prefer fixed mode from EDID if available */
> > > >  	list_for_each_entry(scan, &connector->probed_modes,
> > > > head) {
> > > >  		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
> > > >  			fixed_mode = drm_mode_duplicate(dev,
> > > > scan);
> > > >  			downclock_mode = intel_dp_drrs_init(
> > > >  						intel_connecto
> > > > r,
> > > > fixed_mode);
> > > > -		} else if (!alt_fixed_mode) {
> > > > -			alt_fixed_mode =
> > > > drm_mode_duplicate(dev,
> > > > scan);
> > > > +			break;
> > > If multiple preferred modes are present, we'll now end up calling
> > > drrs_init() only for the first. I see that this is what the
> > > original
> > > code did but this revert does more than removing support for
> > > alternate
> > > modes.
> > It boils down to which preferred mode is *the* preferred mode. I
> > think
> > the original code was, uh, preferrable. Note that drrs init scans
> > the
> > entire list of modes again to find the same size mode with the
> > lowest
> > refresh rate.
> Moreover, as you can see, the original alt mode commit had more
> subtle
> changes than catches the eye, it caused regressions, and I feel
> pretty
> strongly about getting back to the drawing board and starting over
> with
> a clean slate than trying to tweak it when we are quite frankly way
> overdue with the revert. If after that you think the drrs/downclock
> selection needs tweaking, let's do that.

Yeah, agreed on starting with a clean slate.

The offending commit claims alternate mode was intended to be used for
PSR testing. I don't see any psr_basic failures in BAT or any other PSR
sub-tests failing on shards, must have been a non-CI machine then.

The revert itself looks correct,
Reviewed-by: Dhinaakaran Pandiyan <dhinakaran.pandiyan@intel.com>

> 
> BR,
> Jani.
> 
> 
> > 
> > 
> > BR,
> > Jani.
> > 
> > > 
> > > 
> > > > 
> > > >  		}
> > > >  	}
> > > >  
> > > > @@ -6258,8 +6231,7 @@ static bool
> > > > intel_edp_init_connector(struct
> > > > intel_dp *intel_dp,
> > > >  			      pipe_name(pipe));
> > > >  	}
> > > >  
> > > > -	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > alt_fixed_mode,
> > > > -			 downclock_mode);
> > > > +	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > downclock_mode);
> > > >  	intel_connector->panel.backlight.power =
> > > > intel_edp_backlight_power;
> > > >  	intel_panel_setup_backlight(connector, pipe);
> > > >  
> > > > diff --git a/drivers/gpu/drm/i915/intel_drv.h
> > > > b/drivers/gpu/drm/i915/intel_drv.h
> > > > index d7dbca1aabff..0361130500a6 100644
> > > > --- a/drivers/gpu/drm/i915/intel_drv.h
> > > > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > > > @@ -277,7 +277,6 @@ struct intel_encoder {
> > > >  
> > > >  struct intel_panel {
> > > >  	struct drm_display_mode *fixed_mode;
> > > > -	struct drm_display_mode *alt_fixed_mode;
> > > >  	struct drm_display_mode *downclock_mode;
> > > >  
> > > >  	/* backlight */
> > > > @@ -1850,7 +1849,6 @@ void intel_overlay_reset(struct
> > > > drm_i915_private *dev_priv);
> > > >  /* intel_panel.c */
> > > >  int intel_panel_init(struct intel_panel *panel,
> > > >  		     struct drm_display_mode *fixed_mode,
> > > > -		     struct drm_display_mode *alt_fixed_mode,
> > > >  		     struct drm_display_mode *downclock_mode);
> > > >  void intel_panel_fini(struct intel_panel *panel);
> > > >  void intel_fixed_panel_mode(const struct drm_display_mode
> > > > *fixed_mode,
> > > > diff --git a/drivers/gpu/drm/i915/intel_dsi.c
> > > > b/drivers/gpu/drm/i915/intel_dsi.c
> > > > index 51a1d6868b1e..cf39ca90d887 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dsi.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dsi.c
> > > > @@ -1846,7 +1846,7 @@ void intel_dsi_init(struct
> > > > drm_i915_private
> > > > *dev_priv)
> > > >  	connector->display_info.width_mm = fixed_mode-
> > > > >width_mm;
> > > >  	connector->display_info.height_mm = fixed_mode-
> > > > >height_mm;
> > > >  
> > > > -	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > NULL,
> > > > NULL);
> > > > +	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > NULL);
> > > >  	intel_panel_setup_backlight(connector, INVALID_PIPE);
> > > >  
> > > >  	intel_dsi_add_properties(intel_connector);
> > > > diff --git a/drivers/gpu/drm/i915/intel_dvo.c
> > > > b/drivers/gpu/drm/i915/intel_dvo.c
> > > > index eb0c559b2715..a70d767313aa 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dvo.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dvo.c
> > > > @@ -536,7 +536,7 @@ void intel_dvo_init(struct drm_i915_private
> > > > *dev_priv)
> > > >  			 */
> > > >  			intel_panel_init(&intel_connector-
> > > > >panel,
> > > >  					 intel_dvo_get_current
> > > > _mode(
> > > > intel_encoder),
> > > > -					 NULL, NULL);
> > > > +					 NULL);
> > > >  			intel_dvo->panel_wants_dither = true;
> > > >  		}
> > > >  
> > > > diff --git a/drivers/gpu/drm/i915/intel_lvds.c
> > > > b/drivers/gpu/drm/i915/intel_lvds.c
> > > > index 8691c86f579c..d8ece907ff54 100644
> > > > --- a/drivers/gpu/drm/i915/intel_lvds.c
> > > > +++ b/drivers/gpu/drm/i915/intel_lvds.c
> > > > @@ -1140,8 +1140,7 @@ void intel_lvds_init(struct
> > > > drm_i915_private
> > > > *dev_priv)
> > > >  out:
> > > >  	mutex_unlock(&dev->mode_config.mutex);
> > > >  
> > > > -	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > NULL,
> > > > -			 downclock_mode);
> > > > +	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > downclock_mode);
> > > >  	intel_panel_setup_backlight(connector, INVALID_PIPE);
> > > >  
> > > >  	lvds_encoder->is_dual_link =
> > > > compute_is_dual_link_lvds(lvds_encoder);
> > > > diff --git a/drivers/gpu/drm/i915/intel_panel.c
> > > > b/drivers/gpu/drm/i915/intel_panel.c
> > > > index 41d00b1603e3..b443278e569c 100644
> > > > --- a/drivers/gpu/drm/i915/intel_panel.c
> > > > +++ b/drivers/gpu/drm/i915/intel_panel.c
> > > > @@ -1928,13 +1928,11 @@ intel_panel_init_backlight_funcs(struct
> > > > intel_panel *panel)
> > > >  
> > > >  int intel_panel_init(struct intel_panel *panel,
> > > >  		     struct drm_display_mode *fixed_mode,
> > > > -		     struct drm_display_mode *alt_fixed_mode,
> > > >  		     struct drm_display_mode *downclock_mode)
> > > >  {
> > > >  	intel_panel_init_backlight_funcs(panel);
> > > >  
> > > >  	panel->fixed_mode = fixed_mode;
> > > > -	panel->alt_fixed_mode = alt_fixed_mode;
> > > >  	panel->downclock_mode = downclock_mode;
> > > >  
> > > >  	return 0;
> > > > @@ -1948,10 +1946,6 @@ void intel_panel_fini(struct intel_panel
> > > > *panel)
> > > >  	if (panel->fixed_mode)
> > > >  		drm_mode_destroy(intel_connector->base.dev,
> > > > panel-
> > > > > 
> > > > > fixed_mode);
> > > >  
> > > > -	if (panel->alt_fixed_mode)
> > > > -		drm_mode_destroy(intel_connector->base.dev,
> > > > -				panel->alt_fixed_mode);
> > > > -
> > > >  	if (panel->downclock_mode)
> > > >  		drm_mode_destroy(intel_connector->base.dev,
> > > >  				panel->downclock_mode);

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

* Re: [Intel-gfx] [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-17  7:33       ` Jani Nikula
@ 2018-05-17 19:44         ` Dhinakaran Pandiyan
  -1 siblings, 0 replies; 14+ messages in thread
From: Dhinakaran Pandiyan @ 2018-05-17 19:44 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx; +Cc: Paulo Zanoni, # v4 . 14+, Rodrigo Vivi

On Thu, 2018-05-17 at 10:33 +0300, Jani Nikula wrote:
> On Thu, 17 May 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> > 
> > On Wed, 16 May 2018, Dhinakaran Pandiyan <dhinakaran.pandiyan@intel
> > .com> wrote:
> > > 
> > > On Wed, 2018-05-16 at 11:01 +0300, Jani Nikula wrote:
> > > > 
> > > > This reverts commit dc911f5bd8aacfcf8aabd5c26c88e04c837a938e.
> > > > 
> > > > Per the report, no matter what display mode you select with
> > > > xrandr,
> > > > the
> > > > i915 driver will always select the alternate fixed mode. For
> > > > the
> > > > reporter this means that the display will always run at 40Hz
> > > > which is
> > > > quite annoying. This may be due to the mode comparison.
> > > > 
> > > > But there are some other potential issues. The choice of
> > > > alt_fixed_mode
> > > > seems dubious. It's the first non-preferred mode, but there are
> > > > no
> > > > guarantees that the only difference would be refresh rate.
> > > > Similarly,
> > > > there may be more than one preferred mode in the probed modes
> > > > list,
> > > > and
> > > > the commit changes the preferred mode selection to choose the
> > > > last
> > > > one
> > > > on the list instead of the first.
> > > > 
> > > > (Note that the probed modes list is the raw, unfiltered,
> > > > unsorted
> > > > list
> > > > of modes from drm_add_edid_modes(), not the pretty result after
> > > > a
> > > > drm_helper_probe_single_connector_modes() call.)
> > > > 
> > > > Finally, we already have eerily similar code in place to find
> > > > the
> > > > downclock mode for DRRS that seems like could be reused here.
> > > > 
> > > > Back to the drawing board.
> > > > 
> > > > Note: This is a hand-crafted revert due to conflicts. If it
> > > > fails to
> > > > backport, please just try reverting the original commit
> > > > directly.
> > > > 
> > > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105469
> > > > Reported-by: Rune Petersen <rune@megahurts.dk>
> > > > Reported-by: Mark Spencer <n7u4722r35@ynzlx.anonbox.net>
> > > > Fixes: dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode
> > > > for
> > > > eDP if available.")
> > > > Cc: Clint Taylor <clinton.a.taylor@intel.com>
> > > > Cc: David Weinehall <david.weinehall@linux.intel.com>
> > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > > Cc: Chris Wilson <chris@chris-wilson.co.uk>
> > > > Cc: Jim Bride <jim.bride@linux.intel.com>
> > > > Cc: Jani Nikula <jani.nikula@linux.intel.com>
> > > > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> > > > Cc: intel-gfx@lists.freedesktop.org
> > > > Cc: <stable@vger.kernel.org> # v4.14+
> > > > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> > > > ---
> > > >  drivers/gpu/drm/i915/intel_dp.c    | 38 +++++-----------------
> > > > ------
> > > > ----------
> > > >  drivers/gpu/drm/i915/intel_drv.h   |  2 --
> > > >  drivers/gpu/drm/i915/intel_dsi.c   |  2 +-
> > > >  drivers/gpu/drm/i915/intel_dvo.c   |  2 +-
> > > >  drivers/gpu/drm/i915/intel_lvds.c  |  3 +--
> > > >  drivers/gpu/drm/i915/intel_panel.c |  6 ------
> > > >  6 files changed, 8 insertions(+), 45 deletions(-)
> > > > 
> > > > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > > > b/drivers/gpu/drm/i915/intel_dp.c
> > > > index dde92e4af5d3..8320f0e8e3be 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dp.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > > > @@ -1679,23 +1679,6 @@ static int intel_dp_compute_bpp(struct
> > > > intel_dp *intel_dp,
> > > >  	return bpp;
> > > >  }
> > > >  
> > > > -static bool intel_edp_compare_alt_mode(struct drm_display_mode
> > > > *m1,
> > > > -				       struct drm_display_mode
> > > > *m2)
> > > > -{
> > > > -	bool bres = false;
> > > > -
> > > > -	if (m1 && m2)
> > > > -		bres = (m1->hdisplay == m2->hdisplay &&
> > > > -			m1->hsync_start == m2->hsync_start &&
> > > > -			m1->hsync_end == m2->hsync_end &&
> > > > -			m1->htotal == m2->htotal &&
> > > > -			m1->vdisplay == m2->vdisplay &&
> > > > -			m1->vsync_start == m2->vsync_start &&
> > > > -			m1->vsync_end == m2->vsync_end &&
> > > > -			m1->vtotal == m2->vtotal);
> > > > -	return bres;
> > > > -}
> > > > -
> > > >  /* Adjust link config limits based on compliance test
> > > > requests. */
> > > >  static void
> > > >  intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
> > > > @@ -1860,16 +1843,8 @@ intel_dp_compute_config(struct
> > > > intel_encoder
> > > > *encoder,
> > > >  		pipe_config->has_audio = intel_conn_state-
> > > > > 
> > > > > force_audio == HDMI_AUDIO_ON;
> > > >  
> > > >  	if (intel_dp_is_edp(intel_dp) && intel_connector-
> > > > > 
> > > > > panel.fixed_mode) {
> > > > -		struct drm_display_mode *panel_mode =
> > > > -			intel_connector->panel.alt_fixed_mode;
> > > > -		struct drm_display_mode *req_mode =
> > > > &pipe_config-
> > > > > 
> > > > > base.mode;
> > > > -
> > > > -		if (!intel_edp_compare_alt_mode(req_mode,
> > > > panel_mode))
> > > > -			panel_mode = intel_connector-
> > > > > 
> > > > > panel.fixed_mode;
> > > > -
> > > > -		drm_mode_debug_printmodeline(panel_mode);
> > > > -
> > > > -		intel_fixed_panel_mode(panel_mode,
> > > > adjusted_mode);
> > > > +		intel_fixed_panel_mode(intel_connector-
> > > > > 
> > > > > panel.fixed_mode,
> > > > +				       adjusted_mode);
> > > >  
> > > >  		if (INTEL_GEN(dev_priv) >= 9) {
> > > >  			int ret;
> > > > @@ -6159,7 +6134,6 @@ static bool
> > > > intel_edp_init_connector(struct
> > > > intel_dp *intel_dp,
> > > >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > > >  	struct drm_connector *connector = &intel_connector-
> > > > >base;
> > > >  	struct drm_display_mode *fixed_mode = NULL;
> > > > -	struct drm_display_mode *alt_fixed_mode = NULL;
> > > >  	struct drm_display_mode *downclock_mode = NULL;
> > > >  	bool has_dpcd;
> > > >  	struct drm_display_mode *scan;
> > > > @@ -6214,14 +6188,13 @@ static bool
> > > > intel_edp_init_connector(struct
> > > > intel_dp *intel_dp,
> > > >  	}
> > > >  	intel_connector->edid = edid;
> > > >  
> > > > -	/* prefer fixed mode from EDID if available, save an
> > > > alt
> > > > mode also */
> > > > +	/* prefer fixed mode from EDID if available */
> > > >  	list_for_each_entry(scan, &connector->probed_modes,
> > > > head) {
> > > >  		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
> > > >  			fixed_mode = drm_mode_duplicate(dev,
> > > > scan);
> > > >  			downclock_mode = intel_dp_drrs_init(
> > > >  						intel_connecto
> > > > r,
> > > > fixed_mode);
> > > > -		} else if (!alt_fixed_mode) {
> > > > -			alt_fixed_mode =
> > > > drm_mode_duplicate(dev,
> > > > scan);
> > > > +			break;
> > > If multiple preferred modes are present, we'll now end up calling
> > > drrs_init() only for the first. I see that this is what the
> > > original
> > > code did but this revert does more than removing support for
> > > alternate
> > > modes.
> > It boils down to which preferred mode is *the* preferred mode. I
> > think
> > the original code was, uh, preferrable. Note that drrs init scans
> > the
> > entire list of modes again to find the same size mode with the
> > lowest
> > refresh rate.
> Moreover, as you can see, the original alt mode commit had more
> subtle
> changes than catches the eye, it caused regressions, and I feel
> pretty
> strongly about getting back to the drawing board and starting over
> with
> a clean slate than trying to tweak it when we are quite frankly way
> overdue with the revert. If after that you think the drrs/downclock
> selection needs tweaking, let's do that.

Yeah, agreed on starting with a clean slate.

The offending commit claims alternate mode was intended to be used for
PSR testing. I don't see any psr_basic failures in BAT or any other PSR
sub-tests failing on shards, must have been a non-CI machine then.

The revert itself looks correct,
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>

> 
> BR,
> Jani.
> 
> 
> > 
> > 
> > BR,
> > Jani.
> > 
> > > 
> > > 
> > > > 
> > > >  		}
> > > >  	}
> > > >  
> > > > @@ -6258,8 +6231,7 @@ static bool
> > > > intel_edp_init_connector(struct
> > > > intel_dp *intel_dp,
> > > >  			      pipe_name(pipe));
> > > >  	}
> > > >  
> > > > -	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > alt_fixed_mode,
> > > > -			 downclock_mode);
> > > > +	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > downclock_mode);
> > > >  	intel_connector->panel.backlight.power =
> > > > intel_edp_backlight_power;
> > > >  	intel_panel_setup_backlight(connector, pipe);
> > > >  
> > > > diff --git a/drivers/gpu/drm/i915/intel_drv.h
> > > > b/drivers/gpu/drm/i915/intel_drv.h
> > > > index d7dbca1aabff..0361130500a6 100644
> > > > --- a/drivers/gpu/drm/i915/intel_drv.h
> > > > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > > > @@ -277,7 +277,6 @@ struct intel_encoder {
> > > >  
> > > >  struct intel_panel {
> > > >  	struct drm_display_mode *fixed_mode;
> > > > -	struct drm_display_mode *alt_fixed_mode;
> > > >  	struct drm_display_mode *downclock_mode;
> > > >  
> > > >  	/* backlight */
> > > > @@ -1850,7 +1849,6 @@ void intel_overlay_reset(struct
> > > > drm_i915_private *dev_priv);
> > > >  /* intel_panel.c */
> > > >  int intel_panel_init(struct intel_panel *panel,
> > > >  		     struct drm_display_mode *fixed_mode,
> > > > -		     struct drm_display_mode *alt_fixed_mode,
> > > >  		     struct drm_display_mode *downclock_mode);
> > > >  void intel_panel_fini(struct intel_panel *panel);
> > > >  void intel_fixed_panel_mode(const struct drm_display_mode
> > > > *fixed_mode,
> > > > diff --git a/drivers/gpu/drm/i915/intel_dsi.c
> > > > b/drivers/gpu/drm/i915/intel_dsi.c
> > > > index 51a1d6868b1e..cf39ca90d887 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dsi.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dsi.c
> > > > @@ -1846,7 +1846,7 @@ void intel_dsi_init(struct
> > > > drm_i915_private
> > > > *dev_priv)
> > > >  	connector->display_info.width_mm = fixed_mode-
> > > > >width_mm;
> > > >  	connector->display_info.height_mm = fixed_mode-
> > > > >height_mm;
> > > >  
> > > > -	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > NULL,
> > > > NULL);
> > > > +	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > NULL);
> > > >  	intel_panel_setup_backlight(connector, INVALID_PIPE);
> > > >  
> > > >  	intel_dsi_add_properties(intel_connector);
> > > > diff --git a/drivers/gpu/drm/i915/intel_dvo.c
> > > > b/drivers/gpu/drm/i915/intel_dvo.c
> > > > index eb0c559b2715..a70d767313aa 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dvo.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dvo.c
> > > > @@ -536,7 +536,7 @@ void intel_dvo_init(struct drm_i915_private
> > > > *dev_priv)
> > > >  			 */
> > > >  			intel_panel_init(&intel_connector-
> > > > >panel,
> > > >  					 intel_dvo_get_current
> > > > _mode(
> > > > intel_encoder),
> > > > -					 NULL, NULL);
> > > > +					 NULL);
> > > >  			intel_dvo->panel_wants_dither = true;
> > > >  		}
> > > >  
> > > > diff --git a/drivers/gpu/drm/i915/intel_lvds.c
> > > > b/drivers/gpu/drm/i915/intel_lvds.c
> > > > index 8691c86f579c..d8ece907ff54 100644
> > > > --- a/drivers/gpu/drm/i915/intel_lvds.c
> > > > +++ b/drivers/gpu/drm/i915/intel_lvds.c
> > > > @@ -1140,8 +1140,7 @@ void intel_lvds_init(struct
> > > > drm_i915_private
> > > > *dev_priv)
> > > >  out:
> > > >  	mutex_unlock(&dev->mode_config.mutex);
> > > >  
> > > > -	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > NULL,
> > > > -			 downclock_mode);
> > > > +	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > downclock_mode);
> > > >  	intel_panel_setup_backlight(connector, INVALID_PIPE);
> > > >  
> > > >  	lvds_encoder->is_dual_link =
> > > > compute_is_dual_link_lvds(lvds_encoder);
> > > > diff --git a/drivers/gpu/drm/i915/intel_panel.c
> > > > b/drivers/gpu/drm/i915/intel_panel.c
> > > > index 41d00b1603e3..b443278e569c 100644
> > > > --- a/drivers/gpu/drm/i915/intel_panel.c
> > > > +++ b/drivers/gpu/drm/i915/intel_panel.c
> > > > @@ -1928,13 +1928,11 @@ intel_panel_init_backlight_funcs(struct
> > > > intel_panel *panel)
> > > >  
> > > >  int intel_panel_init(struct intel_panel *panel,
> > > >  		     struct drm_display_mode *fixed_mode,
> > > > -		     struct drm_display_mode *alt_fixed_mode,
> > > >  		     struct drm_display_mode *downclock_mode)
> > > >  {
> > > >  	intel_panel_init_backlight_funcs(panel);
> > > >  
> > > >  	panel->fixed_mode = fixed_mode;
> > > > -	panel->alt_fixed_mode = alt_fixed_mode;
> > > >  	panel->downclock_mode = downclock_mode;
> > > >  
> > > >  	return 0;
> > > > @@ -1948,10 +1946,6 @@ void intel_panel_fini(struct intel_panel
> > > > *panel)
> > > >  	if (panel->fixed_mode)
> > > >  		drm_mode_destroy(intel_connector->base.dev,
> > > > panel-
> > > > > 
> > > > > fixed_mode);
> > > >  
> > > > -	if (panel->alt_fixed_mode)
> > > > -		drm_mode_destroy(intel_connector->base.dev,
> > > > -				panel->alt_fixed_mode);
> > > > -
> > > >  	if (panel->downclock_mode)
> > > >  		drm_mode_destroy(intel_connector->base.dev,
> > > >  				panel->downclock_mode);

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

* Re: [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
@ 2018-05-17 19:44         ` Dhinakaran Pandiyan
  0 siblings, 0 replies; 14+ messages in thread
From: Dhinakaran Pandiyan @ 2018-05-17 19:44 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx; +Cc: Paulo Zanoni, # v4 . 14+, Rodrigo Vivi

On Thu, 2018-05-17 at 10:33 +0300, Jani Nikula wrote:
> On Thu, 17 May 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> > 
> > On Wed, 16 May 2018, Dhinakaran Pandiyan <dhinakaran.pandiyan@intel
> > .com> wrote:
> > > 
> > > On Wed, 2018-05-16 at 11:01 +0300, Jani Nikula wrote:
> > > > 
> > > > This reverts commit dc911f5bd8aacfcf8aabd5c26c88e04c837a938e.
> > > > 
> > > > Per the report, no matter what display mode you select with
> > > > xrandr,
> > > > the
> > > > i915 driver will always select the alternate fixed mode. For
> > > > the
> > > > reporter this means that the display will always run at 40Hz
> > > > which is
> > > > quite annoying. This may be due to the mode comparison.
> > > > 
> > > > But there are some other potential issues. The choice of
> > > > alt_fixed_mode
> > > > seems dubious. It's the first non-preferred mode, but there are
> > > > no
> > > > guarantees that the only difference would be refresh rate.
> > > > Similarly,
> > > > there may be more than one preferred mode in the probed modes
> > > > list,
> > > > and
> > > > the commit changes the preferred mode selection to choose the
> > > > last
> > > > one
> > > > on the list instead of the first.
> > > > 
> > > > (Note that the probed modes list is the raw, unfiltered,
> > > > unsorted
> > > > list
> > > > of modes from drm_add_edid_modes(), not the pretty result after
> > > > a
> > > > drm_helper_probe_single_connector_modes() call.)
> > > > 
> > > > Finally, we already have eerily similar code in place to find
> > > > the
> > > > downclock mode for DRRS that seems like could be reused here.
> > > > 
> > > > Back to the drawing board.
> > > > 
> > > > Note: This is a hand-crafted revert due to conflicts. If it
> > > > fails to
> > > > backport, please just try reverting the original commit
> > > > directly.
> > > > 
> > > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105469
> > > > Reported-by: Rune Petersen <rune@megahurts.dk>
> > > > Reported-by: Mark Spencer <n7u4722r35@ynzlx.anonbox.net>
> > > > Fixes: dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode
> > > > for
> > > > eDP if available.")
> > > > Cc: Clint Taylor <clinton.a.taylor@intel.com>
> > > > Cc: David Weinehall <david.weinehall@linux.intel.com>
> > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > > Cc: Chris Wilson <chris@chris-wilson.co.uk>
> > > > Cc: Jim Bride <jim.bride@linux.intel.com>
> > > > Cc: Jani Nikula <jani.nikula@linux.intel.com>
> > > > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> > > > Cc: intel-gfx@lists.freedesktop.org
> > > > Cc: <stable@vger.kernel.org> # v4.14+
> > > > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> > > > ---
> > > >  drivers/gpu/drm/i915/intel_dp.c    | 38 +++++-----------------
> > > > ------
> > > > ----------
> > > >  drivers/gpu/drm/i915/intel_drv.h   |  2 --
> > > >  drivers/gpu/drm/i915/intel_dsi.c   |  2 +-
> > > >  drivers/gpu/drm/i915/intel_dvo.c   |  2 +-
> > > >  drivers/gpu/drm/i915/intel_lvds.c  |  3 +--
> > > >  drivers/gpu/drm/i915/intel_panel.c |  6 ------
> > > >  6 files changed, 8 insertions(+), 45 deletions(-)
> > > > 
> > > > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > > > b/drivers/gpu/drm/i915/intel_dp.c
> > > > index dde92e4af5d3..8320f0e8e3be 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dp.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > > > @@ -1679,23 +1679,6 @@ static int intel_dp_compute_bpp(struct
> > > > intel_dp *intel_dp,
> > > >  	return bpp;
> > > >  }
> > > >  
> > > > -static bool intel_edp_compare_alt_mode(struct drm_display_mode
> > > > *m1,
> > > > -				       struct drm_display_mode
> > > > *m2)
> > > > -{
> > > > -	bool bres = false;
> > > > -
> > > > -	if (m1 && m2)
> > > > -		bres = (m1->hdisplay == m2->hdisplay &&
> > > > -			m1->hsync_start == m2->hsync_start &&
> > > > -			m1->hsync_end == m2->hsync_end &&
> > > > -			m1->htotal == m2->htotal &&
> > > > -			m1->vdisplay == m2->vdisplay &&
> > > > -			m1->vsync_start == m2->vsync_start &&
> > > > -			m1->vsync_end == m2->vsync_end &&
> > > > -			m1->vtotal == m2->vtotal);
> > > > -	return bres;
> > > > -}
> > > > -
> > > >  /* Adjust link config limits based on compliance test
> > > > requests. */
> > > >  static void
> > > >  intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
> > > > @@ -1860,16 +1843,8 @@ intel_dp_compute_config(struct
> > > > intel_encoder
> > > > *encoder,
> > > >  		pipe_config->has_audio = intel_conn_state-
> > > > > 
> > > > > force_audio == HDMI_AUDIO_ON;
> > > >  
> > > >  	if (intel_dp_is_edp(intel_dp) && intel_connector-
> > > > > 
> > > > > panel.fixed_mode) {
> > > > -		struct drm_display_mode *panel_mode =
> > > > -			intel_connector->panel.alt_fixed_mode;
> > > > -		struct drm_display_mode *req_mode =
> > > > &pipe_config-
> > > > > 
> > > > > base.mode;
> > > > -
> > > > -		if (!intel_edp_compare_alt_mode(req_mode,
> > > > panel_mode))
> > > > -			panel_mode = intel_connector-
> > > > > 
> > > > > panel.fixed_mode;
> > > > -
> > > > -		drm_mode_debug_printmodeline(panel_mode);
> > > > -
> > > > -		intel_fixed_panel_mode(panel_mode,
> > > > adjusted_mode);
> > > > +		intel_fixed_panel_mode(intel_connector-
> > > > > 
> > > > > panel.fixed_mode,
> > > > +				       adjusted_mode);
> > > >  
> > > >  		if (INTEL_GEN(dev_priv) >= 9) {
> > > >  			int ret;
> > > > @@ -6159,7 +6134,6 @@ static bool
> > > > intel_edp_init_connector(struct
> > > > intel_dp *intel_dp,
> > > >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > > >  	struct drm_connector *connector = &intel_connector-
> > > > >base;
> > > >  	struct drm_display_mode *fixed_mode = NULL;
> > > > -	struct drm_display_mode *alt_fixed_mode = NULL;
> > > >  	struct drm_display_mode *downclock_mode = NULL;
> > > >  	bool has_dpcd;
> > > >  	struct drm_display_mode *scan;
> > > > @@ -6214,14 +6188,13 @@ static bool
> > > > intel_edp_init_connector(struct
> > > > intel_dp *intel_dp,
> > > >  	}
> > > >  	intel_connector->edid = edid;
> > > >  
> > > > -	/* prefer fixed mode from EDID if available, save an
> > > > alt
> > > > mode also */
> > > > +	/* prefer fixed mode from EDID if available */
> > > >  	list_for_each_entry(scan, &connector->probed_modes,
> > > > head) {
> > > >  		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
> > > >  			fixed_mode = drm_mode_duplicate(dev,
> > > > scan);
> > > >  			downclock_mode = intel_dp_drrs_init(
> > > >  						intel_connecto
> > > > r,
> > > > fixed_mode);
> > > > -		} else if (!alt_fixed_mode) {
> > > > -			alt_fixed_mode =
> > > > drm_mode_duplicate(dev,
> > > > scan);
> > > > +			break;
> > > If multiple preferred modes are present, we'll now end up calling
> > > drrs_init() only for the first. I see that this is what the
> > > original
> > > code did but this revert does more than removing support for
> > > alternate
> > > modes.
> > It boils down to which preferred mode is *the* preferred mode. I
> > think
> > the original code was, uh, preferrable. Note that drrs init scans
> > the
> > entire list of modes again to find the same size mode with the
> > lowest
> > refresh rate.
> Moreover, as you can see, the original alt mode commit had more
> subtle
> changes than catches the eye, it caused regressions, and I feel
> pretty
> strongly about getting back to the drawing board and starting over
> with
> a clean slate than trying to tweak it when we are quite frankly way
> overdue with the revert. If after that you think the drrs/downclock
> selection needs tweaking, let's do that.

Yeah, agreed on starting with a clean slate.

The offending commit claims alternate mode was intended to be used for
PSR testing. I don't see any psr_basic failures in BAT or any other PSR
sub-tests failing on shards, must have been a non-CI machine then.

The revert itself looks correct,
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>

> 
> BR,
> Jani.
> 
> 
> > 
> > 
> > BR,
> > Jani.
> > 
> > > 
> > > 
> > > > 
> > > >  		}
> > > >  	}
> > > >  
> > > > @@ -6258,8 +6231,7 @@ static bool
> > > > intel_edp_init_connector(struct
> > > > intel_dp *intel_dp,
> > > >  			      pipe_name(pipe));
> > > >  	}
> > > >  
> > > > -	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > alt_fixed_mode,
> > > > -			 downclock_mode);
> > > > +	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > downclock_mode);
> > > >  	intel_connector->panel.backlight.power =
> > > > intel_edp_backlight_power;
> > > >  	intel_panel_setup_backlight(connector, pipe);
> > > >  
> > > > diff --git a/drivers/gpu/drm/i915/intel_drv.h
> > > > b/drivers/gpu/drm/i915/intel_drv.h
> > > > index d7dbca1aabff..0361130500a6 100644
> > > > --- a/drivers/gpu/drm/i915/intel_drv.h
> > > > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > > > @@ -277,7 +277,6 @@ struct intel_encoder {
> > > >  
> > > >  struct intel_panel {
> > > >  	struct drm_display_mode *fixed_mode;
> > > > -	struct drm_display_mode *alt_fixed_mode;
> > > >  	struct drm_display_mode *downclock_mode;
> > > >  
> > > >  	/* backlight */
> > > > @@ -1850,7 +1849,6 @@ void intel_overlay_reset(struct
> > > > drm_i915_private *dev_priv);
> > > >  /* intel_panel.c */
> > > >  int intel_panel_init(struct intel_panel *panel,
> > > >  		     struct drm_display_mode *fixed_mode,
> > > > -		     struct drm_display_mode *alt_fixed_mode,
> > > >  		     struct drm_display_mode *downclock_mode);
> > > >  void intel_panel_fini(struct intel_panel *panel);
> > > >  void intel_fixed_panel_mode(const struct drm_display_mode
> > > > *fixed_mode,
> > > > diff --git a/drivers/gpu/drm/i915/intel_dsi.c
> > > > b/drivers/gpu/drm/i915/intel_dsi.c
> > > > index 51a1d6868b1e..cf39ca90d887 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dsi.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dsi.c
> > > > @@ -1846,7 +1846,7 @@ void intel_dsi_init(struct
> > > > drm_i915_private
> > > > *dev_priv)
> > > >  	connector->display_info.width_mm = fixed_mode-
> > > > >width_mm;
> > > >  	connector->display_info.height_mm = fixed_mode-
> > > > >height_mm;
> > > >  
> > > > -	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > NULL,
> > > > NULL);
> > > > +	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > NULL);
> > > >  	intel_panel_setup_backlight(connector, INVALID_PIPE);
> > > >  
> > > >  	intel_dsi_add_properties(intel_connector);
> > > > diff --git a/drivers/gpu/drm/i915/intel_dvo.c
> > > > b/drivers/gpu/drm/i915/intel_dvo.c
> > > > index eb0c559b2715..a70d767313aa 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dvo.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dvo.c
> > > > @@ -536,7 +536,7 @@ void intel_dvo_init(struct drm_i915_private
> > > > *dev_priv)
> > > >  			 */
> > > >  			intel_panel_init(&intel_connector-
> > > > >panel,
> > > >  					 intel_dvo_get_current
> > > > _mode(
> > > > intel_encoder),
> > > > -					 NULL, NULL);
> > > > +					 NULL);
> > > >  			intel_dvo->panel_wants_dither = true;
> > > >  		}
> > > >  
> > > > diff --git a/drivers/gpu/drm/i915/intel_lvds.c
> > > > b/drivers/gpu/drm/i915/intel_lvds.c
> > > > index 8691c86f579c..d8ece907ff54 100644
> > > > --- a/drivers/gpu/drm/i915/intel_lvds.c
> > > > +++ b/drivers/gpu/drm/i915/intel_lvds.c
> > > > @@ -1140,8 +1140,7 @@ void intel_lvds_init(struct
> > > > drm_i915_private
> > > > *dev_priv)
> > > >  out:
> > > >  	mutex_unlock(&dev->mode_config.mutex);
> > > >  
> > > > -	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > NULL,
> > > > -			 downclock_mode);
> > > > +	intel_panel_init(&intel_connector->panel, fixed_mode,
> > > > downclock_mode);
> > > >  	intel_panel_setup_backlight(connector, INVALID_PIPE);
> > > >  
> > > >  	lvds_encoder->is_dual_link =
> > > > compute_is_dual_link_lvds(lvds_encoder);
> > > > diff --git a/drivers/gpu/drm/i915/intel_panel.c
> > > > b/drivers/gpu/drm/i915/intel_panel.c
> > > > index 41d00b1603e3..b443278e569c 100644
> > > > --- a/drivers/gpu/drm/i915/intel_panel.c
> > > > +++ b/drivers/gpu/drm/i915/intel_panel.c
> > > > @@ -1928,13 +1928,11 @@ intel_panel_init_backlight_funcs(struct
> > > > intel_panel *panel)
> > > >  
> > > >  int intel_panel_init(struct intel_panel *panel,
> > > >  		     struct drm_display_mode *fixed_mode,
> > > > -		     struct drm_display_mode *alt_fixed_mode,
> > > >  		     struct drm_display_mode *downclock_mode)
> > > >  {
> > > >  	intel_panel_init_backlight_funcs(panel);
> > > >  
> > > >  	panel->fixed_mode = fixed_mode;
> > > > -	panel->alt_fixed_mode = alt_fixed_mode;
> > > >  	panel->downclock_mode = downclock_mode;
> > > >  
> > > >  	return 0;
> > > > @@ -1948,10 +1946,6 @@ void intel_panel_fini(struct intel_panel
> > > > *panel)
> > > >  	if (panel->fixed_mode)
> > > >  		drm_mode_destroy(intel_connector->base.dev,
> > > > panel-
> > > > > 
> > > > > fixed_mode);
> > > >  
> > > > -	if (panel->alt_fixed_mode)
> > > > -		drm_mode_destroy(intel_connector->base.dev,
> > > > -				panel->alt_fixed_mode);
> > > > -
> > > >  	if (panel->downclock_mode)
> > > >  		drm_mode_destroy(intel_connector->base.dev,
> > > >  				panel->downclock_mode);
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.BAT: success for Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-16  8:01 [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available." Jani Nikula
                   ` (2 preceding siblings ...)
  2018-05-16 23:30 ` [Intel-gfx] [PATCH] " Dhinakaran Pandiyan
@ 2018-05-18  7:19 ` Patchwork
  2018-05-18  8:10 ` ✗ Fi.CI.IGT: failure " Patchwork
  4 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2018-05-18  7:19 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
URL   : https://patchwork.freedesktop.org/series/43239/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4202 -> Patchwork_9041 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/43239/revisions/1/mbox/

== Known issues ==

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

  === IGT changes ===

    ==== Possible fixes ====

    igt@kms_flip@basic-flip-vs-wf_vblank:
      fi-cfl-s3:          FAIL (fdo#100368, fdo#103928) -> PASS

    igt@kms_frontbuffer_tracking@basic:
      fi-hsw-4200u:       DMESG-FAIL (fdo#102614, fdo#106103) -> PASS

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      fi-cnl-y3:          DMESG-WARN (fdo#104951) -> PASS

    
  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614
  fdo#103928 https://bugs.freedesktop.org/show_bug.cgi?id=103928
  fdo#104951 https://bugs.freedesktop.org/show_bug.cgi?id=104951
  fdo#106103 https://bugs.freedesktop.org/show_bug.cgi?id=106103


== Participating hosts (42 -> 39) ==

  Missing    (3): fi-ilk-m540 fi-bsw-cyan fi-skl-6700hq 


== Build changes ==

    * Linux: CI_DRM_4202 -> Patchwork_9041

  CI_DRM_4202: ba797356237d1b7beb14f0399e7d2df686134ae1 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4487: eccae1360d6d01e73c6af2bd97122cef708207ef @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_9041: 3c25073b7b29c2954f176b246f3b39d47fb99c43 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4487: 6ab75f7eb5e1dccbb773e1739beeb2d7cbd6ad0d @ git://anongit.freedesktop.org/piglit


== Linux commits ==

3c25073b7b29 Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."

== Logs ==

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

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

* ✗ Fi.CI.IGT: failure for Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-16  8:01 [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available." Jani Nikula
                   ` (3 preceding siblings ...)
  2018-05-18  7:19 ` ✓ Fi.CI.BAT: success for " Patchwork
@ 2018-05-18  8:10 ` Patchwork
  4 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2018-05-18  8:10 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
URL   : https://patchwork.freedesktop.org/series/43239/
State : failure

== Summary ==

= CI Bug Log - changes from CI_DRM_4202_full -> Patchwork_9041_full =

== Summary - FAILURE ==

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

  External URL: https://patchwork.freedesktop.org/api/1.0/series/43239/revisions/1/mbox/

== Possible new issues ==

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

  === IGT changes ===

    ==== Possible regressions ====

    igt@drv_hangman@error-state-capture-vebox:
      shard-kbl:          PASS -> FAIL

    
    ==== Warnings ====

    igt@gem_exec_schedule@deep-render:
      shard-kbl:          SKIP -> PASS

    igt@kms_plane_lowres@pipe-c-tiling-x:
      shard-apl:          SKIP -> PASS

    
== Known issues ==

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

  === IGT changes ===

    ==== Issues hit ====

    igt@kms_atomic_transition@1x-modeset-transitions-nonblocking:
      shard-glk:          PASS -> FAIL (fdo#105703)

    igt@kms_flip@dpms-vs-vblank-race:
      shard-hsw:          PASS -> FAIL (fdo#103060)

    igt@kms_flip@plain-flip-fb-recreate-interruptible:
      shard-glk:          PASS -> FAIL (fdo#100368) +2

    igt@kms_flip_tiling@flip-y-tiled:
      shard-glk:          PASS -> FAIL (fdo#104724, fdo#103822)

    
    ==== Possible fixes ====

    igt@drv_selftest@live_hangcheck:
      shard-kbl:          DMESG-FAIL (fdo#106560) -> PASS

    igt@gem_exec_schedule@deep-bsd1:
      shard-kbl:          DMESG-WARN (fdo#103558, fdo#105602) -> PASS

    igt@kms_cursor_legacy@flip-vs-cursor-legacy:
      shard-hsw:          FAIL (fdo#102670) -> PASS

    igt@kms_flip@2x-wf_vblank-ts-check-interruptible:
      shard-glk:          FAIL (fdo#103928) -> PASS

    igt@kms_flip@flip-vs-absolute-wf_vblank:
      shard-glk:          FAIL (fdo#100368) -> PASS

    igt@kms_flip@flip-vs-expired-vblank:
      shard-hsw:          FAIL (fdo#105707) -> PASS

    igt@kms_flip@flip-vs-expired-vblank-interruptible:
      shard-apl:          FAIL (fdo#105363, fdo#102887) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-gtt:
      shard-apl:          DMESG-FAIL (fdo#103558, fdo#105602) -> PASS

    igt@kms_frontbuffer_tracking@fbc-2p-shrfb-fliptrack:
      shard-glk:          FAIL (fdo#103167, fdo#104724) -> PASS

    igt@kms_pipe_crc_basic@hang-read-crc-pipe-c:
      shard-apl:          DMESG-WARN (fdo#103558, fdo#105602) -> PASS +15

    igt@kms_setmode@basic:
      shard-apl:          FAIL (fdo#99912) -> PASS
      shard-kbl:          FAIL (fdo#99912) -> PASS

    
  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#102670 https://bugs.freedesktop.org/show_bug.cgi?id=102670
  fdo#102887 https://bugs.freedesktop.org/show_bug.cgi?id=102887
  fdo#103060 https://bugs.freedesktop.org/show_bug.cgi?id=103060
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#103822 https://bugs.freedesktop.org/show_bug.cgi?id=103822
  fdo#103928 https://bugs.freedesktop.org/show_bug.cgi?id=103928
  fdo#104724 https://bugs.freedesktop.org/show_bug.cgi?id=104724
  fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
  fdo#105703 https://bugs.freedesktop.org/show_bug.cgi?id=105703
  fdo#105707 https://bugs.freedesktop.org/show_bug.cgi?id=105707
  fdo#106560 https://bugs.freedesktop.org/show_bug.cgi?id=106560
  fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912


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

  No changes in participating hosts


== Build changes ==

    * Linux: CI_DRM_4202 -> Patchwork_9041

  CI_DRM_4202: ba797356237d1b7beb14f0399e7d2df686134ae1 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4487: eccae1360d6d01e73c6af2bd97122cef708207ef @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_9041: 3c25073b7b29c2954f176b246f3b39d47fb99c43 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4487: 6ab75f7eb5e1dccbb773e1739beeb2d7cbd6ad0d @ git://anongit.freedesktop.org/piglit

== Logs ==

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

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

* Re: [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-17 19:44       ` [Intel-gfx] " Dhinakaran Pandiyan
@ 2018-05-18 19:53         ` Dhinakaran Pandiyan
  0 siblings, 0 replies; 14+ messages in thread
From: Dhinakaran Pandiyan @ 2018-05-18 19:53 UTC (permalink / raw)
  To: intel-gfx, dhinakaran.pandiyan; +Cc: Jani Nikula

On Thursday, May 17, 2018 12:44:30 PM PDT Dhinakaran Pandiyan wrote:
> On Thu, 2018-05-17 at 10:33 +0300, Jani Nikula wrote:
> > On Thu, 17 May 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> > > On Wed, 16 May 2018, Dhinakaran Pandiyan <dhinakaran.pandiyan@intel
> > > 
> > > .com> wrote:
> > > > On Wed, 2018-05-16 at 11:01 +0300, Jani Nikula wrote:
> > > > > This reverts commit dc911f5bd8aacfcf8aabd5c26c88e04c837a938e.
> > > > > 
> > > > > Per the report, no matter what display mode you select with
> > > > > xrandr,
> > > > > the
> > > > > i915 driver will always select the alternate fixed mode. For
> > > > > the
> > > > > reporter this means that the display will always run at 40Hz
> > > > > which is
> > > > > quite annoying. This may be due to the mode comparison.
> > > > > 
> > > > > But there are some other potential issues. The choice of
> > > > > alt_fixed_mode
> > > > > seems dubious. It's the first non-preferred mode, but there are
> > > > > no
> > > > > guarantees that the only difference would be refresh rate.
> > > > > Similarly,
> > > > > there may be more than one preferred mode in the probed modes
> > > > > list,
> > > > > and
> > > > > the commit changes the preferred mode selection to choose the
> > > > > last
> > > > > one
> > > > > on the list instead of the first.
> > > > > 
> > > > > (Note that the probed modes list is the raw, unfiltered,
> > > > > unsorted
> > > > > list
> > > > > of modes from drm_add_edid_modes(), not the pretty result after
> > > > > a
> > > > > drm_helper_probe_single_connector_modes() call.)
> > > > > 
> > > > > Finally, we already have eerily similar code in place to find
> > > > > the
> > > > > downclock mode for DRRS that seems like could be reused here.
> > > > > 
> > > > > Back to the drawing board.
> > > > > 
> > > > > Note: This is a hand-crafted revert due to conflicts. If it
> > > > > fails to
> > > > > backport, please just try reverting the original commit
> > > > > directly.
> > > > > 
> > > > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105469
> > > > > Reported-by: Rune Petersen <rune@megahurts.dk>
> > > > > Reported-by: Mark Spencer <n7u4722r35@ynzlx.anonbox.net>
> > > > > Fixes: dc911f5bd8aa ("drm/i915/edp: Allow alternate fixed mode
> > > > > for
> > > > > eDP if available.")
> > > > > Cc: Clint Taylor <clinton.a.taylor@intel.com>
> > > > > Cc: David Weinehall <david.weinehall@linux.intel.com>
> > > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > > > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > > > Cc: Chris Wilson <chris@chris-wilson.co.uk>
> > > > > Cc: Jim Bride <jim.bride@linux.intel.com>
> > > > > Cc: Jani Nikula <jani.nikula@linux.intel.com>
> > > > > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> > > > > Cc: intel-gfx@lists.freedesktop.org
> > > > > Cc: <stable@vger.kernel.org> # v4.14+
> > > > > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> > > > > ---
> > > > >  drivers/gpu/drm/i915/intel_dp.c    | 38 +++++-----------------
> > > > > ------
> > > > > ----------
> > > > >  drivers/gpu/drm/i915/intel_drv.h   |  2 --
> > > > >  drivers/gpu/drm/i915/intel_dsi.c   |  2 +-
> > > > >  drivers/gpu/drm/i915/intel_dvo.c   |  2 +-
> > > > >  drivers/gpu/drm/i915/intel_lvds.c  |  3 +--
> > > > >  drivers/gpu/drm/i915/intel_panel.c |  6 ------
> > > > >  6 files changed, 8 insertions(+), 45 deletions(-)
> > > > > 
> > > > > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > > > > b/drivers/gpu/drm/i915/intel_dp.c
> > > > > index dde92e4af5d3..8320f0e8e3be 100644
> > > > > --- a/drivers/gpu/drm/i915/intel_dp.c
> > > > > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > > > > @@ -1679,23 +1679,6 @@ static int intel_dp_compute_bpp(struct
> > > > > intel_dp *intel_dp,
> > > > >  	return bpp;
> > > > >  }
> > > > >  
> > > > > -static bool intel_edp_compare_alt_mode(struct drm_display_mode
> > > > > *m1,
> > > > > -				       struct drm_display_mode
> > > > > *m2)
> > > > > -{
> > > > > -	bool bres = false;
> > > > > -
> > > > > -	if (m1 && m2)
> > > > > -		bres = (m1->hdisplay == m2->hdisplay &&
> > > > > -			m1->hsync_start == m2->hsync_start &&
> > > > > -			m1->hsync_end == m2->hsync_end &&
> > > > > -			m1->htotal == m2->htotal &&
> > > > > -			m1->vdisplay == m2->vdisplay &&
> > > > > -			m1->vsync_start == m2->vsync_start &&
> > > > > -			m1->vsync_end == m2->vsync_end &&
> > > > > -			m1->vtotal == m2->vtotal);
> > > > > -	return bres;
> > > > > -}
> > > > > -
> > > > >  /* Adjust link config limits based on compliance test
> > > > > requests. */
> > > > >  static void
> > > > >  intel_dp_adjust_compliance_config(struct intel_dp *intel_dp,
> > > > > @@ -1860,16 +1843,8 @@ intel_dp_compute_config(struct
> > > > > intel_encoder
> > > > > *encoder,
> > > > >  		pipe_config->has_audio = intel_conn_state-
> > > > > 
> > > > > > force_audio == HDMI_AUDIO_ON;
> > > > > 
> > > > >  
> > > > >  	if (intel_dp_is_edp(intel_dp) && intel_connector-
> > > > > 
> > > > > > panel.fixed_mode) {
> > > > > 
> > > > > -		struct drm_display_mode *panel_mode =
> > > > > -			intel_connector->panel.alt_fixed_mode;
> > > > > -		struct drm_display_mode *req_mode =
> > > > > &pipe_config-
> > > > > 
> > > > > > base.mode;
> > > > > 
> > > > > -
> > > > > -		if (!intel_edp_compare_alt_mode(req_mode,
> > > > > panel_mode))
> > > > > -			panel_mode = intel_connector-
> > > > > 
> > > > > > panel.fixed_mode;
> > > > > 
> > > > > -
> > > > > -		drm_mode_debug_printmodeline(panel_mode);
> > > > > -
> > > > > -		intel_fixed_panel_mode(panel_mode,
> > > > > adjusted_mode);
> > > > > +		intel_fixed_panel_mode(intel_connector-
> > > > > 
> > > > > > panel.fixed_mode,
> > > > > 
> > > > > +				       adjusted_mode);
> > > > >  
> > > > >  		if (INTEL_GEN(dev_priv) >= 9) {
> > > > >  			int ret;
> > > > > @@ -6159,7 +6134,6 @@ static bool
> > > > > intel_edp_init_connector(struct
> > > > > intel_dp *intel_dp,
> > > > >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > > > >  	struct drm_connector *connector = &intel_connector-
> > > > > 
> > > > > >base;
> > > > > 
> > > > >  	struct drm_display_mode *fixed_mode = NULL;
> > > > > -	struct drm_display_mode *alt_fixed_mode = NULL;
> > > > >  	struct drm_display_mode *downclock_mode = NULL;
> > > > >  	bool has_dpcd;
> > > > >  	struct drm_display_mode *scan;
> > > > > @@ -6214,14 +6188,13 @@ static bool
> > > > > intel_edp_init_connector(struct
> > > > > intel_dp *intel_dp,
> > > > >  	}
> > > > >  	intel_connector->edid = edid;
> > > > >  
> > > > > -	/* prefer fixed mode from EDID if available, save an
> > > > > alt
> > > > > mode also */
> > > > > +	/* prefer fixed mode from EDID if available */
> > > > >  	list_for_each_entry(scan, &connector->probed_modes,
> > > > > head) {
> > > > >  		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
> > > > >  			fixed_mode = drm_mode_duplicate(dev,
> > > > > scan);
> > > > >  			downclock_mode = intel_dp_drrs_init(
> > > > >  						intel_connecto
> > > > > r,
> > > > > fixed_mode);
> > > > > -		} else if (!alt_fixed_mode) {
> > > > > -			alt_fixed_mode =
> > > > > drm_mode_duplicate(dev,
> > > > > scan);
> > > > > +			break;
> > > > 
> > > > If multiple preferred modes are present, we'll now end up calling
> > > > drrs_init() only for the first. I see that this is what the
> > > > original
> > > > code did but this revert does more than removing support for
> > > > alternate
> > > > modes.
> > > 
> > > It boils down to which preferred mode is *the* preferred mode. I
> > > think
> > > the original code was, uh, preferrable. Note that drrs init scans
> > > the
> > > entire list of modes again to find the same size mode with the
> > > lowest
> > > refresh rate.
> > 
> > Moreover, as you can see, the original alt mode commit had more
> > subtle
> > changes than catches the eye, it caused regressions, and I feel
> > pretty
> > strongly about getting back to the drawing board and starting over
> > with
> > a clean slate than trying to tweak it when we are quite frankly way
> > overdue with the revert. If after that you think the drrs/downclock
> > selection needs tweaking, let's do that.
> 
> Yeah, agreed on starting with a clean slate.
> 
> The offending commit claims alternate mode was intended to be used for
> PSR testing. I don't see any psr_basic failures in BAT or any other PSR
> sub-tests failing on shards, must have been a non-CI machine then.
> 
> The revert itself looks correct,
> Reviewed-by: Dhinaakaran Pandiyan <dhinakaran.pandiyan@intel.com>

Hit Send too early and Cancel too late. The signature was misspelt, hope it 
doesn't confuse dim.


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

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

* Re: [Intel-gfx] [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available."
  2018-05-17 19:44         ` Dhinakaran Pandiyan
  (?)
@ 2018-05-22  9:44         ` Jani Nikula
  -1 siblings, 0 replies; 14+ messages in thread
From: Jani Nikula @ 2018-05-22  9:44 UTC (permalink / raw)
  To: dhinakaran.pandiyan, intel-gfx; +Cc: Paulo Zanoni, # v4 . 14+, Rodrigo Vivi

On Thu, 17 May 2018, Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> wrote:
> Yeah, agreed on starting with a clean slate.
>
> The offending commit claims alternate mode was intended to be used for
> PSR testing. I don't see any psr_basic failures in BAT or any other PSR
> sub-tests failing on shards, must have been a non-CI machine then.
>
> The revert itself looks correct,
> Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>

Thanks for the review, pushed to dinq.

BR,
Jani.

-- 
Jani Nikula, Intel Open Source Graphics Center

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

end of thread, other threads:[~2018-05-22  9:41 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-16  8:01 [PATCH] Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available." Jani Nikula
2018-05-16  9:29 ` ✓ Fi.CI.BAT: success for " Patchwork
2018-05-16 17:08 ` ✗ Fi.CI.IGT: failure " Patchwork
2018-05-16 23:30 ` [Intel-gfx] [PATCH] " Dhinakaran Pandiyan
2018-05-17  7:19   ` Jani Nikula
2018-05-17  7:33     ` Jani Nikula
2018-05-17  7:33       ` Jani Nikula
2018-05-17 19:44       ` [Intel-gfx] " Dhinakaran Pandiyan
2018-05-18 19:53         ` Dhinakaran Pandiyan
2018-05-17 19:44       ` [Intel-gfx] " Dhinakaran Pandiyan
2018-05-17 19:44         ` Dhinakaran Pandiyan
2018-05-22  9:44         ` [Intel-gfx] " Jani Nikula
2018-05-18  7:19 ` ✓ Fi.CI.BAT: success for " Patchwork
2018-05-18  8:10 ` ✗ Fi.CI.IGT: failure " Patchwork

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