From: Yu Zhang <[email protected]>

gen11_dsi_get_timings() only doubles hsync_start/end for dual-link
DSI in video mode. For command mode dual-link, the hardware stores
per-link values (e.g. hsync_start=1380 instead of 2762), but the
readout does not compensate, causing:

  [drm] *ERROR* hw.pipe_mode.crtc_hsync_start (expected 2762, found 1380)

Fix this by applying the dual-link hsync doubling unconditionally,
matching the SET side where hsync is now halved for all modes.

Fixes: d1aeb5f399d9 ("drm/i915/icl: Configure DSI transcoder timings")
Cc: [email protected]
Signed-off-by: Yu Zhang <[email protected]>
---
 drivers/gpu/drm/i915/display/icl_dsi.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c 
b/drivers/gpu/drm/i915/display/icl_dsi.c
index c667d5941..f579cba28 100644
--- a/drivers/gpu/drm/i915/display/icl_dsi.c
+++ b/drivers/gpu/drm/i915/display/icl_dsi.c
@@ -1527,11 +1527,9 @@ static void gen11_dsi_get_timings(struct intel_encoder 
*encoder,
        adjusted_mode->crtc_hblank_start = adjusted_mode->crtc_hdisplay;
        adjusted_mode->crtc_hblank_end = adjusted_mode->crtc_htotal;
 
-       if (intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE) {
-               if (intel_dsi->dual_link) {
-                       adjusted_mode->crtc_hsync_start *= 2;
-                       adjusted_mode->crtc_hsync_end *= 2;
-               }
+       if (intel_dsi->dual_link) {
+               adjusted_mode->crtc_hsync_start *= 2;
+               adjusted_mode->crtc_hsync_end *= 2;
        }
        adjusted_mode->crtc_vblank_start = adjusted_mode->crtc_vdisplay;
        adjusted_mode->crtc_vblank_end = adjusted_mode->crtc_vtotal;
-- 
2.43.0

Reply via email to