@@ -4049,6 +4049,11 @@ static void intel_ddi_read_func_ctl_dp_sst(struct intel_encoder *encoder,
4049
4049
crtc_state -> lane_count =
4050
4050
((ddi_func_ctl & DDI_PORT_WIDTH_MASK ) >> DDI_PORT_WIDTH_SHIFT ) + 1 ;
4051
4051
4052
+ if (DISPLAY_VER (display ) >= 12 &&
4053
+ (ddi_func_ctl & TRANS_DDI_MODE_SELECT_MASK ) == TRANS_DDI_MODE_SELECT_FDI_OR_128B132B )
4054
+ crtc_state -> mst_master_transcoder =
4055
+ REG_FIELD_GET (TRANS_DDI_MST_TRANSPORT_SELECT_MASK , ddi_func_ctl );
4056
+
4052
4057
intel_cpu_transcoder_get_m1_n1 (crtc , cpu_transcoder , & crtc_state -> dp_m_n );
4053
4058
intel_cpu_transcoder_get_m2_n2 (crtc , cpu_transcoder , & crtc_state -> dp_m2_n2 );
4054
4059
@@ -4143,9 +4148,19 @@ static void intel_ddi_read_func_ctl(struct intel_encoder *encoder,
4143
4148
intel_ddi_read_func_ctl_fdi (encoder , pipe_config , ddi_func_ctl );
4144
4149
} else if (ddi_mode == TRANS_DDI_MODE_SELECT_DP_SST ) {
4145
4150
intel_ddi_read_func_ctl_dp_sst (encoder , pipe_config , ddi_func_ctl );
4146
- } else if (ddi_mode == TRANS_DDI_MODE_SELECT_DP_MST ||
4147
- (ddi_mode == TRANS_DDI_MODE_SELECT_FDI_OR_128B132B && HAS_DP20 (display ))) {
4151
+ } else if (ddi_mode == TRANS_DDI_MODE_SELECT_DP_MST ) {
4148
4152
intel_ddi_read_func_ctl_dp_mst (encoder , pipe_config , ddi_func_ctl );
4153
+ } else if (ddi_mode == TRANS_DDI_MODE_SELECT_FDI_OR_128B132B && HAS_DP20 (display )) {
4154
+ struct intel_dp * intel_dp = enc_to_intel_dp (encoder );
4155
+
4156
+ /*
4157
+ * If this is true, we know we're being called from mst stream
4158
+ * encoder's ->get_config().
4159
+ */
4160
+ if (intel_dp -> is_mst )
4161
+ intel_ddi_read_func_ctl_dp_mst (encoder , pipe_config , ddi_func_ctl );
4162
+ else
4163
+ intel_ddi_read_func_ctl_dp_sst (encoder , pipe_config , ddi_func_ctl );
4149
4164
}
4150
4165
}
4151
4166
0 commit comments