Patrik Jakobsson fc98aa
From 6fe6ece398f7431784847e922a2c8c385dc58a35 Mon Sep 17 00:00:00 2001
Patrik Jakobsson fc98aa
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
Patrik Jakobsson fc98aa
Date: Wed, 21 Dec 2022 16:24:13 +0100
Patrik Jakobsson fc98aa
Subject: Revert "drm/amd/display: Enable Freesync Video Mode by default"
Patrik Jakobsson fc98aa
MIME-Version: 1.0
Patrik Jakobsson fc98aa
Content-Type: text/plain; charset=UTF-8
Patrik Jakobsson fc98aa
Content-Transfer-Encoding: 8bit
Patrik Jakobsson fc98aa
Git-commit: 6fe6ece398f7431784847e922a2c8c385dc58a35
Patrik Jakobsson fc98aa
Patch-mainline: v6.2-rc3
Patrik Jakobsson fc98aa
References: git-fixes
Patrik Jakobsson fc98aa
Patrik Jakobsson fc98aa
This reverts commit de05abe6b9d0fe08f65d744f7f75a4cba4df27ad.
Patrik Jakobsson fc98aa
Patrik Jakobsson fc98aa
The bug referenced below was bisected to this commit. There has been no
Patrik Jakobsson fc98aa
activity toward fixing it in 3 months, so let's revert for now.
Patrik Jakobsson fc98aa
Patrik Jakobsson fc98aa
Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2162
Patrik Jakobsson fc98aa
Signed-off-by: Michel Dänzer <mdaenzer@redhat.com>
Patrik Jakobsson fc98aa
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Patrik Jakobsson fc98aa
Cc: stable@vger.kernel.org
Patrik Jakobsson fc98aa
Acked-by: Patrik Jakobsson <pjakobsson@suse.de>
Patrik Jakobsson fc98aa
---
Patrik Jakobsson fc98aa
 drivers/gpu/drm/amd/amdgpu/amdgpu.h           |  1 +
Patrik Jakobsson fc98aa
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c       | 27 +++++++++++++++++++
Patrik Jakobsson fc98aa
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 +++++----
Patrik Jakobsson fc98aa
 3 files changed, 35 insertions(+), 5 deletions(-)
Patrik Jakobsson fc98aa
Patrik Jakobsson fc98aa
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
Patrik Jakobsson fc98aa
index 6b74df446694..e3e2e6e3b485 100644
Patrik Jakobsson fc98aa
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
Patrik Jakobsson fc98aa
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
Patrik Jakobsson fc98aa
@@ -195,6 +195,7 @@ extern int amdgpu_emu_mode;
Patrik Jakobsson fc98aa
 extern uint amdgpu_smu_memory_pool_size;
Patrik Jakobsson fc98aa
 extern int amdgpu_smu_pptable_id;
Patrik Jakobsson fc98aa
 extern uint amdgpu_dc_feature_mask;
Patrik Jakobsson fc98aa
+extern uint amdgpu_freesync_vid_mode;
Patrik Jakobsson fc98aa
 extern uint amdgpu_dc_debug_mask;
Patrik Jakobsson fc98aa
 extern uint amdgpu_dc_visual_confirm;
Patrik Jakobsson fc98aa
 extern uint amdgpu_dm_abm_level;
Patrik Jakobsson fc98aa
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
Patrik Jakobsson fc98aa
index b4f2d61ea0d5..1353ffd08988 100644
Patrik Jakobsson fc98aa
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
Patrik Jakobsson fc98aa
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
Patrik Jakobsson fc98aa
@@ -181,6 +181,7 @@ int amdgpu_mes_kiq;
Patrik Jakobsson fc98aa
 int amdgpu_noretry = -1;
Patrik Jakobsson fc98aa
 int amdgpu_force_asic_type = -1;
Patrik Jakobsson fc98aa
 int amdgpu_tmz = -1; /* auto */
