]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.15
authorSasha Levin <sashal@kernel.org>
Sun, 31 Mar 2024 13:26:25 +0000 (09:26 -0400)
committerSasha Levin <sashal@kernel.org>
Sun, 31 Mar 2024 13:26:25 +0000 (09:26 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.15/drm-amd-display-preserve-original-aspect-ratio-in-cr.patch [new file with mode: 0644]
queue-5.15/drm-amdgpu-use-drm_mode_copy.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/drm-amd-display-preserve-original-aspect-ratio-in-cr.patch b/queue-5.15/drm-amd-display-preserve-original-aspect-ratio-in-cr.patch
new file mode 100644 (file)
index 0000000..5a49836
--- /dev/null
@@ -0,0 +1,48 @@
+From 327ec5dce7a70d5f742d5a096209c9bad1af47b1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 30 Jan 2024 15:34:08 +0800
+Subject: drm/amd/display: Preserve original aspect ratio in create stream
+
+From: Tom Chung <chiahsuan.chung@amd.com>
+
+[ Upstream commit 79f3e38f60e5b2416ba99804d83d22e69ae592a3 ]
+
+[Why]
+The original picture aspect ratio in mode struct may have chance be
+overwritten with wrong aspect ratio data in create_stream_for_sink().
+It will create a different VIC output and cause HDMI compliance test
+failed.
+
+[How]
+Preserve the original picture aspect ratio data during create the
+stream.
+
+Cc: Mario Limonciello <mario.limonciello@amd.com>
+Cc: Alex Deucher <alexander.deucher@amd.com>
+Cc: stable@vger.kernel.org
+Reviewed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
+Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
+Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 ++
+ 1 file changed, 2 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 9356decd14513..b7b8a2d77da67 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -6334,7 +6334,9 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
+               if (recalculate_timing) {
+                       freesync_mode = get_highest_refresh_rate_mode(aconnector, false);
+                       drm_mode_copy(&saved_mode, &mode);
++                      saved_mode.picture_aspect_ratio = mode.picture_aspect_ratio;
+                       drm_mode_copy(&mode, freesync_mode);
++                      mode.picture_aspect_ratio = saved_mode.picture_aspect_ratio;
+               } else {
+                       decide_crtc_timing_for_drm_display_mode(
+                               &mode, preferred_mode, scale);
+-- 
+2.43.0
+
diff --git a/queue-5.15/drm-amdgpu-use-drm_mode_copy.patch b/queue-5.15/drm-amdgpu-use-drm_mode_copy.patch
new file mode 100644 (file)
index 0000000..90d0052
--- /dev/null
@@ -0,0 +1,132 @@
+From 633f58420f3ad4bae0b660725a8e1ca06e05de0d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 18 Feb 2022 12:03:45 +0200
+Subject: drm/amdgpu: Use drm_mode_copy()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Ville Syrjälä <ville.syrjala@linux.intel.com>
+
+[ Upstream commit 426c89aa203bcec9d9cf6eea36735eafa1b1f099 ]
+
+struct drm_display_mode embeds a list head, so overwriting
+the full struct with another one will corrupt the list
+(if the destination mode is on a list). Use drm_mode_copy()
+instead which explicitly preserves the list head of
+the destination mode.
+
+Even if we know the destination mode is not on any list
+using drm_mode_copy() seems decent as it sets a good
+example. Bad examples of not using it might eventually
+get copied into code where preserving the list head
+actually matters.
+
+Obviously one case not covered here is when the mode
+itself is embedded in a larger structure and the whole
+structure is copied. But if we are careful when copying
+into modes embedded in structures I think we can be a
+little more reassured that bogus list heads haven't been
+propagated in.
+
+@is_mode_copy@
+@@
+drm_mode_copy(...)
+{
+...
+}
+
+@depends on !is_mode_copy@
+struct drm_display_mode *mode;
+expression E, S;
+@@
+(
+- *mode = E
++ drm_mode_copy(mode, &E)
+|
+- memcpy(mode, E, S)
++ drm_mode_copy(mode, E)
+)
+
+@depends on !is_mode_copy@
+struct drm_display_mode mode;
+expression E;
+@@
+(
+- mode = E
++ drm_mode_copy(&mode, &E)
+|
+- memcpy(&mode, E, S)
++ drm_mode_copy(&mode, E)
+)
+
+@@
+struct drm_display_mode *mode;
+@@
+- &*mode
++ mode
+
+Cc: Alex Deucher <alexander.deucher@amd.com>
+Cc: Harry Wentland <harry.wentland@amd.com>
+Cc: Leo Li <sunpeng.li@amd.com>
+Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
+Cc: amd-gfx@lists.freedesktop.org
+Reviewed-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Stable-dep-of: 79f3e38f60e5 ("drm/amd/display: Preserve original aspect ratio in create stream")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c    | 4 ++--
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 +++---
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+index c777aff164b76..654f99f4107ea 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+@@ -625,7 +625,7 @@ amdgpu_connector_fixup_lcd_native_mode(struct drm_encoder *encoder,
+               if (mode->type & DRM_MODE_TYPE_PREFERRED) {
+                       if (mode->hdisplay != native_mode->hdisplay ||
+                           mode->vdisplay != native_mode->vdisplay)
+-                              memcpy(native_mode, mode, sizeof(*mode));
++                              drm_mode_copy(native_mode, mode);
+               }
+       }
+@@ -634,7 +634,7 @@ amdgpu_connector_fixup_lcd_native_mode(struct drm_encoder *encoder,
+               list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
+                       if (mode->hdisplay == native_mode->hdisplay &&
+                           mode->vdisplay == native_mode->vdisplay) {
+-                              *native_mode = *mode;
++                              drm_mode_copy(native_mode, mode);
+                               drm_mode_set_crtcinfo(native_mode, CRTC_INTERLACE_HALVE_V);
+                               DRM_DEBUG_KMS("Determined LVDS native mode details from EDID\n");
+                               break;
+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 7385efe699f88..9356decd14513 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -6219,7 +6219,7 @@ get_highest_refresh_rate_mode(struct amdgpu_dm_connector *aconnector,
+               }
+       }
+-      aconnector->freesync_vid_base = *m_pref;
++      drm_mode_copy(&aconnector->freesync_vid_base, m_pref);
+       return m_pref;
+ }
+@@ -6333,8 +6333,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
+                                is_freesync_video_mode(&mode, aconnector);
+               if (recalculate_timing) {
+                       freesync_mode = get_highest_refresh_rate_mode(aconnector, false);
+-                      saved_mode = mode;
+-                      mode = *freesync_mode;
++                      drm_mode_copy(&saved_mode, &mode);
++                      drm_mode_copy(&mode, freesync_mode);
+               } else {
+                       decide_crtc_timing_for_drm_display_mode(
+                               &mode, preferred_mode, scale);
+-- 
+2.43.0
+
index 2e748f18ad5bd1d37d158bcf6e2786a870ca2689..44edb1c16e8481f89f5ce5b5e85e545740412417 100644 (file)
@@ -576,3 +576,5 @@ mmc-core-avoid-negative-index-with-array-access.patch
 net-ll_temac-platform_get_resource-replaced-by-wrong-function.patch
 drm-i915-gt-reset-queue_priority_hint-on-parking.patch
 usb-cdc-wdm-close-race-between-read-and-workqueue.patch
+drm-amdgpu-use-drm_mode_copy.patch
+drm-amd-display-preserve-original-aspect-ratio-in-cr.patch