Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/ddi: handle 128b/132b SST in intel_ddi_read_func_ctl()

We'll only ever get here in MST mode from MST stream encoders; the
primary encoder's ->get_config() won't be called when we've detected
it's MST.

v2: Read mst_master_transcoder in 128b/132b SST path (Imre)

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/436854c0bb6ab5c14c3d3837694ea60ac2fbaba2.1735912293.git.jani.nikula@intel.com

+17 -2
+17 -2
drivers/gpu/drm/i915/display/intel_ddi.c
··· 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 ··· 4148 4143 intel_ddi_read_func_ctl_fdi(encoder, pipe_config, ddi_func_ctl); 4149 4144 } else if (ddi_mode == TRANS_DDI_MODE_SELECT_DP_SST) { 4150 4145 intel_ddi_read_func_ctl_dp_sst(encoder, pipe_config, ddi_func_ctl); 4151 - } else if (ddi_mode == TRANS_DDI_MODE_SELECT_DP_MST || 4152 - (ddi_mode == TRANS_DDI_MODE_SELECT_FDI_OR_128B132B && HAS_DP20(display))) { 4146 + } else if (ddi_mode == TRANS_DDI_MODE_SELECT_DP_MST) { 4153 4147 intel_ddi_read_func_ctl_dp_mst(encoder, pipe_config, ddi_func_ctl); 4148 + } else if (ddi_mode == TRANS_DDI_MODE_SELECT_FDI_OR_128B132B && HAS_DP20(display)) { 4149 + struct intel_dp *intel_dp = enc_to_intel_dp(encoder); 4150 + 4151 + /* 4152 + * If this is true, we know we're being called from mst stream 4153 + * encoder's ->get_config(). 4154 + */ 4155 + if (intel_dp->is_mst) 4156 + intel_ddi_read_func_ctl_dp_mst(encoder, pipe_config, ddi_func_ctl); 4157 + else 4158 + intel_ddi_read_func_ctl_dp_sst(encoder, pipe_config, ddi_func_ctl); 4154 4159 } 4155 4160 } 4156 4161