Patrik Jakobsson fc98aa
+uint amdgpu_freesync_vid_mode;
Patrik Jakobsson fc98aa
 int amdgpu_reset_method = -1; /* auto */
Patrik Jakobsson fc98aa
 int amdgpu_num_kcq = -1;
Patrik Jakobsson fc98aa
 int amdgpu_smartshift_bias;
Patrik Jakobsson fc98aa
@@ -879,6 +880,32 @@ module_param_named(backlight, amdgpu_backlight, bint, 0444);
Patrik Jakobsson fc98aa
 MODULE_PARM_DESC(tmz, "Enable TMZ feature (-1 = auto (default), 0 = off, 1 = on)");
Patrik Jakobsson fc98aa
 module_param_named(tmz, amdgpu_tmz, int, 0444);
Patrik Jakobsson fc98aa
 
Patrik Jakobsson fc98aa
+/**
Patrik Jakobsson fc98aa
+ * DOC: freesync_video (uint)
Patrik Jakobsson fc98aa
+ * Enable the optimization to adjust front porch timing to achieve seamless
Patrik Jakobsson fc98aa
+ * mode change experience when setting a freesync supported mode for which full
Patrik Jakobsson fc98aa
+ * modeset is not needed.
Patrik Jakobsson fc98aa
+ *
Patrik Jakobsson fc98aa
+ * The Display Core will add a set of modes derived from the base FreeSync
Patrik Jakobsson fc98aa
+ * video mode into the corresponding connector's mode list based on commonly
Patrik Jakobsson fc98aa
+ * used refresh rates and VRR range of the connected display, when users enable
Patrik Jakobsson fc98aa
+ * this feature. From the userspace perspective, they can see a seamless mode
Patrik Jakobsson fc98aa
+ * change experience when the change between different refresh rates under the
Patrik Jakobsson fc98aa
+ * same resolution. Additionally, userspace applications such as Video playback
Patrik Jakobsson fc98aa
+ * can read this modeset list and change the refresh rate based on the video
Patrik Jakobsson fc98aa
+ * frame rate. Finally, the userspace can also derive an appropriate mode for a
Patrik Jakobsson fc98aa
+ * particular refresh rate based on the FreeSync Mode and add it to the
Patrik Jakobsson fc98aa
+ * connector's mode list.
Patrik Jakobsson fc98aa
+ *
Patrik Jakobsson fc98aa
+ * Note: This is an experimental feature.
Patrik Jakobsson fc98aa
+ *
Patrik Jakobsson fc98aa
+ * The default value: 0 (off).
Patrik Jakobsson fc98aa
+ */
Patrik Jakobsson fc98aa
+MODULE_PARM_DESC(
Patrik Jakobsson fc98aa
+	freesync_video,
Patrik Jakobsson fc98aa
+	"Enable freesync modesetting optimization feature (0 = off (default), 1 = on)");
Patrik Jakobsson fc98aa
+module_param_named(freesync_video, amdgpu_freesync_vid_mode, uint, 0444);
Patrik Jakobsson fc98aa
+
Patrik Jakobsson fc98aa
 /**
Patrik Jakobsson fc98aa
  * DOC: reset_method (int)
Patrik Jakobsson fc98aa
  * GPU reset method (-1 = auto (default), 0 = legacy, 1 = mode0, 2 = mode1, 3 = mode2, 4 = baco)
Patrik Jakobsson fc98aa
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
Patrik Jakobsson fc98aa
index 86bc23a67d97..1b7f20a9d4ae 100644
Patrik Jakobsson fc98aa
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
Patrik Jakobsson fc98aa
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
Patrik Jakobsson fc98aa
@@ -5835,7 +5835,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
Patrik Jakobsson fc98aa
 		 */
Patrik Jakobsson fc98aa
 		DRM_DEBUG_DRIVER("No preferred mode found\n");
