drm/amd/display: Fix noise issue on HDMI AV mute
authorjsg <jsg@openbsd.org>
Thu, 4 Apr 2024 07:29:56 +0000 (07:29 +0000)
committerjsg <jsg@openbsd.org>
Thu, 4 Apr 2024 07:29:56 +0000 (07:29 +0000)
From Leo Ma
066bbc4306445f16e529a13a6e8d05ec6074416e in linux-6.6.y/6.6.24
69e3be6893a7e668660b05a966bead82bbddb01d in mainline linux

sys/dev/pci/drm/amd/display/dc/dcn30/dcn30_hwseq.c

index 255713e..ba47a1c 100644 (file)
@@ -619,10 +619,20 @@ void dcn30_set_avmute(struct pipe_ctx *pipe_ctx, bool enable)
        if (pipe_ctx == NULL)
                return;
 
-       if (dc_is_hdmi_signal(pipe_ctx->stream->signal) && pipe_ctx->stream_res.stream_enc != NULL)
+       if (dc_is_hdmi_signal(pipe_ctx->stream->signal) && pipe_ctx->stream_res.stream_enc != NULL) {
                pipe_ctx->stream_res.stream_enc->funcs->set_avmute(
                                pipe_ctx->stream_res.stream_enc,
                                enable);
+
+               /* Wait for two frame to make sure AV mute is sent out */
+               if (enable) {
+                       pipe_ctx->stream_res.tg->funcs->wait_for_state(pipe_ctx->stream_res.tg, CRTC_STATE_VACTIVE);
+                       pipe_ctx->stream_res.tg->funcs->wait_for_state(pipe_ctx->stream_res.tg, CRTC_STATE_VBLANK);
+                       pipe_ctx->stream_res.tg->funcs->wait_for_state(pipe_ctx->stream_res.tg, CRTC_STATE_VACTIVE);
+                       pipe_ctx->stream_res.tg->funcs->wait_for_state(pipe_ctx->stream_res.tg, CRTC_STATE_VBLANK);
+                       pipe_ctx->stream_res.tg->funcs->wait_for_state(pipe_ctx->stream_res.tg, CRTC_STATE_VACTIVE);
+               }
+       }
 }
 
 void dcn30_update_info_frame(struct pipe_ctx *pipe_ctx)