@@ -3199,7 +3199,9 @@ static void intel_ddi_post_disable_hdmi_or_sst(struct intel_atomic_state *state,
3199
3199
{
3200
3200
struct intel_display * display = to_intel_display (encoder );
3201
3201
struct drm_i915_private * dev_priv = to_i915 (encoder -> base .dev );
3202
+ struct intel_dp * intel_dp = enc_to_intel_dp (encoder );
3202
3203
struct intel_crtc * pipe_crtc ;
3204
+ bool is_hdmi = intel_crtc_has_type (old_crtc_state , INTEL_OUTPUT_HDMI );
3203
3205
int i ;
3204
3206
3205
3207
for_each_pipe_crtc_modeset_disable (display , pipe_crtc , old_crtc_state , i ) {
@@ -3211,6 +3213,20 @@ static void intel_ddi_post_disable_hdmi_or_sst(struct intel_atomic_state *state,
3211
3213
3212
3214
intel_disable_transcoder (old_crtc_state );
3213
3215
3216
+ /* 128b/132b SST */
3217
+ if (!is_hdmi && intel_dp_is_uhbr (old_crtc_state )) {
3218
+ /* VCPID 1, start slot 0 for 128b/132b, clear */
3219
+ drm_dp_dpcd_write_payload (& intel_dp -> aux , 1 , 0 , 0 );
3220
+
3221
+ intel_ddi_clear_act_sent (encoder , old_crtc_state );
3222
+
3223
+ intel_de_rmw (display , TRANS_DDI_FUNC_CTL (display , old_crtc_state -> cpu_transcoder ),
3224
+ TRANS_DDI_DP_VC_PAYLOAD_ALLOC , 0 );
3225
+
3226
+ intel_ddi_wait_for_act_sent (encoder , old_crtc_state );
3227
+ drm_dp_dpcd_poll_act_handled (& intel_dp -> aux , 0 );
3228
+ }
3229
+
3214
3230
intel_ddi_disable_transcoder_func (old_crtc_state );
3215
3231
3216
3232
for_each_pipe_crtc_modeset_disable (display , pipe_crtc , old_crtc_state , i ) {
@@ -3493,6 +3509,19 @@ static void intel_ddi_enable(struct intel_atomic_state *state,
3493
3509
/* Enable/Disable DP2.0 SDP split config before transcoder */
3494
3510
intel_audio_sdp_split_update (crtc_state );
3495
3511
3512
+ /* 128b/132b SST */
3513
+ if (!is_hdmi && intel_dp_is_uhbr (crtc_state )) {
3514
+ struct intel_dp * intel_dp = enc_to_intel_dp (encoder );
3515
+
3516
+ intel_ddi_clear_act_sent (encoder , crtc_state );
3517
+
3518
+ intel_de_rmw (display , TRANS_DDI_FUNC_CTL (display , cpu_transcoder ), 0 ,
3519
+ TRANS_DDI_DP_VC_PAYLOAD_ALLOC );
3520
+
3521
+ intel_ddi_wait_for_act_sent (encoder , crtc_state );
3522
+ drm_dp_dpcd_poll_act_handled (& intel_dp -> aux , 0 );
3523
+ }
3524
+
3496
3525
intel_enable_transcoder (crtc_state );
3497
3526
3498
3527
intel_ddi_wait_for_fec_status (encoder , crtc_state , true);
0 commit comments