|
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 |
|