From: Sasha Levin Date: Sun, 31 Mar 2024 13:26:25 +0000 (-0400) Subject: Fixes for 5.15 X-Git-Tag: v6.7.12~86 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ef8f5e6c4567cd11dbbe3c724cda3eaec4cb1b51;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.15 Signed-off-by: Sasha Levin --- 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 index 00000000000..5a498361944 --- /dev/null +++ b/queue-5.15/drm-amd-display-preserve-original-aspect-ratio-in-cr.patch @@ -0,0 +1,48 @@ +From 327ec5dce7a70d5f742d5a096209c9bad1af47b1 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 30 Jan 2024 15:34:08 +0800 +Subject: drm/amd/display: Preserve original aspect ratio in create stream + +From: Tom Chung + +[ 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 +Cc: Alex Deucher +Cc: stable@vger.kernel.org +Reviewed-by: Aurabindo Pillai +Signed-off-by: Tom Chung +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..90d0052284d --- /dev/null +++ b/queue-5.15/drm-amdgpu-use-drm_mode_copy.patch @@ -0,0 +1,132 @@ +From 633f58420f3ad4bae0b660725a8e1ca06e05de0d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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ä + +[ 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 +Cc: Harry Wentland +Cc: Leo Li +Cc: Rodrigo Siqueira +Cc: amd-gfx@lists.freedesktop.org +Reviewed-by: Harry Wentland +Signed-off-by: Ville Syrjälä +Signed-off-by: Alex Deucher +Stable-dep-of: 79f3e38f60e5 ("drm/amd/display: Preserve original aspect ratio in create stream") +Signed-off-by: Sasha Levin +--- + 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 + diff --git a/queue-5.15/series b/queue-5.15/series index 2e748f18ad5..44edb1c16e8 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -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