Patrik Jakobsson fc98aa
 	} else {
Patrik Jakobsson fc98aa
-		recalculate_timing = is_freesync_video_mode(&mode, aconnector);
Patrik Jakobsson fc98aa
+		recalculate_timing = amdgpu_freesync_vid_mode &&
Patrik Jakobsson fc98aa
+				 is_freesync_video_mode(&mode, aconnector);
Patrik Jakobsson fc98aa
 		if (recalculate_timing) {
Patrik Jakobsson fc98aa
 			freesync_mode = get_highest_refresh_rate_mode(aconnector, false);
Patrik Jakobsson fc98aa
 			drm_mode_copy(&saved_mode, &mode);
Patrik Jakobsson fc98aa
@@ -6986,7 +6987,7 @@ static void amdgpu_dm_connector_add_freesync_modes(struct drm_connector *connect
Patrik Jakobsson fc98aa
 	struct amdgpu_dm_connector *amdgpu_dm_connector =
Patrik Jakobsson fc98aa
 		to_amdgpu_dm_connector(connector);
Patrik Jakobsson fc98aa
 
Patrik Jakobsson fc98aa
-	if (!edid)
Patrik Jakobsson fc98aa
+	if (!(amdgpu_freesync_vid_mode && edid))
Patrik Jakobsson fc98aa
 		return;
Patrik Jakobsson fc98aa
 
Patrik Jakobsson fc98aa
 	if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10)
Patrik Jakobsson fc98aa
@@ -8850,7 +8851,8 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
Patrik Jakobsson fc98aa
 		 * TODO: Refactor this function to allow this check to work
Patrik Jakobsson fc98aa
 		 * in all conditions.
Patrik Jakobsson fc98aa
 		 */
Patrik Jakobsson fc98aa
-		if (dm_new_crtc_state->stream &&
Patrik Jakobsson fc98aa
+		if (amdgpu_freesync_vid_mode &&
Patrik Jakobsson fc98aa
+		    dm_new_crtc_state->stream &&
Patrik Jakobsson fc98aa
 		    is_timing_unchanged_for_freesync(new_crtc_state, old_crtc_state))
Patrik Jakobsson fc98aa
 			goto skip_modeset;
Patrik Jakobsson fc98aa
 
Patrik Jakobsson fc98aa
@@ -8885,7 +8887,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
Patrik Jakobsson fc98aa
 		if (!dm_old_crtc_state->stream)
Patrik Jakobsson fc98aa
 			goto skip_modeset;
Patrik Jakobsson fc98aa
 
Patrik Jakobsson fc98aa
-		if (dm_new_crtc_state->stream &&
Patrik Jakobsson fc98aa
+		if (amdgpu_freesync_vid_mode && dm_new_crtc_state->stream &&
Patrik Jakobsson fc98aa
 		    is_timing_unchanged_for_freesync(new_crtc_state,
Patrik Jakobsson fc98aa
 						     old_crtc_state)) {
Patrik Jakobsson fc98aa
 			new_crtc_state->mode_changed = false;
Patrik Jakobsson fc98aa
@@ -8897,7 +8899,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
Patrik Jakobsson fc98aa
 			set_freesync_fixed_config(dm_new_crtc_state);
Patrik Jakobsson fc98aa
 
Patrik Jakobsson fc98aa
 			goto skip_modeset;
Patrik Jakobsson fc98aa
-		} else if (aconnector &&
Patrik Jakobsson fc98aa
+		} else if (amdgpu_freesync_vid_mode && aconnector &&
Patrik Jakobsson fc98aa
 			   is_freesync_video_mode(&new_crtc_state->mode,
Patrik Jakobsson fc98aa
 						  aconnector)) {
Patrik Jakobsson fc98aa
 			struct drm_display_mode *high_mode;
Patrik Jakobsson fc98aa
-- 
Patrik Jakobsson fc98aa
2.39.0
Patrik Jakobsson fc98aa