Files
omarchy-pkgs/pkgbuilds/linux-omarchy/0461-vesa-dsc-passthru-mode-match-fix.patch
T

52 lines
1.8 KiB
Diff

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -7642,6 +7642,7 @@ create_stream_for_sink(struct drm_connector *connector,
struct drm_display_mode saved_mode;
struct drm_display_mode *freesync_mode = NULL;
struct drm_display_mode *dsc_passthru_mode = NULL;
+ unsigned int dsc_passthru_match_flags;
bool native_mode_found = false;
bool recalculate_timing = false;
bool scale = dm_state->scaling != RMX_OFF;
@@ -7708,6 +7709,22 @@ create_stream_for_sink(struct drm_connector *connector,
mode_refresh = drm_mode_vrefresh(&mode);
+ dsc_passthru_match_flags = DRM_MODE_MATCH_TIMINGS |
+ DRM_MODE_MATCH_CLOCK |
+ DRM_MODE_MATCH_FLAGS |
+ DRM_MODE_MATCH_3D_FLAGS;
+ if (mode.picture_aspect_ratio)
+ dsc_passthru_match_flags |= DRM_MODE_MATCH_ASPECT_RATIO;
+
+ list_for_each_entry(dsc_passthru_mode, &connector->modes, head) {
+ if (drm_mode_match(dsc_passthru_mode, &mode,
+ dsc_passthru_match_flags)) {
+ mode.dsc_passthrough_timings_support =
+ dsc_passthru_mode->dsc_passthrough_timings_support;
+ break;
+ }
+ }
+
if (preferred_mode == NULL) {
/*
* This may not be an error, the use case is when we have no
@@ -7733,16 +7750,6 @@ create_stream_for_sink(struct drm_connector *connector,
}
}
- list_for_each_entry(dsc_passthru_mode, &connector->modes, head) {
- if (dsc_passthru_mode->hdisplay == mode.hdisplay &&
- dsc_passthru_mode->vdisplay == mode.vdisplay &&
- drm_mode_vrefresh(dsc_passthru_mode) == mode_refresh) {
- mode.dsc_passthrough_timings_support =
- dsc_passthru_mode->dsc_passthrough_timings_support;
- break;
- }
- }
-
if (recalculate_timing)
drm_mode_set_crtcinfo(&saved_mode, 0);