aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2941-drm-amdgpu-sort-probed-modes-before-adding-common-mo.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2941-drm-amdgpu-sort-probed-modes-before-adding-common-mo.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2941-drm-amdgpu-sort-probed-modes-before-adding-common-mo.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2941-drm-amdgpu-sort-probed-modes-before-adding-common-mo.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2941-drm-amdgpu-sort-probed-modes-before-adding-common-mo.patch
new file mode 100644
index 00000000..4d055379
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2941-drm-amdgpu-sort-probed-modes-before-adding-common-mo.patch
@@ -0,0 +1,56 @@
+From 05d2fc19fb418579547802a11dd50116f690d8fc Mon Sep 17 00:00:00 2001
+From: Yogesh Mohan Marimuthu <yogesh.mohanmarimuthu@amd.com>
+Date: Fri, 17 May 2019 15:46:58 +0530
+Subject: [PATCH 2941/4256] drm/amdgpu: sort probed modes before adding common
+ modes
+
+[Why]
+There are monitors which can have more than one preferred mode
+set. There are chances in these monitors that if common modes are
+added in function amdgpu_dm_connector_add_common_modes(), these
+common modes can be calculated with different preferred mode than
+the one used in function decide_crtc_timing_for_drm_display_mode().
+The preferred mode can be different because after common modes
+are added, the mode list is sorted and this changes the order of
+preferred modes in the list. The first mode in the list with
+preferred flag set is selected as preferred mode. Due to this the
+preferred mode selected varies.
+If same preferred mode is not selected in common mode calculation
+and crtc timing, then during mode set instead of setting preferred
+timing, common mode timing will be applied which can cause "out of
+range" message in the monitor with monitor blanking out.
+
+[How]
+Sort the modes before adding common modes. The same sorting function
+is called during common mode addition and deciding crtc timing.
+
+Signed-off-by: Yogesh Mohan Marimuthu <yogesh.mohanmarimuthu@amd.com>
+Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index d335b17689e4..32bad607712b 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -4910,6 +4910,15 @@ static void amdgpu_dm_connector_ddc_get_modes(struct drm_connector *connector,
+ amdgpu_dm_connector->num_modes =
+ drm_add_edid_modes(connector, edid);
+
++ /* sorting the probed modes before calling function
++ * amdgpu_dm_get_native_mode() since EDID can have
++ * more than one preferred mode. The modes that are
++ * later in the probed mode list could be of higher
++ * and preferred resolution. For example, 3840x2160
++ * resolution in base EDID preferred timing and 4096x2160
++ * preferred resolution in DID extension block later.
++ */
++ drm_mode_sort(&connector->probed_modes);
+ amdgpu_dm_get_native_mode(connector);
+ } else {
+ amdgpu_dm_connector->num_modes = 0;
+--
+2.17.1
+