@@ -300,9 +300,21 @@ static void configure_dual_link_mode(struct intel_encoder *encoder,
300
300
{
301
301
struct drm_i915_private * dev_priv = to_i915 (encoder -> base .dev );
302
302
struct intel_dsi * intel_dsi = enc_to_intel_dsi (encoder );
303
+ i915_reg_t dss_ctl1_reg , dss_ctl2_reg ;
303
304
u32 dss_ctl1 ;
304
305
305
- dss_ctl1 = intel_de_read (dev_priv , DSS_CTL1 );
306
+ /* FIXME: Move all DSS handling to intel_vdsc.c */
307
+ if (DISPLAY_VER (dev_priv ) >= 12 ) {
308
+ struct intel_crtc * crtc = to_intel_crtc (pipe_config -> uapi .crtc );
309
+
310
+ dss_ctl1_reg = ICL_PIPE_DSS_CTL1 (crtc -> pipe );
311
+ dss_ctl2_reg = ICL_PIPE_DSS_CTL2 (crtc -> pipe );
312
+ } else {
313
+ dss_ctl1_reg = DSS_CTL1 ;
314
+ dss_ctl2_reg = DSS_CTL2 ;
315
+ }
316
+
317
+ dss_ctl1 = intel_de_read (dev_priv , dss_ctl1_reg );
306
318
dss_ctl1 |= SPLITTER_ENABLE ;
307
319
dss_ctl1 &= ~OVERLAP_PIXELS_MASK ;
308
320
dss_ctl1 |= OVERLAP_PIXELS (intel_dsi -> pixel_overlap );
@@ -323,16 +335,16 @@ static void configure_dual_link_mode(struct intel_encoder *encoder,
323
335
324
336
dss_ctl1 &= ~LEFT_DL_BUF_TARGET_DEPTH_MASK ;
325
337
dss_ctl1 |= LEFT_DL_BUF_TARGET_DEPTH (dl_buffer_depth );
326
- dss_ctl2 = intel_de_read (dev_priv , DSS_CTL2 );
338
+ dss_ctl2 = intel_de_read (dev_priv , dss_ctl2_reg );
327
339
dss_ctl2 &= ~RIGHT_DL_BUF_TARGET_DEPTH_MASK ;
328
340
dss_ctl2 |= RIGHT_DL_BUF_TARGET_DEPTH (dl_buffer_depth );
329
- intel_de_write (dev_priv , DSS_CTL2 , dss_ctl2 );
341
+ intel_de_write (dev_priv , dss_ctl2_reg , dss_ctl2 );
330
342
} else {
331
343
/* Interleave */
332
344
dss_ctl1 |= DUAL_LINK_MODE_INTERLEAVE ;
333
345
}
334
346
335
- intel_de_write (dev_priv , DSS_CTL1 , dss_ctl1 );
347
+ intel_de_write (dev_priv , dss_ctl1_reg , dss_ctl1 );
336
348
}
337
349
338
350
/* aka DSI 8X clock */
0 commit comments